mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 02:36:06 +00:00
Honour ByVal parameter attribute for name decoration
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46200 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
99e635ca69
commit
ea74c7e498
@ -25,6 +25,7 @@
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/ParameterAttributes.h"
|
||||
#include "llvm/Type.h"
|
||||
#include "llvm/Assembly/Writer.h"
|
||||
#include "llvm/Support/Mangler.h"
|
||||
@ -48,11 +49,19 @@ static X86MachineFunctionInfo calculateFunctionInfo(const Function *F,
|
||||
return Info;
|
||||
}
|
||||
|
||||
unsigned argNum = 1;
|
||||
for (Function::const_arg_iterator AI = F->arg_begin(), AE = F->arg_end();
|
||||
AI != AE; ++AI)
|
||||
AI != AE; ++AI, ++argNum) {
|
||||
const Type* Ty = AI->getType();
|
||||
|
||||
// 'Dereference' type in case of byval parameter attribute
|
||||
if (F->paramHasAttr(argNum, ParamAttr::ByVal))
|
||||
Ty = cast<PointerType>(Ty)->getElementType();
|
||||
|
||||
// Size should be aligned to DWORD boundary
|
||||
Size += ((TD->getABITypeSize(AI->getType()) + 3)/4)*4;
|
||||
|
||||
Size += ((TD->getABITypeSize(Ty) + 3)/4)*4;
|
||||
}
|
||||
|
||||
// We're not supporting tooooo huge arguments :)
|
||||
Info.setBytesToPopOnReturn((unsigned int)Size);
|
||||
return Info;
|
||||
|
Loading…
x
Reference in New Issue
Block a user