| //===- SparcV9TmpInstr.cpp - SparcV9 Intermediate Value class -------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by the LLVM research group and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Methods of class for temporary intermediate values used within the current |
| // SparcV9 backend. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "SparcV9TmpInstr.h" |
| #include "llvm/Type.h" |
| #include "llvm/Support/LeakDetector.h" |
| using namespace llvm; |
| |
| TmpInstruction::TmpInstruction(const TmpInstruction &TI) |
| : Instruction(TI.getType(), TI.getOpcode(), Ops, TI.getNumOperands()) { |
| if (TI.getNumOperands()) { |
| Ops[0].init(TI.Ops[0], this); |
| if (TI.getNumOperands() == 2) |
| Ops[1].init(TI.Ops[1], this); |
| else |
| assert(0 && "Bad # operands to TmpInstruction!"); |
| } |
| } |
| |
| TmpInstruction::TmpInstruction(Value *s1, Value *s2, const std::string &name) |
| : Instruction(s1->getType(), Instruction::UserOp1, Ops, 1+(s2 != 0), name) { |
| Ops[0].init(s1, this); // s1 must be non-null |
| if (s2) |
| Ops[1].init(s2, this); |
| |
| // TmpInstructions should not be garbage checked. |
| LeakDetector::removeGarbageObject(this); |
| } |
| |
| TmpInstruction::TmpInstruction(MachineCodeForInstruction& mcfi, |
| Value *s1, Value *s2, const std::string &name) |
| : Instruction(s1->getType(), Instruction::UserOp1, Ops, 1+(s2 != 0), name) { |
| mcfi.addTemp(this); |
| |
| Ops[0].init(s1, this); // s1 must be non-null |
| if (s2) |
| Ops[1].init(s2, this); |
| |
| // TmpInstructions should not be garbage checked. |
| LeakDetector::removeGarbageObject(this); |
| } |
| |
| // Constructor that requires the type of the temporary to be specified. |
| // Both S1 and S2 may be NULL. |
| TmpInstruction::TmpInstruction(MachineCodeForInstruction& mcfi, |
| const Type *Ty, Value *s1, Value* s2, |
| const std::string &name) |
| : Instruction(Ty, Instruction::UserOp1, Ops, (s1 != 0)+(s2 != 0), name) { |
| mcfi.addTemp(this); |
| |
| assert((s1 != 0 || s2 == 0) && |
| "s2 cannot be non-null if s1 is non-null!"); |
| if (s1) { |
| Ops[0].init(s1, this); |
| if (s2) |
| Ops[1].init(s2, this); |
| } |
| |
| // TmpInstructions should not be garbage checked. |
| LeakDetector::removeGarbageObject(this); |
| } |