Parameter attributes on invoke calls were being lost due to the wrong
authorDuncan Sands <baldrick@free.fr>
Mon, 7 May 2007 20:49:28 +0000 (20:49 +0000)
committerDuncan Sands <baldrick@free.fr>
Mon, 7 May 2007 20:49:28 +0000 (20:49 +0000)
attribute index being used.  Fix proposed by Anton Korobeynikov, who
asked me to implement and commit it for him.  This is PR1398.

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

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index cdaf191cf18b4806ed1ccb2299fa8ad5b67f748f..b70366357d931c37ebcf86a8c9c4eb2d4ea1389d 100644 (file)
@@ -2787,10 +2787,12 @@ void SelectionDAGLowering::LowerCallTo(Instruction &I,
     Value *Arg = I.getOperand(i);
     SDOperand ArgNode = getValue(Arg);
     Entry.Node = ArgNode; Entry.Ty = Arg->getType();
-    Entry.isSExt   = Attrs && Attrs->paramHasAttr(i, ParamAttr::SExt);
-    Entry.isZExt   = Attrs && Attrs->paramHasAttr(i, ParamAttr::ZExt);
-    Entry.isInReg  = Attrs && Attrs->paramHasAttr(i, ParamAttr::InReg);
-    Entry.isSRet   = Attrs && Attrs->paramHasAttr(i, ParamAttr::StructRet);
+
+    unsigned attrInd = i - OpIdx + 1;
+    Entry.isSExt  = Attrs && Attrs->paramHasAttr(attrInd, ParamAttr::SExt);
+    Entry.isZExt  = Attrs && Attrs->paramHasAttr(attrInd, ParamAttr::ZExt);
+    Entry.isInReg = Attrs && Attrs->paramHasAttr(attrInd, ParamAttr::InReg);
+    Entry.isSRet  = Attrs && Attrs->paramHasAttr(attrInd, ParamAttr::StructRet);
     Args.push_back(Entry);
   }