//===- 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); }