summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp')
-rw-r--r--llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
index 220965ce660..2b91584c75d 100644
--- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
@@ -110,3 +110,35 @@ MachineInstr *MachineIRBuilder::buildFrameIndex(LLT Ty, unsigned Res, int Idx) {
MIB.addImm(Idx);
return NewMI;
}
+
+MachineInstr *MachineIRBuilder::buildAdd(LLT Ty, unsigned Res, unsigned Op0,
+ unsigned Op1) {
+ return buildInstr(TargetOpcode::G_ADD, Ty, Res, Op0, Op1);
+}
+
+MachineInstr *MachineIRBuilder::buildExtract(LLT Ty, ArrayRef<unsigned> Results,
+ unsigned Src,
+ ArrayRef<unsigned> Indexes) {
+ assert(Results.size() == Indexes.size() && "inconsistent number of regs");
+
+ MachineInstr *NewMI = buildInstr(TargetOpcode::G_EXTRACT, Ty);
+ auto MIB = MachineInstrBuilder(getMF(), NewMI);
+ for (auto Res : Results)
+ MIB.addReg(Res, RegState::Define);
+
+ MIB.addReg(Src);
+
+ for (auto Idx : Indexes)
+ MIB.addImm(Idx);
+ return NewMI;
+}
+
+MachineInstr *MachineIRBuilder::buildSequence(LLT Ty, unsigned Res,
+ ArrayRef<unsigned> Ops) {
+ MachineInstr *NewMI = buildInstr(TargetOpcode::G_SEQUENCE, Ty);
+ auto MIB = MachineInstrBuilder(getMF(), NewMI);
+ MIB.addReg(Res, RegState::Define);
+ for (auto Op : Ops)
+ MIB.addReg(Op);
+ return NewMI;
+}
OpenPOWER on IntegriCloud