diff options
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | 10 |
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); +} |

