Added a second constructor for and improved class TmpInstruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1188 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Vikram S. Adve 2001-11-08 04:50:33 +00:00
parent 38f5d46aff
commit e8f1e44fd7

View File

@ -75,27 +75,46 @@ bool SelectInstructionsForMethod (Method* method,
//---------------------------------------------------------------------------
class TmpInstruction : public Instruction {
TmpInstruction (const TmpInstruction &CI) : Instruction(CI.getType(), CI.getOpcode()) {
TmpInstruction (const TmpInstruction &ci)
: Instruction(ci.getType(), ci.getOpcode())
{
Operands.reserve(2);
Operands.push_back(Use(Operands[0], this));
Operands.push_back(Use(Operands[1], this));
}
public:
TmpInstruction(OtherOps Opcode, Value *S1, Value* S2, const string &Name = "")
: Instruction(S1->getType(), Opcode, Name)
// Constructor that uses the type of S1 as the type of the temporary.
// s1 must be a valid value. s2 may be NULL.
TmpInstruction(OtherOps opcode, Value *s1, Value* s2, const string &name="")
: Instruction(s1->getType(), opcode, name)
{
assert(Opcode == TMP_INSTRUCTION_OPCODE &&
"Tmp instruction opcode invalid!");
Operands.reserve(S2? 2 : 1);
Operands.push_back(Use(S1, this));
if (S2)
Operands.push_back(Use(S2, this));
assert(s1 != NULL && "Use different constructor if both operands are 0");
Initialize(opcode, s1, s2);
}
// Constructor that allows the type of the temporary to be specified.
// Both S1 and S2 may be NULL.
TmpInstruction(OtherOps opcode, const Type* tmpType,
Value *s1, Value* s2, const string &name = "")
: Instruction(tmpType, opcode, name)
{
Initialize(opcode, s1, s2);
}
virtual Instruction *clone() const { return new TmpInstruction(*this); }
virtual const char *getOpcodeName() const {
return "userOp1";
}
private:
void Initialize(OtherOps opcode, Value *s1, Value* s2) {
assert(opcode==TMP_INSTRUCTION_OPCODE && "Tmp instruction opcode invalid");
Operands.reserve(s1 && s2? 2 : ((s1 || s2)? 1 : 0));
if (s1)
Operands.push_back(Use(s1, this));
if (s2)
Operands.push_back(Use(s2, this));
}
};
//**************************************************************************/