summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMInstructionSelector.cpp
diff options
context:
space:
mode:
authorDiana Picus <diana.picus@linaro.org>2019-02-13 11:25:32 +0000
committerDiana Picus <diana.picus@linaro.org>2019-02-13 11:25:32 +0000
commitaa4118a8738eec74e953c14db14fccba3471e6c5 (patch)
tree4792baf952df0e22accd4e3e4b5ac34a59130c28 /llvm/lib/Target/ARM/ARMInstructionSelector.cpp
parent318f990aee799417f93efefa052aae02021dd068 (diff)
downloadbcm5719-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.cpp12
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)
OpenPOWER on IntegriCloud