aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/InstrSelection.h12
-rw-r--r--lib/CodeGen/InstrSelection/InstrSelection.cpp16
-rw-r--r--lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp3
-rw-r--r--lib/Target/SparcV9/InstrSelection/InstrSelection.cpp16
-rw-r--r--lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp3
5 files changed, 35 insertions, 15 deletions
diff --git a/include/llvm/CodeGen/InstrSelection.h b/include/llvm/CodeGen/InstrSelection.h
index 256a1807f7..c1ed86ed43 100644
--- a/include/llvm/CodeGen/InstrSelection.h
+++ b/include/llvm/CodeGen/InstrSelection.h
@@ -13,6 +13,7 @@ class InstrForest;
class MachineInstr;
class InstructionNode;
class TargetMachine;
+class MachineCodeForInstruction;
class Pass;
//===--------------------- Required Functions ---------------------------------
@@ -68,14 +69,19 @@ class TmpInstruction : public Instruction {
public:
// Constructor that uses the type of S1 as the type of the temporary.
// s1 must be a valid value. s2 may be NULL.
- TmpInstruction(Value *s1, Value *s2 = 0, const std::string &name = "");
+ TmpInstruction(MachineCodeForInstruction& mcfi,
+ Value *s1, Value *s2 = 0, const std::string &name = "");
// Constructor that requires the type of the temporary to be specified.
// Both S1 and S2 may be NULL.
- TmpInstruction(const Type *Ty, Value *s1 = 0, Value* s2 = 0,
+ TmpInstruction(MachineCodeForInstruction& mcfi,
+ const Type *Ty, Value *s1 = 0, Value* s2 = 0,
const std::string &name = "");
- virtual Instruction *clone() const { return new TmpInstruction(*this); }
+ virtual Instruction *clone() const {
+ assert(0 && "Cannot clone TmpInstructions!");
+ return 0;
+ }
virtual const char *getOpcodeName() const {
return "TempValueForMachineInstr";
}
diff --git a/lib/CodeGen/InstrSelection/InstrSelection.cpp b/lib/CodeGen/InstrSelection/InstrSelection.cpp
index 5e0fb8ec72..e4dd2e9dac 100644
--- a/lib/CodeGen/InstrSelection/InstrSelection.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelection.cpp
@@ -78,8 +78,12 @@ namespace {
static RegisterLLC<InstructionSelection>
X("instselect", "Instruction Selection", createInstructionSelectionPass);
-TmpInstruction::TmpInstruction(Value *s1, Value *s2, const std::string &name)
- : Instruction(s1->getType(), Instruction::UserOp1, name) {
+TmpInstruction::TmpInstruction(MachineCodeForInstruction& mcfi,
+ Value *s1, Value *s2, const std::string &name)
+ : Instruction(s1->getType(), Instruction::UserOp1, name)
+{
+ mcfi.addTemp(this);
+
Operands.push_back(Use(s1, this)); // s1 must be nonnull
if (s2) {
Operands.push_back(Use(s2, this));
@@ -91,9 +95,13 @@ TmpInstruction::TmpInstruction(Value *s1, Value *s2, const std::string &name)
// Constructor that requires the type of the temporary to be specified.
// Both S1 and S2 may be NULL.(
-TmpInstruction::TmpInstruction(const Type *Ty, Value *s1, Value* s2,
+TmpInstruction::TmpInstruction(MachineCodeForInstruction& mcfi,
+ const Type *Ty, Value *s1, Value* s2,
const std::string &name)
- : Instruction(Ty, Instruction::UserOp1, name) {
+ : Instruction(Ty, Instruction::UserOp1, name)
+{
+ mcfi.addTemp(this);
+
if (s1) { Operands.push_back(Use(s1, this)); }
if (s2) { Operands.push_back(Use(s2, this)); }
diff --git a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
index a5a3662e93..268fb3d877 100644
--- a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
@@ -33,9 +33,8 @@ InsertCodeToLoadConstant(Function *F,
TargetMachine& target)
{
// Create a tmp virtual register to hold the constant.
- TmpInstruction* tmpReg = new TmpInstruction(opValue);
MachineCodeForInstruction &mcfi = MachineCodeForInstruction::get(vmInstr);
- mcfi.addTemp(tmpReg);
+ TmpInstruction* tmpReg = new TmpInstruction(mcfi, opValue);
target.getInstrInfo().CreateCodeToLoadConst(target, F, opValue, tmpReg,
loadConstVec, mcfi);
diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
index 5e0fb8ec72..e4dd2e9dac 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
@@ -78,8 +78,12 @@ namespace {
static RegisterLLC<InstructionSelection>
X("instselect", "Instruction Selection", createInstructionSelectionPass);
-TmpInstruction::TmpInstruction(Value *s1, Value *s2, const std::string &name)
- : Instruction(s1->getType(), Instruction::UserOp1, name) {
+TmpInstruction::TmpInstruction(MachineCodeForInstruction& mcfi,
+ Value *s1, Value *s2, const std::string &name)
+ : Instruction(s1->getType(), Instruction::UserOp1, name)
+{
+ mcfi.addTemp(this);
+
Operands.push_back(Use(s1, this)); // s1 must be nonnull
if (s2) {
Operands.push_back(Use(s2, this));
@@ -91,9 +95,13 @@ TmpInstruction::TmpInstruction(Value *s1, Value *s2, const std::string &name)
// Constructor that requires the type of the temporary to be specified.
// Both S1 and S2 may be NULL.(
-TmpInstruction::TmpInstruction(const Type *Ty, Value *s1, Value* s2,
+TmpInstruction::TmpInstruction(MachineCodeForInstruction& mcfi,
+ const Type *Ty, Value *s1, Value* s2,
const std::string &name)
- : Instruction(Ty, Instruction::UserOp1, name) {
+ : Instruction(Ty, Instruction::UserOp1, name)
+{
+ mcfi.addTemp(this);
+
if (s1) { Operands.push_back(Use(s1, this)); }
if (s2) { Operands.push_back(Use(s2, this)); }
diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
index a5a3662e93..268fb3d877 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
@@ -33,9 +33,8 @@ InsertCodeToLoadConstant(Function *F,
TargetMachine& target)
{
// Create a tmp virtual register to hold the constant.
- TmpInstruction* tmpReg = new TmpInstruction(opValue);
MachineCodeForInstruction &mcfi = MachineCodeForInstruction::get(vmInstr);
- mcfi.addTemp(tmpReg);
+ TmpInstruction* tmpReg = new TmpInstruction(mcfi, opValue);
target.getInstrInfo().CreateCodeToLoadConst(target, F, opValue, tmpReg,
loadConstVec, mcfi);