Skip to content
This repository was archived by the owner on Dec 20, 2019. It is now read-only.

Commit bdb3a11

Browse files
committed
Change some code slighly in AArch64InstrInfo.cpp to work around a gcc optimizer problem. dotnet/android#1182.
1 parent 3b82b3c commit bdb3a11

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

lib/Target/AArch64/AArch64InstrInfo.cpp

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,51 +1703,61 @@ void AArch64InstrInfo::storeRegToStackSlot(
17031703
else if (AArch64::DDRegClass.hasSubClassEq(RC)) {
17041704
assert(Subtarget.hasNEON() &&
17051705
"Unexpected register store without NEON");
1706-
Opc = AArch64::ST1Twov1d, Offset = false;
1706+
Opc = AArch64::ST1Twov1d;
1707+
Offset = false;
17071708
}
17081709
break;
17091710
case 24:
17101711
if (AArch64::DDDRegClass.hasSubClassEq(RC)) {
17111712
assert(Subtarget.hasNEON() &&
17121713
"Unexpected register store without NEON");
1713-
Opc = AArch64::ST1Threev1d, Offset = false;
1714+
Opc = AArch64::ST1Threev1d;
1715+
Offset = false;
17141716
}
17151717
break;
17161718
case 32:
17171719
if (AArch64::DDDDRegClass.hasSubClassEq(RC)) {
17181720
assert(Subtarget.hasNEON() &&
17191721
"Unexpected register store without NEON");
1720-
Opc = AArch64::ST1Fourv1d, Offset = false;
1722+
Opc = AArch64::ST1Fourv1d;
1723+
Offset = false;
17211724
} else if (AArch64::QQRegClass.hasSubClassEq(RC)) {
17221725
assert(Subtarget.hasNEON() &&
17231726
"Unexpected register store without NEON");
1724-
Opc = AArch64::ST1Twov2d, Offset = false;
1727+
Opc = AArch64::ST1Twov2d;
1728+
Offset = false;
17251729
}
17261730
break;
17271731
case 48:
17281732
if (AArch64::QQQRegClass.hasSubClassEq(RC)) {
17291733
assert(Subtarget.hasNEON() &&
17301734
"Unexpected register store without NEON");
1731-
Opc = AArch64::ST1Threev2d, Offset = false;
1735+
Opc = AArch64::ST1Threev2d;
1736+
Offset = false;
17321737
}
17331738
break;
17341739
case 64:
17351740
if (AArch64::QQQQRegClass.hasSubClassEq(RC)) {
17361741
assert(Subtarget.hasNEON() &&
17371742
"Unexpected register store without NEON");
1738-
Opc = AArch64::ST1Fourv2d, Offset = false;
1743+
Opc = AArch64::ST1Fourv2d;
1744+
Offset = false;
17391745
}
17401746
break;
1747+
default:
1748+
assert (0);
17411749
}
17421750
assert(Opc && "Unknown register class");
17431751

1744-
const MachineInstrBuilder &MI = BuildMI(MBB, MBBI, DL, get(Opc))
1745-
.addReg(SrcReg, getKillRegState(isKill))
1746-
.addFrameIndex(FI);
1747-
1748-
if (Offset)
1749-
MI.addImm(0);
1750-
MI.addMemOperand(MMO);
1752+
if (Offset) {
1753+
BuildMI(MBB, MBBI, DL, get(Opc))
1754+
.addReg(SrcReg, getKillRegState(isKill))
1755+
.addFrameIndex(FI).addImm (0).addMemOperand (MMO);
1756+
} else {
1757+
BuildMI(MBB, MBBI, DL, get(Opc))
1758+
.addReg(SrcReg, getKillRegState(isKill))
1759+
.addFrameIndex(FI).addMemOperand (MMO);
1760+
}
17511761
}
17521762

17531763
void AArch64InstrInfo::loadRegFromStackSlot(
@@ -1839,12 +1849,15 @@ void AArch64InstrInfo::loadRegFromStackSlot(
18391849
}
18401850
assert(Opc && "Unknown register class");
18411851

1842-
const MachineInstrBuilder &MI = BuildMI(MBB, MBBI, DL, get(Opc))
1843-
.addReg(DestReg, getDefRegState(true))
1844-
.addFrameIndex(FI);
1845-
if (Offset)
1846-
MI.addImm(0);
1847-
MI.addMemOperand(MMO);
1852+
if (Offset) {
1853+
BuildMI(MBB, MBBI, DL, get(Opc))
1854+
.addReg(DestReg, getDefRegState(true))
1855+
.addFrameIndex(FI).addImm(0).addMemOperand(MMO);
1856+
} else {
1857+
BuildMI(MBB, MBBI, DL, get(Opc))
1858+
.addReg(DestReg, getDefRegState(true))
1859+
.addFrameIndex(FI).addMemOperand (MMO);
1860+
}
18481861
}
18491862

18501863
void llvm::emitFrameOffset(MachineBasicBlock &MBB,

0 commit comments

Comments
 (0)