summaryrefslogtreecommitdiff
path: root/test/Analysis/BasicAA/phi-aa.ll
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-10-13 22:02:20 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-10-13 22:02:20 +0000
commit50a5914e129c348e8878d4654b4306e0349281c2 (patch)
tree4330d18731060b9066c18bbf7722eecdaeab419a /test/Analysis/BasicAA/phi-aa.ll
parent09fed25a07287d12ba74ec5f00b479fe1a9b56b7 (diff)
downloadllvm-50a5914e129c348e8878d4654b4306e0349281c2.tar.gz
llvm-50a5914e129c348e8878d4654b4306e0349281c2.tar.bz2
llvm-50a5914e129c348e8878d4654b4306e0349281c2.tar.xz
Teach basic AA about PHI nodes. If all operands of a phi NoAlias another value than it's safe to declare the PHI NoAlias the value. Ditto for MustAlias.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84038 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/BasicAA/phi-aa.ll')
-rw-r--r--test/Analysis/BasicAA/phi-aa.ll86
1 files changed, 86 insertions, 0 deletions
diff --git a/test/Analysis/BasicAA/phi-aa.ll b/test/Analysis/BasicAA/phi-aa.ll
new file mode 100644
index 0000000000..a3e89e963c
--- /dev/null
+++ b/test/Analysis/BasicAA/phi-aa.ll
@@ -0,0 +1,86 @@
+; RUN: opt < %s -basicaa -licm -S | FileCheck %s
+; rdar://7282591
+
+%struct.CFRuntimeBase = type { i32, [4 x i8] }
+%struct.XXXAffineTransform = type { float, float, float, float, float, float }
+%struct.XXXContext = type { %struct.CFRuntimeBase, i32, i32, i32, i8*, %struct.XXXContextDelegate*, void (%struct.XXXContext*)*, void (%struct.XXXContext*)*, %struct.XXXImage* (%struct.XXXContext*, %struct.XXXRect*, %struct.XXXImage*, i8*)*, i8*, %struct.__CFDictionary*, i32, %struct.XXXGState*, %struct.XXXGStack*, %struct.XXXRenderingState*, %struct.XXXAffineTransform, %struct.XXXPath*, %struct.__CFDictionary*, %struct.XXXPixelAccess* }
+%struct.XXXContextDelegate = type opaque
+%struct.XXXGStack = type opaque
+%struct.XXXGState = type opaque
+%struct.XXXImage = type opaque
+%struct.XXXPath = type opaque
+%struct.XXXPixelAccess = type opaque
+%struct.XXXPoint = type { float, float }
+%struct.XXXRect = type { %struct.XXXPoint, %struct.XXXPoint }
+%struct.XXXRenderingState = type opaque
+%struct.__CFDictionary = type opaque
+
+define void @t(%struct.XXXContext* %context, i16* %glyphs, %struct.XXXPoint* %advances, i32 %count) nounwind optsize ssp {
+; CHECK: @t
+; CHECK: bb21.preheader:
+; CHECK: %tmp28 = getelementptr
+; CHECK: %tmp28.promoted = load
+entry:
+ br i1 undef, label %bb1, label %bb
+
+bb: ; preds = %entry
+ br i1 undef, label %bb2, label %bb1
+
+bb1: ; preds = %bb, %entry
+ ret void
+
+bb2: ; preds = %bb
+ br i1 undef, label %bb35, label %bb7
+
+bb7: ; preds = %bb2
+ br i1 undef, label %bb35, label %bb10
+
+bb10: ; preds = %bb7
+ %tmp18 = alloca i8, i32 undef, align 1 ; <i8*> [#uses=1]
+ br i1 undef, label %bb35, label %bb15
+
+bb15: ; preds = %bb10
+ br i1 undef, label %bb17, label %bb16
+
+bb16: ; preds = %bb15
+ %tmp21 = bitcast i8* %tmp18 to %struct.XXXPoint* ; <%struct.XXXPoint*> [#uses=1]
+ br label %bb18
+
+bb17: ; preds = %bb15
+ %tmp22 = malloc %struct.XXXPoint, i32 %count ; <%struct.XXXPoint*> [#uses=1]
+ br label %bb18
+
+bb18: ; preds = %bb17, %bb16
+ %positions.0 = phi %struct.XXXPoint* [ %tmp21, %bb16 ], [ %tmp22, %bb17 ] ; <%struct.XXXPoint*> [#uses=1]
+ br i1 undef, label %bb35, label %bb20
+
+bb20: ; preds = %bb18
+ br i1 undef, label %bb21, label %bb25
+
+bb21: ; preds = %bb21, %bb20
+ %tmp28 = getelementptr inbounds %struct.XXXPoint* %positions.0, i32 undef, i32 0 ; <float*> [#uses=1]
+ store float undef, float* %tmp28, align 4
+ %elt22 = getelementptr inbounds %struct.XXXPoint* %advances, i32 undef, i32 1 ; <float*> [#uses=1]
+ %val23 = load float* %elt22 ; <float> [#uses=0]
+ br i1 undef, label %bb21, label %bb25
+
+bb25: ; preds = %bb21, %bb20
+ switch i32 undef, label %bb26 [
+ i32 4, label %bb27
+ i32 5, label %bb27
+ i32 6, label %bb27
+ i32 7, label %bb28
+ ]
+
+bb26: ; preds = %bb25
+ unreachable
+
+bb27: ; preds = %bb25, %bb25, %bb25
+ unreachable
+
+bb28: ; preds = %bb25
+ unreachable
+
+bb35: ; preds = %bb18, %bb10, %bb7, %bb2
+ ret void
+}