[llvm-commits] [llvm] r42270 - in /llvm/trunk: lib/Transforms/Scalar/LICM.cpp test/Transforms/LICM/2007-09-24-PromoteNullValue.ll

Devang Patel dpatel at apple.com
Mon Sep 24 13:02:42 PDT 2007


Author: dpatel
Date: Mon Sep 24 15:02:42 2007
New Revision: 42270

URL: http://llvm.org/viewvc/llvm-project?rev=42270&view=rev
Log:
 Do not promote null values because it may be unsafe to do so.

Added:
    llvm/trunk/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/LICM.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LICM.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LICM.cpp?rev=42270&r1=42269&r2=42270&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LICM.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LICM.cpp Mon Sep 24 15:02:42 2007
@@ -800,6 +800,10 @@
           break;
         }
 
+      // Do not promote null values because it may be unsafe to do so.
+      if (isa<ConstantPointerNull>(V))
+        PointerOk = false;
+
       if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(V)) {
         // If GEP base is NULL then the calculated address used by Store or
         // Load instruction is invalid. Do not promote this value because

Added: llvm/trunk/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll?rev=42270&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll (added)
+++ llvm/trunk/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll Mon Sep 24 15:02:42 2007
@@ -0,0 +1,46 @@
+; Do not promote null value because it may be unsafe to do so.
+; RUN: llvm-as < %s | opt -licm | llvm-dis | not grep promoted
+
+define i32 @f(i32 %foo, i32 %bar, i32 %com) {
+entry:
+	%tmp2 = icmp eq i32 %foo, 0		; <i1> [#uses=1]
+	br i1 %tmp2, label %cond_next, label %cond_true
+
+cond_true:		; preds = %entry
+	br label %return
+
+cond_next:		; preds = %entry
+	br label %bb
+
+bb:		; preds = %bb15, %cond_next
+	switch i32 %bar, label %bb15 [
+		 i32 1, label %bb6
+	]
+
+bb6:		; preds = %bb
+	%tmp8 = icmp eq i32 %com, 0		; <i1> [#uses=1]
+	br i1 %tmp8, label %cond_next14, label %cond_true11
+
+cond_true11:		; preds = %bb6
+	br label %return
+
+cond_next14:		; preds = %bb6
+	store i8 0, i8* null
+	br label %bb15
+
+bb15:		; preds = %cond_next14, %bb
+	br label %bb
+
+return:		; preds = %cond_true11, %cond_true
+	%storemerge = phi i32 [ 0, %cond_true ], [ undef, %cond_true11 ]		; <i32> [#uses=1]
+	ret i32 %storemerge
+}
+
+define i32 @kdMain() {
+entry:
+	%tmp1 = call i32 @f( i32 0, i32 1, i32 1 )		; <i32> [#uses=0]
+	call void @exit( i32 0 )
+	unreachable
+}
+
+declare void @exit(i32)





More information about the llvm-commits mailing list