mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 05:29:23 +00:00
Fix a rather obscure crash caused by ARM fast-isel generating code which redefines a register.
rdar://problem/9338332 . git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130454 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5367b23f76
commit
2f7fcd7198
@ -822,26 +822,9 @@ void ARMFastISel::ARMSimplifyAddress(Address &Addr, EVT VT) {
|
|||||||
// Since the offset is too large for the load/store instruction
|
// Since the offset is too large for the load/store instruction
|
||||||
// get the reg+offset into a register.
|
// get the reg+offset into a register.
|
||||||
if (needsLowering) {
|
if (needsLowering) {
|
||||||
ARMCC::CondCodes Pred = ARMCC::AL;
|
Addr.Base.Reg = FastEmit_ri_(MVT::i32, ISD::ADD, Addr.Base.Reg,
|
||||||
unsigned PredReg = 0;
|
/*Op0IsKill*/false, Addr.Offset, MVT::i32);
|
||||||
|
|
||||||
TargetRegisterClass *RC = isThumb ? ARM::tGPRRegisterClass :
|
|
||||||
ARM::GPRRegisterClass;
|
|
||||||
unsigned BaseReg = createResultReg(RC);
|
|
||||||
|
|
||||||
if (!isThumb)
|
|
||||||
emitARMRegPlusImmediate(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
|
||||||
BaseReg, Addr.Base.Reg, Addr.Offset,
|
|
||||||
Pred, PredReg,
|
|
||||||
static_cast<const ARMBaseInstrInfo&>(TII));
|
|
||||||
else {
|
|
||||||
assert(AFI->isThumb2Function());
|
|
||||||
emitT2RegPlusImmediate(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
|
||||||
BaseReg, Addr.Base.Reg, Addr.Offset, Pred, PredReg,
|
|
||||||
static_cast<const ARMBaseInstrInfo&>(TII));
|
|
||||||
}
|
|
||||||
Addr.Offset = 0;
|
Addr.Offset = 0;
|
||||||
Addr.Base.Reg = BaseReg;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
test/CodeGen/ARM/fast-isel-redefinition.ll
Normal file
11
test/CodeGen/ARM/fast-isel-redefinition.ll
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
; RUN: llc -O0 -regalloc=linearscan | grep "ldr r0"
|
||||||
|
; This isn't exactly a useful set of command-line options, but check that it
|
||||||
|
; doesn't crash. (It was crashing because a register was getting redefined.)
|
||||||
|
|
||||||
|
target triple = "thumbv7-apple-macosx10.6.7"
|
||||||
|
|
||||||
|
define i32 @f(i32* %x) nounwind ssp {
|
||||||
|
%y = getelementptr inbounds i32* %x, i32 5000
|
||||||
|
%tmp103 = load i32* %y, align 4
|
||||||
|
ret i32 %tmp103
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user