[llvm-commits] [llvm] r44415 - /llvm/trunk/lib/Target/CBackend/CBackend.cpp

Chris Lattner sabre at nondot.org
Wed Nov 28 13:26:18 PST 2007


Author: lattner
Date: Wed Nov 28 15:26:17 2007
New Revision: 44415

URL: http://llvm.org/viewvc/llvm-project?rev=44415&view=rev
Log:
Work around a GCC bug, producing this code:

  unsigned char *llvm_cbe_X;
..
  llvm_cbe_X = 0; *((void**)&llvm_cbe_X) = __builtin_stack_save();

instead of:

  llvm_cbe_X = __builtin_stack_save();

See PR1809 for details.


Modified:
    llvm/trunk/lib/Target/CBackend/CBackend.cpp

Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=44415&r1=44414&r2=44415&view=diff

==============================================================================
--- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)
+++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Wed Nov 28 15:26:17 2007
@@ -2573,6 +2573,12 @@
         writeOperand(I.getOperand(3));
         Out << ")";
         return;
+      case Intrinsic::stacksave:
+        // Emit this as: Val = 0; *((void**)&Val) = __builtin_stack_save()
+        // to work around GCC bugs (see PR1809).
+        Out << "0; *((void**)&" << GetValueName(&I)
+            << ") = __builtin_stack_save()";
+        return;
       case Intrinsic::dbg_stoppoint: {
         // If we use writeOperand directly we get a "u" suffix which is rejected
         // by gcc.





More information about the llvm-commits mailing list