diff options
author | Diana Picus <diana.picus@linaro.org> | 2019-02-13 11:25:32 +0000 |
---|---|---|
committer | Diana Picus <diana.picus@linaro.org> | 2019-02-13 11:25:32 +0000 |
commit | aa4118a8738eec74e953c14db14fccba3471e6c5 (patch) | |
tree | 4792baf952df0e22accd4e3e4b5ac34a59130c28 /llvm/lib/Target/ARM/ARMInstructionSelector.cpp | |
parent | 318f990aee799417f93efefa052aae02021dd068 (diff) | |
download | bcm5719-llvm-aa4118a8738eec74e953c14db14fccba3471e6c5.tar.gz bcm5719-llvm-aa4118a8738eec74e953c14db14fccba3471e6c5.zip |
[ARM GlobalISel] Support G_SELECT for Thumb2
Same as arm mode, but slightly different opcodes.
llvm-svn: 353938
Diffstat (limited to 'llvm/lib/Target/ARM/ARMInstructionSelector.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMInstructionSelector.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstructionSelector.cpp b/llvm/lib/Target/ARM/ARMInstructionSelector.cpp index 89735c16308..262300ebb62 100644 --- a/llvm/lib/Target/ARM/ARMInstructionSelector.cpp +++ b/llvm/lib/Target/ARM/ARMInstructionSelector.cpp @@ -97,10 +97,15 @@ private: unsigned STORE8; unsigned LOAD8; + // Used for G_ICMP unsigned CMPrr; unsigned MOVi; unsigned MOVCCi; + // Used for G_SELECT + unsigned CMPri; + unsigned MOVCCr; + OpcodeCache(const ARMSubtarget &STI); } const Opcodes; @@ -292,6 +297,9 @@ ARMInstructionSelector::OpcodeCache::OpcodeCache(const ARMSubtarget &STI) { STORE_OPCODE(CMPrr, CMPrr); STORE_OPCODE(MOVi, MOVi); STORE_OPCODE(MOVCCi, MOVCCi); + + STORE_OPCODE(CMPri, CMPri); + STORE_OPCODE(MOVCCr, MOVCCr); #undef MAP_OPCODE } @@ -696,7 +704,7 @@ bool ARMInstructionSelector::selectSelect(MachineInstrBuilder &MIB, auto CondReg = MIB->getOperand(1).getReg(); assert(validReg(MRI, CondReg, 1, ARM::GPRRegBankID) && "Unsupported types for select operation"); - auto CmpI = BuildMI(MBB, InsertBefore, DbgLoc, TII.get(ARM::CMPri)) + auto CmpI = BuildMI(MBB, InsertBefore, DbgLoc, TII.get(Opcodes.CMPri)) .addUse(CondReg) .addImm(0) .add(predOps(ARMCC::AL)); @@ -711,7 +719,7 @@ bool ARMInstructionSelector::selectSelect(MachineInstrBuilder &MIB, assert(validOpRegPair(MRI, ResReg, TrueReg, 32, ARM::GPRRegBankID) && validOpRegPair(MRI, TrueReg, FalseReg, 32, ARM::GPRRegBankID) && "Unsupported types for select operation"); - auto Mov1I = BuildMI(MBB, InsertBefore, DbgLoc, TII.get(ARM::MOVCCr)) + auto Mov1I = BuildMI(MBB, InsertBefore, DbgLoc, TII.get(Opcodes.MOVCCr)) .addDef(ResReg) .addUse(TrueReg) .addUse(FalseReg) |