mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-05 11:19:41 +00:00
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:
parent
38f5d46aff
commit
e8f1e44fd7
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
//**************************************************************************/
|
||||
|
Loading…
Reference in New Issue
Block a user