summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2016-08-19 20:09:07 +0000
committerTim Northover <tnorthover@apple.com>2016-08-19 20:09:07 +0000
commit5a28c3642fec0d76a81089dcf5b57412145a7f83 (patch)
treecf525988f68c561220be30c406dac8ddf5c657d4 /llvm/lib/CodeGen
parentb604622bbaa7dae77e60db7afe75a6cef55ea5c4 (diff)
downloadbcm5719-llvm-5a28c3642fec0d76a81089dcf5b57412145a7f83.tar.gz
bcm5719-llvm-5a28c3642fec0d76a81089dcf5b57412145a7f83.zip
GlobalISel: support translating select instructions.
llvm-svn: 279309
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp7
-rw-r--r--llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp10
2 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 3c1807fbd2e..58235c2b823 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -236,6 +236,13 @@ bool IRTranslator::translateInsertValue(const User &U) {
return true;
}
+bool IRTranslator::translateSelect(const User &U) {
+ MIRBuilder.buildSelect(
+ LLT{*U.getType()}, getOrCreateVReg(U), getOrCreateVReg(*U.getOperand(0)),
+ getOrCreateVReg(*U.getOperand(1)), getOrCreateVReg(*U.getOperand(2)));
+ return true;
+}
+
bool IRTranslator::translateBitCast(const User &U) {
if (LLT{*U.getOperand(0)->getType()} == LLT{*U.getType()}) {
unsigned &Reg = ValToVReg[&U];
diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
index bd66a28bdc2..0d2fae659e8 100644
--- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
@@ -216,3 +216,13 @@ MachineInstrBuilder MachineIRBuilder::buildICmp(ArrayRef<LLT> Tys,
.addUse(Op0)
.addUse(Op1);
}
+
+MachineInstrBuilder MachineIRBuilder::buildSelect(LLT Ty, unsigned Res,
+ unsigned Tst,
+ unsigned Op0, unsigned Op1) {
+ return buildInstr(TargetOpcode::G_SELECT, {Ty, LLT::scalar(1)})
+ .addDef(Res)
+ .addUse(Tst)
+ .addUse(Op0)
+ .addUse(Op1);
+}
OpenPOWER on IntegriCloud