forked from OSchip/llvm-project
[MachineIRBuilder] Add buildBinaryOp helper. NFC
Add a helper for building simple binary ops like add, mul, sub, and. This can be used in the future for quickly adding support for or, xor. llvm-svn: 307139
This commit is contained in:
parent
1745076c59
commit
05e704f453
|
@ -59,6 +59,7 @@ class MachineIRBuilder {
|
|||
}
|
||||
|
||||
void validateTruncExt(unsigned Dst, unsigned Src, bool IsExtend);
|
||||
MachineInstrBuilder buildBinaryOp(unsigned Opcode, unsigned Res, unsigned Op0, unsigned Op1);
|
||||
|
||||
public:
|
||||
/// Getter for the function we currently build.
|
||||
|
|
|
@ -166,19 +166,24 @@ MachineInstrBuilder MachineIRBuilder::buildGlobalValue(unsigned Res,
|
|||
.addGlobalAddress(GV);
|
||||
}
|
||||
|
||||
MachineInstrBuilder MachineIRBuilder::buildAdd(unsigned Res, unsigned Op0,
|
||||
MachineInstrBuilder MachineIRBuilder::buildBinaryOp(unsigned Opcode, unsigned Res, unsigned Op0,
|
||||
unsigned Op1) {
|
||||
assert((MRI->getType(Res).isScalar() || MRI->getType(Res).isVector()) &&
|
||||
"invalid operand type");
|
||||
assert(MRI->getType(Res) == MRI->getType(Op0) &&
|
||||
MRI->getType(Res) == MRI->getType(Op1) && "type mismatch");
|
||||
|
||||
return buildInstr(TargetOpcode::G_ADD)
|
||||
return buildInstr(Opcode)
|
||||
.addDef(Res)
|
||||
.addUse(Op0)
|
||||
.addUse(Op1);
|
||||
}
|
||||
|
||||
MachineInstrBuilder MachineIRBuilder::buildAdd(unsigned Res, unsigned Op0,
|
||||
unsigned Op1) {
|
||||
return buildBinaryOp(TargetOpcode::G_ADD, Res, Op0, Op1);
|
||||
}
|
||||
|
||||
MachineInstrBuilder MachineIRBuilder::buildGEP(unsigned Res, unsigned Op0,
|
||||
unsigned Op1) {
|
||||
assert(MRI->getType(Res).isPointer() &&
|
||||
|
@ -222,43 +227,20 @@ MachineInstrBuilder MachineIRBuilder::buildPtrMask(unsigned Res, unsigned Op0,
|
|||
|
||||
MachineInstrBuilder MachineIRBuilder::buildSub(unsigned Res, unsigned Op0,
|
||||
unsigned Op1) {
|
||||
assert((MRI->getType(Res).isScalar() || MRI->getType(Res).isVector()) &&
|
||||
"invalid operand type");
|
||||
assert(MRI->getType(Res) == MRI->getType(Op0) &&
|
||||
MRI->getType(Res) == MRI->getType(Op1) && "type mismatch");
|
||||
|
||||
return buildInstr(TargetOpcode::G_SUB)
|
||||
.addDef(Res)
|
||||
.addUse(Op0)
|
||||
.addUse(Op1);
|
||||
return buildBinaryOp(TargetOpcode::G_SUB, Res, Op0, Op1);
|
||||
}
|
||||
|
||||
MachineInstrBuilder MachineIRBuilder::buildMul(unsigned Res, unsigned Op0,
|
||||
unsigned Op1) {
|
||||
assert((MRI->getType(Res).isScalar() || MRI->getType(Res).isVector()) &&
|
||||
"invalid operand type");
|
||||
assert(MRI->getType(Res) == MRI->getType(Op0) &&
|
||||
MRI->getType(Res) == MRI->getType(Op1) && "type mismatch");
|
||||
|
||||
return buildInstr(TargetOpcode::G_MUL)
|
||||
.addDef(Res)
|
||||
.addUse(Op0)
|
||||
.addUse(Op1);
|
||||
return buildBinaryOp(TargetOpcode::G_MUL, Res, Op0, Op1);
|
||||
}
|
||||
|
||||
MachineInstrBuilder MachineIRBuilder::buildAnd(unsigned Res, unsigned Op0,
|
||||
unsigned Op1) {
|
||||
assert((MRI->getType(Res).isScalar() || MRI->getType(Res).isVector()) &&
|
||||
"invalid operand type");
|
||||
assert(MRI->getType(Res) == MRI->getType(Op0) &&
|
||||
MRI->getType(Res) == MRI->getType(Op1) && "type mismatch");
|
||||
|
||||
return buildInstr(TargetOpcode::G_AND)
|
||||
.addDef(Res)
|
||||
.addUse(Op0)
|
||||
.addUse(Op1);
|
||||
return buildBinaryOp(TargetOpcode::G_AND, Res, Op0, Op1);
|
||||
}
|
||||
|
||||
|
||||
MachineInstrBuilder MachineIRBuilder::buildBr(MachineBasicBlock &Dest) {
|
||||
return buildInstr(TargetOpcode::G_BR).addMBB(&Dest);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue