diff options
author | Duncan Sands <baldrick@free.fr> | 2007-05-07 20:49:28 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-05-07 20:49:28 +0000 |
commit | 671e8c4444f3266943d442fe5a8e420f26e92500 (patch) | |
tree | 3afbbfe876710a6b31a6b4107a4ef620dc44afbc /llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | |
parent | 7208cd6e4ee34ddbbf7b31b57f794e2630e0c474 (diff) | |
download | bcm5719-llvm-671e8c4444f3266943d442fe5a8e420f26e92500.tar.gz bcm5719-llvm-671e8c4444f3266943d442fe5a8e420f26e92500.zip |
Parameter attributes on invoke calls were being lost due to the wrong
attribute index being used. Fix proposed by Anton Korobeynikov, who
asked me to implement and commit it for him. This is PR1398.
llvm-svn: 36906
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index cdaf191cf18..b70366357d9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -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); } |