[llvm] r360321 - [ARM GlobalISel] Map DBG_VALUE for types != s32
Diana Picus via llvm-commits
llvm-commits at lists.llvm.org
Thu May 9 02:49:37 PDT 2019
Author: rovka
Date: Thu May 9 02:49:36 2019
New Revision: 360321
URL: http://llvm.org/viewvc/llvm-project?rev=360321&view=rev
Log:
[ARM GlobalISel] Map DBG_VALUE for types != s32
...and make sure we fail elegantly for unsupported values.
s64 goes into DPR, anything <= 32 into GPR.
Modified:
llvm/trunk/lib/Target/ARM/ARMRegisterBankInfo.cpp
llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir
Modified: llvm/trunk/lib/Target/ARM/ARMRegisterBankInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMRegisterBankInfo.cpp?rev=360321&r1=360320&r2=360321&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMRegisterBankInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMRegisterBankInfo.cpp Thu May 9 02:49:36 2019
@@ -433,8 +433,14 @@ ARMRegisterBankInfo::getInstrMapping(con
break;
case DBG_VALUE: {
SmallVector<const ValueMapping *, 4> OperandBanks(NumOperands);
- if (MI.getOperand(0).isReg() && MI.getOperand(0).getReg())
- OperandBanks[0] = &ARM::ValueMappings[ARM::GPR3OpsIdx];
+ const MachineOperand &MaybeReg = MI.getOperand(0);
+ if (MaybeReg.isReg() && MaybeReg.getReg()) {
+ unsigned Size = MRI.getType(MaybeReg.getReg()).getSizeInBits();
+ if (Size > 32 && Size != 64)
+ return getInvalidInstructionMapping();
+ OperandBanks[0] = Size == 64 ? &ARM::ValueMappings[ARM::DPR3OpsIdx]
+ : &ARM::ValueMappings[ARM::GPR3OpsIdx];
+ }
OperandsMapping = getOperandsMapping(OperandBanks);
break;
}
Modified: llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir?rev=360321&r1=360320&r2=360321&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir (original)
+++ llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir Thu May 9 02:49:36 2019
@@ -1541,36 +1541,52 @@ registers:
- { id: 1, class: _ }
- { id: 2, class: _ }
- { id: 3, class: _ }
+ - { id: 4, class: _ }
+ - { id: 5, class: _ }
body: |
bb.0:
- liveins: $r0, $s1
+ liveins: $r0, $s1, $d2
%0(s32) = COPY $r0
- %1(s32) = COPY $s1
- ; {{%[0-9]+}}:gpr = G_ADD
- %2(s32) = G_ADD %0, %0
+ ; CHECK: {{%[0-9]+}}:gprb(s32) = G_ADD
+ %1(s32) = G_ADD %0, %0
- ; DBG_VALUE {{%[0-9]+}}:gpr, $noreg, !7, !DIExpression(), debug-location !9
- DBG_VALUE %2(s32), $noreg, !7, !DIExpression(), debug-location !9
+ ; CHECK: DBG_VALUE {{%[0-9]+}}(s32), $noreg
+ DBG_VALUE %1(s32), $noreg, !7, !DIExpression(), debug-location !9
- ; {{%[0-9]+}}:fpr = G_FADD
- %3(s32) = G_FADD %1, %1
+ $r0 = COPY %1(s32)
- ; DBG_VALUE {{%[0-9]+}}:fpr, $noreg, !7, !DIExpression(), debug-location !9
+ %2(s32) = COPY $s1
+
+ ; CHECK: {{%[0-9]+}}:fprb(s32) = G_FADD
+ %3(s32) = G_FADD %2, %2
+
+ ; CHECK: DBG_VALUE {{%[0-9]+}}(s32), $noreg
DBG_VALUE %3(s32), $noreg, !7, !DIExpression(), debug-location !9
- ; DBG_VALUE i32 42, 0, !7, !DIExpression(), debug-location !9
+ $s1 = COPY %3(s32)
+
+ %4(s64) = COPY $d2
+
+ ; CHECK: {{%[0-9]+}}:fprb(s64) = G_FADD
+ %5(s64) = G_FADD %4, %4
+
+ ; CHECK: DBG_VALUE {{%[0-9]+}}(s64), $noreg
+ DBG_VALUE %5(s64), $noreg, !7, !DIExpression(), debug-location !9
+
+ $d2 = COPY %5(s64)
+
+ ; CHECK: DBG_VALUE i32 42, 0
DBG_VALUE i32 42, 0, !7, !DIExpression(), debug-location !9
- ; DBG_VALUE float 1.000000e+00, 0, !7, !DIExpression(), debug-location !9
+ ; CHECK: DBG_VALUE float 1.000000e+00, 0
DBG_VALUE float 1.000000e+00, 0, !7, !DIExpression(), debug-location !9
- ; DBG_VALUE $noreg, 0, !7, !DIExpression(), debug-location !9
+ ; CHECK: DBG_VALUE $noreg, 0
DBG_VALUE $noreg, 0, !7, !DIExpression(), debug-location !9
- $r0 = COPY %2(s32)
- $s1 = COPY %3(s32)
- BX_RET 14, $noreg, implicit $r0, implicit $s1
+ $d2 = COPY %5(s64)
+ BX_RET 14, $noreg, implicit $r0, implicit $s1, implicit $d2
...
More information about the llvm-commits
mailing list