[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