[llvm-commits] [llvm] r51356 - in /llvm/trunk: lib/Analysis/AliasSetTracker.cpp test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll

Chris Lattner sabre at nondot.org
Tue May 20 15:05:28 PDT 2008


Author: lattner
Date: Tue May 20 17:05:28 2008
New Revision: 51356

URL: http://llvm.org/viewvc/llvm-project?rev=51356&view=rev
Log:
Fix PR2346 by marking vaarg as volatile so that licm doesn't try to
hoist them.

Added:
    llvm/trunk/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll
Modified:
    llvm/trunk/lib/Analysis/AliasSetTracker.cpp

Modified: llvm/trunk/lib/Analysis/AliasSetTracker.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasSetTracker.cpp?rev=51356&r1=51355&r2=51356&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/AliasSetTracker.cpp (original)
+++ llvm/trunk/lib/Analysis/AliasSetTracker.cpp Tue May 20 17:05:28 2008
@@ -294,7 +294,10 @@
 
 bool AliasSetTracker::add(VAArgInst *VAAI) {
   bool NewPtr;
-  addPointer(VAAI->getOperand(0), ~0, AliasSet::ModRef, NewPtr);
+  AliasSet &AS = addPointer(VAAI->getOperand(0), ~0, AliasSet::ModRef, NewPtr);
+  
+  // Treat vaarg instructions as volatile (not to be moved).
+  AS.setVolatile();
   return NewPtr;
 }
 

Added: llvm/trunk/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll?rev=51356&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll (added)
+++ llvm/trunk/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll Tue May 20 17:05:28 2008
@@ -0,0 +1,30 @@
+; RUN: llvm-as < %s | opt -licm -disable-output
+; PR2346
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
+target triple = "i686-pc-linux-gnu"
+	%struct._zval_struct = type { %union._double, i32, i8, i8, i8, i8 }
+	%union._double = type { double }
+
+define i8* @zend_fetch_resource(%struct._zval_struct** %passed_id, i32 %default_id, i8* %resource_type_name, i32* %found_resource_type, i32 %num_resource_types, ...) {
+entry:
+	br label %whilebody.i.i
+
+whilebody.i.i:		; preds = %whilebody.i.i, %entry
+	br i1 false, label %ifthen.i.i, label %whilebody.i.i
+
+ifthen.i.i:		; preds = %whilebody.i.i
+	br label %forcond
+
+forcond:		; preds = %forbody, %ifthen.i.i
+	br i1 false, label %forbody, label %afterfor
+
+forbody:		; preds = %forcond
+	va_arg i8** null, i32		; <i32>:0 [#uses=0]
+	br i1 false, label %ifthen59, label %forcond
+
+ifthen59:		; preds = %forbody
+	unreachable
+
+afterfor:		; preds = %forcond
+	ret i8* null
+}





More information about the llvm-commits mailing list