mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 06:32:24 +00:00
Fix attribute handling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48262 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4191b96f41
commit
8f9b551147
@ -210,17 +210,17 @@ Function *SRETPromotion::cloneFunctionBody(Function *F,
|
||||
// Skip first argument.
|
||||
Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
|
||||
++I;
|
||||
unsigned ParamIndex = 1; // 0th parameter attribute is reserved for return type.
|
||||
// 0th parameter attribute is reserved for return type.
|
||||
// 1th parameter attribute is for first 1st sret argument.
|
||||
unsigned ParamIndex = 2;
|
||||
while (I != E) {
|
||||
Params.push_back(I->getType());
|
||||
ParameterAttributes Attrs = ParamAttr::None;
|
||||
if (PAL) {
|
||||
Attrs = PAL->getParamAttrs(ParamIndex);
|
||||
if (ParamIndex == 1) // Skip sret attribute
|
||||
Attrs = Attrs ^ ParamAttr::StructRet;
|
||||
ParameterAttributes Attrs = PAL->getParamAttrs(ParamIndex);
|
||||
if (Attrs != ParamAttr::None)
|
||||
ParamAttrsVec.push_back(ParamAttrsWithIndex::get(ParamIndex - 1,
|
||||
Attrs));
|
||||
}
|
||||
if (Attrs != ParamAttr::None)
|
||||
ParamAttrsVec.push_back(ParamAttrsWithIndex::get(ParamIndex, Attrs));
|
||||
++I;
|
||||
++ParamIndex;
|
||||
}
|
||||
@ -269,17 +269,17 @@ void SRETPromotion::updateCallSites(Function *F, Function *NF) {
|
||||
CallSite::arg_iterator AI = CS.arg_begin(), AE = CS.arg_end();
|
||||
Value *FirstCArg = *AI;
|
||||
++AI;
|
||||
unsigned ParamIndex = 1; // 0th parameter attribute is reserved for return type.
|
||||
// 0th parameter attribute is reserved for return type.
|
||||
// 1th parameter attribute is for first 1st sret argument.
|
||||
unsigned ParamIndex = 2;
|
||||
while (AI != AE) {
|
||||
Args.push_back(*AI);
|
||||
ParameterAttributes Attrs = ParamAttr::None;
|
||||
if (PAL) {
|
||||
Attrs = PAL->getParamAttrs(ParamIndex);
|
||||
if (ParamIndex == 1) // Skip sret attribute
|
||||
Attrs = Attrs ^ ParamAttr::StructRet;
|
||||
ParameterAttributes Attrs = PAL->getParamAttrs(ParamIndex);
|
||||
if (Attrs != ParamAttr::None)
|
||||
ArgAttrsVec.push_back(ParamAttrsWithIndex::get(ParamIndex - 1,
|
||||
Attrs));
|
||||
}
|
||||
if (Attrs != ParamAttr::None)
|
||||
ArgAttrsVec.push_back(ParamAttrsWithIndex::get(Args.size(), Attrs));
|
||||
++ParamIndex;
|
||||
++AI;
|
||||
}
|
||||
|
7
test/Transforms/SRETPromotion/2008-03-11-attributes.ll
Normal file
7
test/Transforms/SRETPromotion/2008-03-11-attributes.ll
Normal file
@ -0,0 +1,7 @@
|
||||
; RUN: llvm-as < %s | opt -sretpromotion -disable-output
|
||||
%struct.ObjPoint = type { double, double, double, double, double, double }
|
||||
|
||||
define void @RotatePoint(%struct.ObjPoint* sret %agg.result, %struct.ObjPoint* byval %a, double %rx, double %ry, double %rz) nounwind {
|
||||
entry:
|
||||
unreachable
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user