fix some byval problems in the cbe. Closes PR2065
authorAndrew Lenharth <andrewl@lenharth.org>
Tue, 19 Feb 2008 19:47:54 +0000 (19:47 +0000)
committerAndrew Lenharth <andrewl@lenharth.org>
Tue, 19 Feb 2008 19:47:54 +0000 (19:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47337 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/CBackend/CBackend.cpp

index 334f6fe54f9cb75edc82f37e2c455561e20a4c5a..d01c2ab74afa4f6dfc8610159c8fb7d6b848a444 100644 (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;
   }