[llvm-commits] [llvm] r90022 - in /llvm/trunk: lib/Transforms/Scalar/GVN.cpp test/Transforms/GVN/crash.ll test/Transforms/GVN/pre-load.ll
Chris Lattner
sabre at nondot.org
Fri Nov 27 14:50:08 PST 2009
Author: lattner
Date: Fri Nov 27 16:50:07 2009
New Revision: 90022
URL: http://llvm.org/viewvc/llvm-project?rev=90022&view=rev
Log:
disable value insertion for now, I need to figure out how
to inform GVN about the newly inserted values. This fixes
PR5631.
Added:
llvm/trunk/test/Transforms/GVN/crash.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/GVN.cpp
llvm/trunk/test/Transforms/GVN/pre-load.ll
Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=90022&r1=90021&r2=90022&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri Nov 27 16:50:07 2009
@@ -1437,10 +1437,16 @@
//
// FIXME: This may insert a computation, but we don't tell scalar GVN
// optimization stuff about it. How do we do this?
+#if 0
Value *LoadPtr =
MD->InsertPHITranslatedPointer(LI->getOperand(0), LoadBB,
UnavailablePred, TD, *DT);
-
+#else
+ Value *LoadPtr =
+ MD->GetAvailablePHITranslatedValue(LI->getOperand(0), LoadBB,
+ UnavailablePred, TD, *DT);
+#endif
+
// If we couldn't find or insert a computation of this phi translated value,
// we fail PRE.
if (LoadPtr == 0) {
Added: llvm/trunk/test/Transforms/GVN/crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/crash.ll?rev=90022&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/GVN/crash.ll (added)
+++ llvm/trunk/test/Transforms/GVN/crash.ll Fri Nov 27 16:50:07 2009
@@ -0,0 +1,61 @@
+; RUN: opt -gvn %s -disable-output
+
+; PR5631
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-apple-darwin10.0"
+
+define i32* @peel_to_type(i8* %name, i32 %namelen, i32* %o, i32 %expected_type) nounwind ssp {
+entry:
+ br i1 undef, label %if.end13, label %while.body.preheader
+
+
+if.end13: ; preds = %if.then6
+ br label %while.body.preheader
+
+while.body.preheader: ; preds = %if.end13, %if.end
+ br label %while.body
+
+while.body: ; preds = %while.body.backedge, %while.body.preheader
+ %o.addr.0 = phi i32* [ undef, %while.body.preheader ], [ %o.addr.0.be, %while.body.backedge ] ; <i32*> [#uses=2]
+ br i1 false, label %return.loopexit, label %lor.lhs.false
+
+lor.lhs.false: ; preds = %while.body
+ %tmp20 = bitcast i32* %o.addr.0 to i32* ; <i32*> [#uses=1]
+ %tmp22 = load i32* %tmp20 ; <i32> [#uses=0]
+ br i1 undef, label %land.lhs.true24, label %if.end31
+
+land.lhs.true24: ; preds = %lor.lhs.false
+ %call28 = call i32* @parse_object(i8* undef) nounwind ; <i32*> [#uses=0]
+ br i1 undef, label %return.loopexit, label %if.end31
+
+if.end31: ; preds = %land.lhs.true24, %lor.lhs.false
+ br i1 undef, label %return.loopexit, label %if.end41
+
+if.end41: ; preds = %if.end31
+ %tmp43 = bitcast i32* %o.addr.0 to i32* ; <i32*> [#uses=1]
+ %tmp45 = load i32* %tmp43 ; <i32> [#uses=0]
+ br i1 undef, label %if.then50, label %if.else
+
+if.then50: ; preds = %if.end41
+ %tmp53 = load i32** undef ; <i32*> [#uses=1]
+ br label %while.body.backedge
+
+if.else: ; preds = %if.end41
+ br i1 undef, label %if.then62, label %if.else67
+
+if.then62: ; preds = %if.else
+ br label %while.body.backedge
+
+while.body.backedge: ; preds = %if.then62, %if.then50
+ %o.addr.0.be = phi i32* [ %tmp53, %if.then50 ], [ undef, %if.then62 ] ; <i32*> [#uses=1]
+ br label %while.body
+
+if.else67: ; preds = %if.else
+ ret i32* null
+
+return.loopexit: ; preds = %if.end31, %land.lhs.true24, %while.body
+ ret i32* undef
+}
+
+declare i32* @parse_object(i8*)
Modified: llvm/trunk/test/Transforms/GVN/pre-load.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/pre-load.ll?rev=90022&r1=90021&r2=90022&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/GVN/pre-load.ll (original)
+++ llvm/trunk/test/Transforms/GVN/pre-load.ll Fri Nov 27 16:50:07 2009
@@ -86,9 +86,9 @@
block2:
br label %block4
-; CHECK: block2:
-; CHECK: load i32*
-; CHECK: br label %block4
+; HECK: block2:
+; HECK: load i32*
+; HECK: br label %block4
block3:
%B = getelementptr i32* %q, i32 1
@@ -103,10 +103,10 @@
%P3 = getelementptr i32* %P2, i32 1
%PRE = load i32* %P3
ret i32 %PRE
-; CHECK: block4:
-; CHECK-NEXT: phi i32 [
-; CHECK-NOT: load
-; CHECK: ret i32
+; HECK: block4:
+; HECK-NEXT: phi i32 [
+; HECK-NOT: load
+; HECK: ret i32
}
;void test5(int N, double *G) {
@@ -239,12 +239,10 @@
ret void
}
-
-;;; --- todo
-
-;; Here the loaded address isn't available in 'block2' at all.
-define i32 @testX(i32* %p, i32* %q, i32** %Hack, i1 %C) {
-; CHECK: @testX
+;; Here the loaded address isn't available in 'block2' at all, requiring a new
+;; GEP to be inserted into it.
+define i32 @test8(i32* %p, i32* %q, i32** %Hack, i1 %C) {
+; CHECK: @test8
block1:
br i1 %C, label %block2, label %block3
More information about the llvm-commits
mailing list