Convert BinaryOperand and UnaryOperator to only take instruction types of

the appropriate enum


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2001-07-07 20:17:23 +00:00
parent a41f50dea8
commit 9f3d27654a
5 changed files with 21 additions and 11 deletions

View File

@ -55,14 +55,18 @@ public:
// create() - Construct a unary instruction, given the opcode
// and its operand.
//
static UnaryOperator *create(unsigned Op, Value *Source);
static UnaryOperator *create(UnaryOps Op, Value *Source);
UnaryOperator(Value *S, unsigned iType, const string &Name = "")
UnaryOperator(Value *S, UnaryOps iType, const string &Name = "")
: Instruction(S->getType(), iType, Name) {
Operands.reserve(1);
Operands.push_back(Use(S, this));
}
inline UnaryOps getOpcode() const {
return (UnaryOps)Instruction::getOpcode();
}
virtual Instruction *clone() const {
return create(getOpcode(), Operands[0]);
}
@ -82,10 +86,10 @@ public:
// create() - Construct a binary instruction, given the opcode
// and the two operands.
//
static BinaryOperator *create(unsigned Op, Value *S1, Value *S2,
static BinaryOperator *create(BinaryOps Op, Value *S1, Value *S2,
const string &Name = "");
BinaryOperator(unsigned iType, Value *S1, Value *S2,
BinaryOperator(BinaryOps iType, Value *S1, Value *S2,
const string &Name = "")
: Instruction(S1->getType(), iType, Name) {
Operands.reserve(2);
@ -95,6 +99,10 @@ public:
Operands[0]->getType() == Operands[1]->getType());
}
inline BinaryOps getOpcode() const {
return (BinaryOps)Instruction::getOpcode();
}
virtual Instruction *clone() const {
return create(getOpcode(), Operands[0], Operands[1]);
}

View File

@ -18,7 +18,7 @@
class GenericBinaryInst : public BinaryOperator {
public:
GenericBinaryInst(unsigned Opcode, Value *S1, Value *S2,
GenericBinaryInst(BinaryOps Opcode, Value *S1, Value *S2,
const string &Name = "")
: BinaryOperator(Opcode, S1, S2, Name) {
}

View File

@ -96,12 +96,14 @@ bool BytecodeParser::ParseInstruction(const uchar *&Buf, const uchar *EndBuf,
if (Raw.Opcode >= Instruction::FirstUnaryOp &&
Raw.Opcode < Instruction::NumUnaryOps && Raw.NumOperands == 1) {
Res = UnaryOperator::create(Raw.Opcode,getValue(Raw.Ty,Raw.Arg1));
Res = UnaryOperator::create((Instruction::UnaryOps)Raw.Opcode,
getValue(Raw.Ty,Raw.Arg1));
return false;
} else if (Raw.Opcode >= Instruction::FirstBinaryOp &&
Raw.Opcode < Instruction::NumBinaryOps && Raw.NumOperands == 2) {
Res = BinaryOperator::create(Raw.Opcode, getValue(Raw.Ty, Raw.Arg1),
getValue(Raw.Ty, Raw.Arg2));
Res = BinaryOperator::create((Instruction::BinaryOps)Raw.Opcode,
getValue(Raw.Ty, Raw.Arg1),
getValue(Raw.Ty, Raw.Arg2));
return false;
} else if (Raw.Opcode == Instruction::PHINode) {
PHINode *PN = new PHINode(Raw.Ty);

View File

@ -12,7 +12,7 @@
#include <algorithm> // find
// TODO: Move to getUnaryOperator iUnary.cpp when and if it exists!
UnaryOperator *UnaryOperator::create(unsigned Op, Value *Source) {
UnaryOperator *UnaryOperator::create(UnaryOps Op, Value *Source) {
switch (Op) {
default:
cerr << "Don't know how to GetUnaryOperator " << Op << endl;

View File

@ -7,13 +7,13 @@
#include "llvm/iBinary.h"
#include "llvm/Type.h"
BinaryOperator *BinaryOperator::create(unsigned Op, Value *S1, Value *S2,
BinaryOperator *BinaryOperator::create(BinaryOps Op, Value *S1, Value *S2,
const string &Name) {
switch (Op) {
// Binary comparison operators...
case SetLT: case SetGT: case SetLE:
case SetGE: case SetEQ: case SetNE:
return new SetCondInst((BinaryOps)Op, S1, S2, Name);
return new SetCondInst(Op, S1, S2, Name);
default:
return new GenericBinaryInst(Op, S1, S2, Name);