From: Andrew Lenharth Date: Tue, 19 Feb 2008 19:47:54 +0000 (+0000) Subject: fix some byval problems in the cbe. Closes PR2065 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=86532db5d7b1a8e03d9677ee3d15daca1a59b6f2;p=oota-llvm.git 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 --- diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 334f6fe54f9..d01c2ab74af 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -1198,12 +1198,12 @@ void CWriter::writeOperandRaw(Value *Operand) { } void CWriter::writeOperand(Value *Operand) { - if (isa(Operand) || isDirectAlloca(Operand)) + if (isa(Operand) || isDirectAlloca(Operand) || ByValParams.count(Operand)) Out << "(&"; // Global variables are referenced as their addresses by llvm writeOperandInternal(Operand); - if (isa(Operand) || isDirectAlloca(Operand)) + if (isa(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; }