Adjust to changes in User class and minor changes in instruction ctors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19894 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-01-29 00:36:19 +00:00
parent ce1df9e9e8
commit cad28bd3a0
2 changed files with 25 additions and 21 deletions

View File

@ -32,17 +32,15 @@
using namespace llvm; using namespace llvm;
namespace { namespace {
/// @brief A class for maintaining the slot number definition
/// @brief A class for maintaining the slot number definition /// as a placeholder for the actual definition for forward constants defs.
/// as a placeholder for the actual definition for forward constants defs. class ConstantPlaceHolder : public ConstantExpr {
class ConstantPlaceHolder : public ConstantExpr { ConstantPlaceHolder(); // DO NOT IMPLEMENT
ConstantPlaceHolder(); // DO NOT IMPLEMENT void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT
void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT public:
public: ConstantPlaceHolder(const Type *Ty)
ConstantPlaceHolder(const Type *Ty) : ConstantExpr(Ty, Instruction::UserOp1, 0, 0) {}
: ConstantExpr(Instruction::UserOp1, Constant::getNullValue(Ty), Ty) {} };
};
} }
// Provide some details on error // Provide some details on error
@ -671,7 +669,7 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
error("Invalid phi node encountered!"); error("Invalid phi node encountered!");
PHINode *PN = new PHINode(InstTy); PHINode *PN = new PHINode(InstTy);
PN->op_reserve(Oprnds.size()); PN->reserveOperandSpace(Oprnds.size());
for (unsigned i = 0, e = Oprnds.size(); i != e; i += 2) for (unsigned i = 0, e = Oprnds.size(); i != e; i += 2)
PN->addIncoming(getValue(iType, Oprnds[i]), getBasicBlock(Oprnds[i+1])); PN->addIncoming(getValue(iType, Oprnds[i]), getBasicBlock(Oprnds[i+1]));
Result = PN; Result = PN;
@ -707,7 +705,8 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
error("Switch statement with odd number of arguments!"); error("Switch statement with odd number of arguments!");
SwitchInst *I = new SwitchInst(getValue(iType, Oprnds[0]), SwitchInst *I = new SwitchInst(getValue(iType, Oprnds[0]),
getBasicBlock(Oprnds[1])); getBasicBlock(Oprnds[1]),
Oprnds.size()/2-1);
for (unsigned i = 2, e = Oprnds.size(); i != e; i += 2) for (unsigned i = 2, e = Oprnds.size(); i != e; i += 2)
I->addCase(cast<Constant>(getValue(iType, Oprnds[i])), I->addCase(cast<Constant>(getValue(iType, Oprnds[i])),
getBasicBlock(Oprnds[i+1])); getBasicBlock(Oprnds[i+1]));

View File

@ -77,18 +77,23 @@ public:
/// constants with global variables at the end of reading the /// constants with global variables at the end of reading the
/// globals section. /// globals section.
/// @brief A list of values as a User of those Values. /// @brief A list of values as a User of those Values.
struct ValueList : public User { class ValueList : public User {
ValueList() : User(Type::VoidTy, Value::ValueListVal) {} std::vector<Use> Uses;
public:
ValueList() : User(Type::VoidTy, Value::ValueListVal, 0, 0) {}
// vector compatibility methods // vector compatibility methods
unsigned size() const { return getNumOperands(); } unsigned size() const { return getNumOperands(); }
void push_back(Value *V) { Operands.push_back(Use(V, this)); } void push_back(Value *V) {
Value *back() const { return Operands.back(); } Uses.push_back(Use(V, this));
void pop_back() { Operands.pop_back(); } OperandList = &Uses[0];
bool empty() const { return Operands.empty(); } ++NumOperands;
// must override this }
Value *back() const { return Uses.back(); }
void pop_back() { Uses.pop_back(); --NumOperands; }
bool empty() const { return NumOperands == 0; }
virtual void print(std::ostream& os) const { virtual void print(std::ostream& os) const {
for ( unsigned i = 0; i < size(); i++ ) { for (unsigned i = 0; i < size(); ++i) {
os << i << " "; os << i << " ";
getOperand(i)->print(os); getOperand(i)->print(os);
os << "\n"; os << "\n";