mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
ARM: FastISel verifier error cleanup.
Constant pool and global value reference instructions need more restricted register classes than plain GPR. rdar://12594152 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189270 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bb4066123d
commit
e3dad19e0d
@ -653,6 +653,7 @@ unsigned ARMFastISel::ARMMaterializeInt(const Constant *C, MVT VT) {
|
||||
.addConstantPoolIndex(Idx));
|
||||
else
|
||||
// The extra immediate is for addrmode2.
|
||||
DestReg = constrainOperandRegClass(TII.get(ARM::LDRcp), DestReg, 0);
|
||||
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
||||
TII.get(ARM::LDRcp), DestReg)
|
||||
.addConstantPoolIndex(Idx)
|
||||
@ -728,6 +729,7 @@ unsigned ARMFastISel::ARMMaterializeGV(const GlobalValue *GV, MVT VT) {
|
||||
AddOptionalDefs(MIB);
|
||||
} else {
|
||||
// The extra immediate is for addrmode2.
|
||||
DestReg = constrainOperandRegClass(TII.get(ARM::LDRcp), DestReg, 0);
|
||||
MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(ARM::LDRcp),
|
||||
DestReg)
|
||||
.addConstantPoolIndex(Idx)
|
||||
@ -3027,12 +3029,14 @@ unsigned ARMFastISel::ARMLowerPICELF(const GlobalValue *GV,
|
||||
unsigned DestReg1 = createResultReg(TLI.getRegClassFor(VT));
|
||||
// Load value.
|
||||
if (isThumb2) {
|
||||
DestReg1 = constrainOperandRegClass(TII.get(ARM::t2LDRpci), DestReg1, 0);
|
||||
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
||||
TII.get(ARM::t2LDRpci), DestReg1)
|
||||
.addConstantPoolIndex(Idx));
|
||||
Opc = UseGOTOFF ? ARM::t2ADDrr : ARM::t2LDRs;
|
||||
} else {
|
||||
// The extra immediate is for addrmode2.
|
||||
DestReg1 = constrainOperandRegClass(TII.get(ARM::LDRcp), DestReg1, 0);
|
||||
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt,
|
||||
DL, TII.get(ARM::LDRcp), DestReg1)
|
||||
.addConstantPoolIndex(Idx).addImm(0));
|
||||
@ -3046,6 +3050,9 @@ unsigned ARMFastISel::ARMLowerPICELF(const GlobalValue *GV,
|
||||
}
|
||||
|
||||
unsigned DestReg2 = createResultReg(TLI.getRegClassFor(VT));
|
||||
DestReg2 = constrainOperandRegClass(TII.get(Opc), DestReg2, 0);
|
||||
DestReg1 = constrainOperandRegClass(TII.get(Opc), DestReg1, 1);
|
||||
GlobalBaseReg = constrainOperandRegClass(TII.get(Opc), GlobalBaseReg, 2);
|
||||
MachineInstrBuilder MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt,
|
||||
DL, TII.get(Opc), DestReg2)
|
||||
.addReg(DestReg1)
|
||||
|
@ -2,7 +2,7 @@
|
||||
; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -relocation-model=pic -mtriple=arm-apple-ios | FileCheck %s --check-prefix=ARM
|
||||
; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -relocation-model=pic -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=ARMv7
|
||||
; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -relocation-model=pic -mtriple=thumbv7-none-linux-gnueabi | FileCheck %s --check-prefix=THUMB-ELF
|
||||
; RUN: llc < %s -O0 -fast-isel-abort -relocation-model=pic -mtriple=armv7-none-linux-gnueabi | FileCheck %s --check-prefix=ARMv7-ELF
|
||||
; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -relocation-model=pic -mtriple=armv7-none-linux-gnueabi | FileCheck %s --check-prefix=ARMv7-ELF
|
||||
|
||||
@g = global i32 0, align 4
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user