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
diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h
index be6ea26..1bd7a24 100644
--- a/include/llvm/InstrTypes.h
+++ b/include/llvm/InstrTypes.h
@@ -56,13 +56,19 @@
 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 @@
 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 @@
   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 415c307..0ac1921 100644
--- a/include/llvm/Instruction.h
+++ b/include/llvm/Instruction.h
@@ -85,9 +85,6 @@
     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 @@
     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 e79f1bf..080d4ea 100644
--- a/lib/AsmParser/llvmAsmParser.cpp
+++ b/lib/AsmParser/llvmAsmParser.cpp
@@ -1851,7 +1851,7 @@
 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 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 01709ca..3a4873e 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -852,12 +852,12 @@
 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 667e144..54ca869 100644
--- a/lib/Bytecode/Reader/InstructionReader.cpp
+++ b/lib/Bytecode/Reader/InstructionReader.cpp
@@ -93,12 +93,13 @@
 
   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 4b528f0..6cb62ea 100644
--- a/lib/VMCore/Instruction.cpp
+++ b/lib/VMCore/Instruction.cpp
@@ -30,7 +30,8 @@
   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::getUnaryOperator(unsigned Op, Value *Source) {
+UnaryOperator *UnaryOperator::getUnaryOperator(unsigned Op, Value *Source) {
   switch (Op) {
   default:
     cerr << "Don't know how to GetUnaryOperator " << Op << endl;