[llvm-commits] CVS: llvm/lib/Target/CBackend/Writer.cpp

Reid Spencer reid at x10sys.com
Mon Jan 8 22:38:21 PST 2007



Changes in directory llvm/lib/Target/CBackend:

Writer.cpp updated: 1.306 -> 1.307
---
Log message:

For PR1099: http://llvm.org/PR1099 :
Partial fix for this PR. Default function parameters to signed integer, just
like everything else in CBE. The bug was caused by incorrectly introducing
parameter attributes feature by choosing "signed" parameter if the 
SExtAttribute was specified. Howeer, if no attribute is specified, this
causes it to become unsigned which is incorrect. Reversing the logic so
that signedness is detected by "not ZExtAttribute" set fixes the issue. 

This fixes 197.parser but there is more to do. Any comparison and possibly
other operators involving arguments may need to correctly cast the parameter
before its use, depending on the sign of the operator.


---
Diffs of the changes:  (+9 -8)

 Writer.cpp |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/CBackend/Writer.cpp
diff -u llvm/lib/Target/CBackend/Writer.cpp:1.306 llvm/lib/Target/CBackend/Writer.cpp:1.307
--- llvm/lib/Target/CBackend/Writer.cpp:1.306	Mon Jan  8 02:00:00 2007
+++ llvm/lib/Target/CBackend/Writer.cpp	Tue Jan  9 00:38:06 2007
@@ -348,7 +348,7 @@
     if (PrintedType)
       FunctionInnards << ", ";
     printType(FunctionInnards, *I, 
-        /*isSigned=*/FTy->paramHasAttr(Idx, FunctionType::SExtAttribute), "");
+        /*isSigned=*/!FTy->paramHasAttr(Idx, FunctionType::ZExtAttribute), "");
     PrintedType = true;
   }
   if (FTy->isVarArg()) {
@@ -360,7 +360,7 @@
   FunctionInnards << ')';
   std::string tstr = FunctionInnards.str();
   printType(Out, RetTy, 
-      /*isSigned=*/FTy->paramHasAttr(0, FunctionType::SExtAttribute), tstr);
+      /*isSigned=*/!FTy->paramHasAttr(0, FunctionType::SExtAttribute), tstr);
 }
 
 std::ostream &
@@ -417,7 +417,7 @@
       if (I != FTy->param_begin())
         FunctionInnards << ", ";
       printType(FunctionInnards, *I, 
-          /*isSigned=*/FTy->paramHasAttr(Idx, FunctionType::SExtAttribute), "");
+         /*isSigned=*/!FTy->paramHasAttr(Idx, FunctionType::ZExtAttribute), "");
       ++Idx;
     }
     if (FTy->isVarArg()) {
@@ -429,7 +429,7 @@
     FunctionInnards << ')';
     std::string tstr = FunctionInnards.str();
     printType(Out, FTy->getReturnType(), 
-        /*isSigned=*/FTy->paramHasAttr(0, FunctionType::SExtAttribute), tstr);
+        /*isSigned=*/!FTy->paramHasAttr(0, FunctionType::ZExtAttribute), tstr);
     return Out;
   }
   case Type::StructTyID: {
@@ -1775,7 +1775,7 @@
         else
           ArgName = "";
         printType(FunctionInnards, I->getType(), 
-            /*isSigned=*/FT->paramHasAttr(Idx, FunctionType::SExtAttribute), 
+            /*isSigned=*/!FT->paramHasAttr(Idx, FunctionType::ZExtAttribute), 
             ArgName);
         PrintedArg = true;
         ++Idx;
@@ -1796,7 +1796,7 @@
     for (; I != E; ++I) {
       if (PrintedArg) FunctionInnards << ", ";
       printType(FunctionInnards, *I,
-               /*isSigned=*/FT->paramHasAttr(Idx, FunctionType::SExtAttribute));
+             /*isSigned=*/!FT->paramHasAttr(Idx, FunctionType::ZExtAttribute));
       PrintedArg = true;
       ++Idx;
     }
@@ -1823,7 +1823,8 @@
   }
     
   // Print out the return type and the signature built above.
-  printType(Out, RetTy, FT->paramHasAttr(0, FunctionType::SExtAttribute),
+  printType(Out, RetTy, 
+            /*isSigned=*/!FT->paramHasAttr(0, FunctionType::ZExtAttribute), 
             FunctionInnards.str());
 }
 
@@ -2516,7 +2517,7 @@
         (*AI)->getType() != FTy->getParamType(ArgNo)) {
       Out << '(';
       printType(Out, FTy->getParamType(ArgNo), 
-              /*isSigned=*/FTy->paramHasAttr(Idx, FunctionType::SExtAttribute));
+            /*isSigned=*/!FTy->paramHasAttr(Idx, FunctionType::ZExtAttribute));
       Out << ')';
     }
     writeOperand(*AI);






More information about the llvm-commits mailing list