fix some byval problems in the cbe. Closes PR2065

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47337 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Lenharth 2008-02-19 19:47:54 +00:00
parent f27dfcb210
commit 86532db5d7

View File

@ -1198,12 +1198,12 @@ void CWriter::writeOperandRaw(Value *Operand) {
}
void CWriter::writeOperand(Value *Operand) {
if (isa<GlobalVariable>(Operand) || isDirectAlloca(Operand))
if (isa<GlobalVariable>(Operand) || isDirectAlloca(Operand) || ByValParams.count(Operand))
Out << "(&"; // Global variables are referenced as their addresses by llvm
writeOperandInternal(Operand);
if (isa<GlobalVariable>(Operand) || isDirectAlloca(Operand))
if (isa<GlobalVariable>(Operand) || isDirectAlloca(Operand) || ByValParams.count(Operand))
Out << ')';
}
@ -2723,13 +2723,11 @@ void CWriter::visitCallInst(CallInst &I) {
// Check if the argument is expected to be passed by value.
bool isOutByVal = PAL && PAL->paramHasAttr(ArgNo+1, ParamAttr::ByVal);
// Check if this argument itself is passed in by reference.
bool isInByVal = ByValParams.count(*AI);
if (isOutByVal && !isInByVal)
//bool isInByVal = ByValParams.count(*AI);
if (isOutByVal)
Out << "*(";
else if (!isOutByVal && isInByVal)
Out << "&(";
writeOperand(*AI);
if (isOutByVal ^ isInByVal)
if (isOutByVal)
Out << ")";
PrintedArg = true;
}