back out r101423 and r101397, they break llvm-gcc self-host on darwin10

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101434 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index 1aa17b4..67f513b 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -2886,7 +2886,7 @@
   bool hasByVal = I.hasByValArgument();
   bool isStructRet = I.hasStructRetAttr();
   if (isStructRet) {
-    writeOperandDeref(I.getOperand(0));
+    writeOperandDeref(I.getOperand(1));
     Out << " = ";
   }
   
@@ -2942,7 +2942,7 @@
 
   unsigned NumDeclaredParams = FTy->getNumParams();
 
-  CallInst::op_iterator AI = I.op_begin(), AE = I.op_end() - 1;
+  CallSite::arg_iterator AI = I.op_begin()+1, AE = I.op_end();
   unsigned ArgNo = 0;
   if (isStructRet) {   // Skip struct return argument.
     ++AI;
@@ -2996,7 +2996,7 @@
     Out << "0; ";
       
     Out << "va_start(*(va_list*)";
-    writeOperand(I.getOperand(0));
+    writeOperand(I.getOperand(1));
     Out << ", ";
     // Output the last argument to the enclosing function.
     if (I.getParent()->getParent()->arg_empty())
@@ -3006,9 +3006,9 @@
     Out << ')';
     return true;
   case Intrinsic::vaend:
-    if (!isa<ConstantPointerNull>(I.getOperand(0))) {
+    if (!isa<ConstantPointerNull>(I.getOperand(1))) {
       Out << "0; va_end(*(va_list*)";
-      writeOperand(I.getOperand(0));
+      writeOperand(I.getOperand(1));
       Out << ')';
     } else {
       Out << "va_end(*(va_list*)0)";
@@ -3017,47 +3017,47 @@
   case Intrinsic::vacopy:
     Out << "0; ";
     Out << "va_copy(*(va_list*)";
-    writeOperand(I.getOperand(0));
-    Out << ", *(va_list*)";
     writeOperand(I.getOperand(1));
+    Out << ", *(va_list*)";
+    writeOperand(I.getOperand(2));
     Out << ')';
     return true;
   case Intrinsic::returnaddress:
     Out << "__builtin_return_address(";
-    writeOperand(I.getOperand(0));
+    writeOperand(I.getOperand(1));
     Out << ')';
     return true;
   case Intrinsic::frameaddress:
     Out << "__builtin_frame_address(";
-    writeOperand(I.getOperand(0));
+    writeOperand(I.getOperand(1));
     Out << ')';
     return true;
   case Intrinsic::powi:
     Out << "__builtin_powi(";
-    writeOperand(I.getOperand(0));
-    Out << ", ";
     writeOperand(I.getOperand(1));
+    Out << ", ";
+    writeOperand(I.getOperand(2));
     Out << ')';
     return true;
   case Intrinsic::setjmp:
     Out << "setjmp(*(jmp_buf*)";
-    writeOperand(I.getOperand(0));
+    writeOperand(I.getOperand(1));
     Out << ')';
     return true;
   case Intrinsic::longjmp:
     Out << "longjmp(*(jmp_buf*)";
-    writeOperand(I.getOperand(0));
-    Out << ", ";
     writeOperand(I.getOperand(1));
+    Out << ", ";
+    writeOperand(I.getOperand(2));
     Out << ')';
     return true;
   case Intrinsic::prefetch:
     Out << "LLVM_PREFETCH((const void *)";
-    writeOperand(I.getOperand(0));
-    Out << ", ";
     writeOperand(I.getOperand(1));
     Out << ", ";
     writeOperand(I.getOperand(2));
+    Out << ", ";
+    writeOperand(I.getOperand(3));
     Out << ")";
     return true;
   case Intrinsic::stacksave:
@@ -3074,7 +3074,7 @@
     printType(Out, I.getType());
     Out << ')';  
     // Multiple GCC builtins multiplex onto this intrinsic.
-    switch (cast<ConstantInt>(I.getOperand(2))->getZExtValue()) {
+    switch (cast<ConstantInt>(I.getOperand(3))->getZExtValue()) {
     default: llvm_unreachable("Invalid llvm.x86.sse.cmp!");
     case 0: Out << "__builtin_ia32_cmpeq"; break;
     case 1: Out << "__builtin_ia32_cmplt"; break;
@@ -3095,9 +3095,9 @@
       Out << 'd';
       
     Out << "(";
-    writeOperand(I.getOperand(0));
-    Out << ", ";
     writeOperand(I.getOperand(1));
+    Out << ", ";
+    writeOperand(I.getOperand(2));
     Out << ")";
     return true;
   case Intrinsic::ppc_altivec_lvsl:
@@ -3105,7 +3105,7 @@
     printType(Out, I.getType());
     Out << ')';  
     Out << "__builtin_altivec_lvsl(0, (void*)";
-    writeOperand(I.getOperand(0));
+    writeOperand(I.getOperand(1));
     Out << ")";
     return true;
   }
@@ -3218,7 +3218,7 @@
       DestVal = ResultVals[ValueCount].first;
       DestValNo = ResultVals[ValueCount].second;
     } else
-      DestVal = CI.getOperand(ValueCount-ResultVals.size());
+      DestVal = CI.getOperand(ValueCount-ResultVals.size()+1);
 
     if (I->isEarlyClobber)
       C = "&"+C;
@@ -3252,7 +3252,7 @@
     }
     
     assert(ValueCount >= ResultVals.size() && "Input can't refer to result");
-    Value *SrcVal = CI.getOperand(ValueCount-ResultVals.size());
+    Value *SrcVal = CI.getOperand(ValueCount-ResultVals.size()+1);
     
     Out << "\"" << C << "\"(";
     if (!I->isIndirect)
diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp
index a4af391..51d9d75 100644
--- a/lib/Target/CppBackend/CPPBackend.cpp
+++ b/lib/Target/CppBackend/CPPBackend.cpp
@@ -1082,9 +1082,8 @@
 
     // Before we emit this instruction, we need to take care of generating any
     // forward references. So, we get the names of all the operands in advance
-    const unsigned Ops(I->getNumOperands());
-    std::string* opNames = new std::string[Ops];
-    for (unsigned i = 0; i < Ops; i++) {
+    std::string* opNames = new std::string[I->getNumOperands()];
+    for (unsigned i = 0; i < I->getNumOperands(); i++) {
       opNames[i] = getOpName(I->getOperand(i));
     }
 
@@ -1145,15 +1144,15 @@
       const InvokeInst* inv = cast<InvokeInst>(I);
       Out << "std::vector<Value*> " << iName << "_params;";
       nl(Out);
-      for (unsigned i = 0; i < inv->getNumOperands() - 3; ++i) {
+      for (unsigned i = 3; i < inv->getNumOperands(); ++i) {
         Out << iName << "_params.push_back("
             << opNames[i] << ");";
         nl(Out);
       }
       Out << "InvokeInst *" << iName << " = InvokeInst::Create("
-          << opNames[Ops - 3] << ", "
-          << opNames[Ops - 2] << ", "
-          << opNames[Ops - 1] << ", "
+          << opNames[0] << ", "
+          << opNames[1] << ", "
+          << opNames[2] << ", "
           << iName << "_params.begin(), " << iName << "_params.end(), \"";
       printEscapedString(inv->getName());
       Out << "\", " << bbname << ");";
@@ -1389,18 +1388,18 @@
       if (call->getNumOperands() > 2) {
         Out << "std::vector<Value*> " << iName << "_params;";
         nl(Out);
-        for (unsigned i = 0; i < call->getNumOperands() - 1; ++i) {
+        for (unsigned i = 1; i < call->getNumOperands(); ++i) {
           Out << iName << "_params.push_back(" << opNames[i] << ");";
           nl(Out);
         }
         Out << "CallInst* " << iName << " = CallInst::Create("
-            << opNames[Ops - 1] << ", " << iName << "_params.begin(), "
+            << opNames[0] << ", " << iName << "_params.begin(), "
             << iName << "_params.end(), \"";
       } else if (call->getNumOperands() == 2) {
         Out << "CallInst* " << iName << " = CallInst::Create("
-            << opNames[Ops - 1] << ", " << opNames[0] << ", \"";
+            << opNames[0] << ", " << opNames[1] << ", \"";
       } else {
-        Out << "CallInst* " << iName << " = CallInst::Create(" << opNames[Ops - 1]
+        Out << "CallInst* " << iName << " = CallInst::Create(" << opNames[0]
             << ", \"";
       }
       printEscapedString(call->getName());
diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp
index b41c1fd..606728e 100644
--- a/lib/Target/X86/X86FastISel.cpp
+++ b/lib/Target/X86/X86FastISel.cpp
@@ -1170,8 +1170,8 @@
     // Emit code inline code to store the stack guard onto the stack.
     EVT PtrTy = TLI.getPointerTy();
 
-    const Value *Op1 = I.getOperand(0); // The guard's value.
-    const AllocaInst *Slot = cast<AllocaInst>(I.getOperand(1));
+    const Value *Op1 = I.getOperand(1); // The guard's value.
+    const AllocaInst *Slot = cast<AllocaInst>(I.getOperand(2));
 
     // Grab the frame index.
     X86AddressMode AM;
@@ -1182,7 +1182,7 @@
     return true;
   }
   case Intrinsic::objectsize: {
-    ConstantInt *CI = dyn_cast<ConstantInt>(I.getOperand(1));
+    ConstantInt *CI = dyn_cast<ConstantInt>(I.getOperand(2));
     const Type *Ty = I.getCalledFunction()->getReturnType();
     
     assert(CI && "Non-constant type in Intrinsic::objectsize?");
@@ -1237,8 +1237,8 @@
     if (!isTypeLegal(RetTy, VT))
       return false;
 
-    const Value *Op1 = I.getOperand(0);
-    const Value *Op2 = I.getOperand(1);
+    const Value *Op1 = I.getOperand(1);
+    const Value *Op2 = I.getOperand(2);
     unsigned Reg1 = getRegForValue(Op1);
     unsigned Reg2 = getRegForValue(Op2);
 
@@ -1281,7 +1281,7 @@
 
 bool X86FastISel::X86SelectCall(const Instruction *I) {
   const CallInst *CI = cast<CallInst>(I);
-  const Value *Callee = CI->getCalledValue();
+  const Value *Callee = I->getOperand(0);
 
   // Can't handle inline asm yet.
   if (isa<InlineAsm>(Callee))
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp
index 9575b0f..03b5942 100644
--- a/lib/Target/X86/X86ISelLowering.cpp
+++ b/lib/Target/X86/X86ISelLowering.cpp
@@ -9918,7 +9918,7 @@
 
   // Verify this is a simple bswap.
   if (CI->getNumOperands() != 2 ||
-      CI->getType() != CI->getOperand(0)->getType() ||
+      CI->getType() != CI->getOperand(1)->getType() ||
       !CI->getType()->isIntegerTy())
     return false;
 
@@ -9931,7 +9931,7 @@
   Module *M = CI->getParent()->getParent()->getParent();
   Constant *Int = Intrinsic::getDeclaration(M, Intrinsic::bswap, Tys, 1);
 
-  Value *Op = CI->getOperand(0);
+  Value *Op = CI->getOperand(1);
   Op = CallInst::Create(Int, Op, CI->getName(), CI);
 
   CI->replaceAllUsesWith(Op);