rotate CallInst operands
authorGabor Greif <ggreif@gmail.com>
Tue, 13 Jul 2010 15:31:36 +0000 (15:31 +0000)
committerGabor Greif <ggreif@gmail.com>
Tue, 13 Jul 2010 15:31:36 +0000 (15:31 +0000)
with this commit the callee moves to the end of
the operand array (from the start) and the call
arguments now start at index 0 (formerly 1)

this ordering is now consistent with InvokeInst

this commit only flips the switch,
functionally it is equivalent to
r101465

I intend to commit several cleanups after a few
days of soak period

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108240 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Instructions.h
lib/Target/CppBackend/CPPBackend.cpp
lib/VMCore/Verifier.cpp

index 078bf6862f67aaeee3d0daa72a085bbef594abde..af93a294cc88a3b3afd3caa9ca529fd7a5e35ad0 100644 (file)
@@ -944,6 +944,9 @@ public:
   /// @deprecated these "define hacks" will go away soon
   /// @brief coerce out-of-tree code to abandon the low-level interfaces
   /// @detail see below comments and update your code to high-level interfaces
+  ///    - getOperand(0)  --->  getCalledValue(), or possibly getCalledFunction
+  ///    - setOperand(0, V)  --->  setCalledFunction(V)
+  ///
   ///    in LLVM v2.8-only code
   ///    - getOperand(N+1)  --->  getArgOperand(N)
   ///    - setOperand(N+1, V)  --->  setArgOperand(N, V)
@@ -961,23 +964,11 @@ public:
 # undef protected
 public:
 
-  enum { ArgOffset = 1 }; ///< temporary, do not use for new code!
+  enum { ArgOffset = 0 }; ///< temporary, do not use for new code!
   unsigned getNumArgOperands() const { return getNumOperands() - 1; }
   Value *getArgOperand(unsigned i) const { return getOperand(i + ArgOffset); }
   void setArgOperand(unsigned i, Value *v) { setOperand(i + ArgOffset, v); }
 
-  /// Provide compile-time errors for accessing operand 0
-  /// @deprecated these will go away soon
-  /// @detail see below comments and update your code to high-level interfaces
-  ///    - getOperand(0)  --->  getCalledValue(), or possibly getCalledFunction
-  ///    - setOperand(0, V)  --->  setCalledFunction(V)
-  ///
-private:
-  void getOperand(void*); // NO IMPL ---> use getCalledValue (or possibly
-                          //              getCalledFunction) instead
-  void setOperand(void*, Value*); // NO IMPL ---> use setCalledFunction instead
-public:
-
   /// getCallingConv/setCallingConv - Get or set the calling convention of this
   /// function call.
   CallingConv::ID getCallingConv() const {
index 46a4ca4437d7afcf5996d7c94e71c23b6f32853d..145568adcd4afed88eb4b2ee3c0ea7628f99c81b 100644 (file)
@@ -1400,18 +1400,18 @@ void CppWriter::printInstruction(const Instruction *I,
       Out << "std::vector<Value*> " << iName << "_params;";
       nl(Out);
       for (unsigned i = 0; i < call->getNumArgOperands(); ++i) {
-        Out << iName << "_params.push_back(" << opNames[i+1] << ");";
+        Out << iName << "_params.push_back(" << opNames[i] << ");";
         nl(Out);
       }
       Out << "CallInst* " << iName << " = CallInst::Create("
-          << opNames[0] << ", " << iName << "_params.begin(), "
+          << opNames[call->getNumArgOperands()] << ", " << iName << "_params.begin(), "
           << iName << "_params.end(), \"";
     } else if (call->getNumArgOperands() == 1) {
       Out << "CallInst* " << iName << " = CallInst::Create("
-          << opNames[0] << ", " << opNames[1] << ", \"";
+          << opNames[call->getNumArgOperands()] << ", " << opNames[0] << ", \"";
     } else {
-      Out << "CallInst* " << iName << " = CallInst::Create(" << opNames[0]
-          << ", \"";
+      Out << "CallInst* " << iName << " = CallInst::Create("
+          << opNames[call->getNumArgOperands()] << ", \"";
     }
     printEscapedString(call->getName());
     Out << "\", " << bbname << ");";
index 383f062a0529131be5a929677a6ded10c223c412..f97699dabd89077bec46c00fa1d191bb3ad8b1ed 100644 (file)
@@ -1454,7 +1454,7 @@ void Verifier::visitInstruction(Instruction &I) {
     if (Function *F = dyn_cast<Function>(I.getOperand(i))) {
       // Check to make sure that the "address of" an intrinsic function is never
       // taken.
-      Assert1(!F->isIntrinsic() || (i == 0 && isa<CallInst>(I)),
+      Assert1(!F->isIntrinsic() || (i + 1 == e && isa<CallInst>(I)),
               "Cannot take the address of an intrinsic!", &I);
       Assert1(F->getParent() == Mod, "Referencing function in another module!",
               &I);
@@ -1537,7 +1537,8 @@ void Verifier::visitInstruction(Instruction &I) {
                 "Instruction does not dominate all uses!", Op, &I);
       }
     } else if (isa<InlineAsm>(I.getOperand(i))) {
-      Assert1((i == 0 && isa<CallInst>(I)) || (i + 3 == e && isa<InvokeInst>(I)),
+      Assert1((i + 1 == e && isa<CallInst>(I)) ||
+              (i + 3 == e && isa<InvokeInst>(I)),
               "Cannot take the address of an inline asm!", &I);
     }
   }