From 477c2ec3e01ddb67c3c079156f2ee2e1858bec42 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 8 Jun 2001 21:30:13 +0000 Subject: [PATCH] Moved getBinaryOperator to the BinaryOperator class and the getUnaryOperator to the UnaryOperator class (from the Instruction class). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/InstrTypes.h | 16 ++++++++++++++-- include/llvm/Instruction.h | 5 +---- lib/AsmParser/llvmAsmParser.cpp | 4 ++-- lib/AsmParser/llvmAsmParser.y | 4 ++-- lib/Bytecode/Reader/InstructionReader.cpp | 7 ++++--- lib/VMCore/Instruction.cpp | 5 +++-- 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h index be6ea269740..1bd7a246d0a 100644 --- a/include/llvm/InstrTypes.h +++ b/include/llvm/InstrTypes.h @@ -56,13 +56,19 @@ public: class UnaryOperator : public Instruction { Use Source; public: + + // getUnaryOperator() - Construct a unary instruction, given the opcode + // and its operand. + // + static UnaryOperator *getUnaryOperator(unsigned Op, Value *Source); + UnaryOperator(Value *S, unsigned iType, const string &Name = "") : Instruction(S->getType(), iType, Name), Source(S, this) { } inline ~UnaryOperator() { dropAllReferences(); } virtual Instruction *clone() const { - return Instruction::getUnaryOperator(getInstType(), Source); + return getUnaryOperator(getInstType(), Source); } virtual void dropAllReferences() { @@ -92,6 +98,12 @@ public: class BinaryOperator : public Instruction { Use Source1, Source2; public: + + // getBinaryOperator() - Construct a binary instruction, given the opcode + // and the two operands. + // + static BinaryOperator *getBinaryOperator(unsigned Op, Value *S1, Value *S2); + BinaryOperator(unsigned iType, Value *S1, Value *S2, const string &Name = "") : Instruction(S1->getType(), iType, Name), Source1(S1, this), @@ -101,7 +113,7 @@ public: inline ~BinaryOperator() { dropAllReferences(); } virtual Instruction *clone() const { - return Instruction::getBinaryOperator(getInstType(), Source1, Source2); + return getBinaryOperator(getInstType(), Source1, Source2); } virtual void dropAllReferences() { diff --git a/include/llvm/Instruction.h b/include/llvm/Instruction.h index 415c307e730..0ac19216823 100644 --- a/include/llvm/Instruction.h +++ b/include/llvm/Instruction.h @@ -85,9 +85,6 @@ public: return iType >= FirstBinaryOp && iType < NumBinaryOps; } - static Instruction *getBinaryOperator(unsigned Op, Value *S1, Value *S2); - static Instruction *getUnaryOperator (unsigned Op, Value *Source); - //---------------------------------------------------------------------- // Exported enumerations... @@ -156,7 +153,7 @@ public: unsigned idx; public: typedef OperandIterator<_Inst, _Val> _Self; - typedef forward_iterator_tag iterator_category; + typedef bidirectional_iterator_tag iterator_category; typedef _Val pointer; inline OperandIterator(_Inst T) : Inst(T), idx(0) {} // begin iterator diff --git a/lib/AsmParser/llvmAsmParser.cpp b/lib/AsmParser/llvmAsmParser.cpp index e79f1bf5f66..080d4ea647c 100644 --- a/lib/AsmParser/llvmAsmParser.cpp +++ b/lib/AsmParser/llvmAsmParser.cpp @@ -1851,7 +1851,7 @@ case 112: case 113: #line 854 "llvmAsmParser.y" { - yyval.InstVal = Instruction::getBinaryOperator(yyvsp[-4].BinaryOpVal, getVal(yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal), getVal(yyvsp[-3].TypeVal, yyvsp[0].ValIDVal)); + yyval.InstVal = BinaryOperator::getBinaryOperator(yyvsp[-4].BinaryOpVal, getVal(yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal), getVal(yyvsp[-3].TypeVal, yyvsp[0].ValIDVal)); if (yyval.InstVal == 0) ThrowException("binary operator returned null!"); ; @@ -1859,7 +1859,7 @@ case 113: case 114: #line 859 "llvmAsmParser.y" { - yyval.InstVal = Instruction::getUnaryOperator(yyvsp[-2].UnaryOpVal, getVal(yyvsp[-1].TypeVal, yyvsp[0].ValIDVal)); + yyval.InstVal = UnaryOperator::getUnaryOperator(yyvsp[-2].UnaryOpVal, getVal(yyvsp[-1].TypeVal, yyvsp[0].ValIDVal)); if (yyval.InstVal == 0) ThrowException("unary operator returned null!"); ; diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 01709ca5deb..3a4873e8bcb 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -852,12 +852,12 @@ ValueRefList : Types ValueRef { // Used for PHI nodes and call statements... ValueRefListE : ValueRefList | /*empty*/ { $$ = 0; } InstVal : BinaryOps Types ValueRef ',' ValueRef { - $$ = Instruction::getBinaryOperator($1, getVal($2, $3), getVal($2, $5)); + $$ = BinaryOperator::getBinaryOperator($1, getVal($2, $3), getVal($2, $5)); if ($$ == 0) ThrowException("binary operator returned null!"); } | UnaryOps Types ValueRef { - $$ = Instruction::getUnaryOperator($1, getVal($2, $3)); + $$ = UnaryOperator::getUnaryOperator($1, getVal($2, $3)); if ($$ == 0) ThrowException("unary operator returned null!"); } diff --git a/lib/Bytecode/Reader/InstructionReader.cpp b/lib/Bytecode/Reader/InstructionReader.cpp index 667e144673c..54ca8695115 100644 --- a/lib/Bytecode/Reader/InstructionReader.cpp +++ b/lib/Bytecode/Reader/InstructionReader.cpp @@ -93,12 +93,13 @@ bool BytecodeParser::ParseInstruction(const uchar *&Buf, const uchar *EndBuf, if (Raw.Opcode >= Instruction::FirstUnaryOp && Raw.Opcode < Instruction::NumUnaryOps && Raw.NumOperands == 1) { - Res = Instruction::getUnaryOperator(Raw.Opcode, getValue(Raw.Ty, Raw.Arg1)); + Res = UnaryOperator::getUnaryOperator(Raw.Opcode,getValue(Raw.Ty,Raw.Arg1)); return false; } else if (Raw.Opcode >= Instruction::FirstBinaryOp && Raw.Opcode < Instruction::NumBinaryOps && Raw.NumOperands == 2) { - Res = Instruction::getBinaryOperator(Raw.Opcode, getValue(Raw.Ty, Raw.Arg1), - getValue(Raw.Ty, Raw.Arg2)); + Res = BinaryOperator::getBinaryOperator(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); diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index 4b528f0d94a..6cb62ea374a 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -30,7 +30,8 @@ void Instruction::setName(const string &name) { if (PP && hasName()) PP->getSymbolTableSure()->insert(this); } -Instruction *Instruction::getBinaryOperator(unsigned Op, Value *S1, Value *S2) { +BinaryOperator *BinaryOperator::getBinaryOperator(unsigned Op, + Value *S1, Value *S2) { switch (Op) { case Add: return new AddInst(S1, S2); @@ -52,7 +53,7 @@ Instruction *Instruction::getBinaryOperator(unsigned Op, Value *S1, Value *S2) { } -Instruction *Instruction::getUnaryOperator(unsigned Op, Value *Source) { +UnaryOperator *UnaryOperator::getUnaryOperator(unsigned Op, Value *Source) { switch (Op) { default: cerr << "Don't know how to GetUnaryOperator " << Op << endl; -- 2.34.1