[FaultMaps] Let the frontend pre-select implicit null check candidates.
[oota-llvm.git] / test / CodeGen / X86 / 2007-03-15-GEP-Idx-Sink.ll
index d829544c381e2e5e7f2406b6fb447151e1295811..f159bcdee134f3ee4a95b817c97e86c97232cc40 100644 (file)
@@ -1,8 +1,14 @@
-; RUN: llvm-as < %s | llc -march=x86 -mtriple=i686-darwin | \
-; RUN:   grep {addl \$12, %esp}
+; RUN: llc < %s -march=x86 -mtriple=i686-darwin | FileCheck %s
+; RUN: llc < %s -march=x86 -mtriple=i686-darwin -addr-sink-using-gep=1 | FileCheck %s
 
-define void @foo(i8** %buf, i32 %size, i32 %col, i8* %p) {
+define void @foo(i8** %buf, i32 %size, i32 %col, i8* %p) nounwind {
 entry:
+; CHECK-LABEL: @foo
+; CHECK: push
+; CHECK: push
+; CHECK: push
+; CHECK-NOT: push
+
        icmp sgt i32 %size, 0           ; <i1>:0 [#uses=1]
        br i1 %0, label %bb.preheader, label %return
 
@@ -19,50 +25,50 @@ bb.preheader:               ; preds = %entry
 bb:            ; preds = %bb, %bb.preheader
        %i.073.0 = phi i32 [ 0, %bb.preheader ], [ %indvar.next, %bb ]          ; <i32> [#uses=3]
        %p_addr.076.0.rec = mul i32 %i.073.0, 9         ; <i32> [#uses=9]
-       %p_addr.076.0 = getelementptr i8* %p, i32 %p_addr.076.0.rec             ; <i8*> [#uses=1]
-       %tmp2 = getelementptr i8** %buf, i32 %i.073.0           ; <i8**> [#uses=1]
-       %tmp3 = load i8** %tmp2         ; <i8*> [#uses=8]
-       %tmp5 = getelementptr i8* %tmp3, i32 %col               ; <i8*> [#uses=1]
-       %tmp7 = load i8* %p_addr.076.0          ; <i8> [#uses=1]
+       %p_addr.076.0 = getelementptr i8, i8* %p, i32 %p_addr.076.0.rec         ; <i8*> [#uses=1]
+       %tmp2 = getelementptr i8*, i8** %buf, i32 %i.073.0              ; <i8**> [#uses=1]
+       %tmp3 = load i8*, i8** %tmp2            ; <i8*> [#uses=8]
+       %tmp5 = getelementptr i8, i8* %tmp3, i32 %col           ; <i8*> [#uses=1]
+       %tmp7 = load i8, i8* %p_addr.076.0              ; <i8> [#uses=1]
        store i8 %tmp7, i8* %tmp5
        %p_addr.076.0.sum93 = add i32 %p_addr.076.0.rec, 1              ; <i32> [#uses=1]
-       %tmp11 = getelementptr i8* %p, i32 %p_addr.076.0.sum93          ; <i8*> [#uses=1]
-       %tmp13 = load i8* %tmp11                ; <i8> [#uses=1]
-       %tmp15 = getelementptr i8* %tmp3, i32 %tmp5.sum72               ; <i8*> [#uses=1]
+       %tmp11 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum93              ; <i8*> [#uses=1]
+       %tmp13 = load i8, i8* %tmp11            ; <i8> [#uses=1]
+       %tmp15 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum72           ; <i8*> [#uses=1]
        store i8 %tmp13, i8* %tmp15
        %p_addr.076.0.sum92 = add i32 %p_addr.076.0.rec, 2              ; <i32> [#uses=1]
-       %tmp17 = getelementptr i8* %p, i32 %p_addr.076.0.sum92          ; <i8*> [#uses=1]
-       %tmp19 = load i8* %tmp17                ; <i8> [#uses=1]
-       %tmp21 = getelementptr i8* %tmp3, i32 %tmp5.sum71               ; <i8*> [#uses=1]
+       %tmp17 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum92              ; <i8*> [#uses=1]
+       %tmp19 = load i8, i8* %tmp17            ; <i8> [#uses=1]
+       %tmp21 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum71           ; <i8*> [#uses=1]
        store i8 %tmp19, i8* %tmp21
        %p_addr.076.0.sum91 = add i32 %p_addr.076.0.rec, 3              ; <i32> [#uses=1]
-       %tmp23 = getelementptr i8* %p, i32 %p_addr.076.0.sum91          ; <i8*> [#uses=1]
-       %tmp25 = load i8* %tmp23                ; <i8> [#uses=1]
-       %tmp27 = getelementptr i8* %tmp3, i32 %tmp5.sum70               ; <i8*> [#uses=1]
+       %tmp23 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum91              ; <i8*> [#uses=1]
+       %tmp25 = load i8, i8* %tmp23            ; <i8> [#uses=1]
+       %tmp27 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum70           ; <i8*> [#uses=1]
        store i8 %tmp25, i8* %tmp27
        %p_addr.076.0.sum90 = add i32 %p_addr.076.0.rec, 4              ; <i32> [#uses=1]
-       %tmp29 = getelementptr i8* %p, i32 %p_addr.076.0.sum90          ; <i8*> [#uses=1]
-       %tmp31 = load i8* %tmp29                ; <i8> [#uses=1]
-       %tmp33 = getelementptr i8* %tmp3, i32 %tmp5.sum69               ; <i8*> [#uses=2]
+       %tmp29 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum90              ; <i8*> [#uses=1]
+       %tmp31 = load i8, i8* %tmp29            ; <i8> [#uses=1]
+       %tmp33 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum69           ; <i8*> [#uses=2]
        store i8 %tmp31, i8* %tmp33
        %p_addr.076.0.sum89 = add i32 %p_addr.076.0.rec, 5              ; <i32> [#uses=1]
-       %tmp35 = getelementptr i8* %p, i32 %p_addr.076.0.sum89          ; <i8*> [#uses=1]
-       %tmp37 = load i8* %tmp35                ; <i8> [#uses=1]
-       %tmp39 = getelementptr i8* %tmp3, i32 %tmp5.sum68               ; <i8*> [#uses=1]
+       %tmp35 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum89              ; <i8*> [#uses=1]
+       %tmp37 = load i8, i8* %tmp35            ; <i8> [#uses=1]
+       %tmp39 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum68           ; <i8*> [#uses=1]
        store i8 %tmp37, i8* %tmp39
        %p_addr.076.0.sum88 = add i32 %p_addr.076.0.rec, 6              ; <i32> [#uses=1]
-       %tmp41 = getelementptr i8* %p, i32 %p_addr.076.0.sum88          ; <i8*> [#uses=1]
-       %tmp43 = load i8* %tmp41                ; <i8> [#uses=1]
+       %tmp41 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum88              ; <i8*> [#uses=1]
+       %tmp43 = load i8, i8* %tmp41            ; <i8> [#uses=1]
        store i8 %tmp43, i8* %tmp33
        %p_addr.076.0.sum87 = add i32 %p_addr.076.0.rec, 7              ; <i32> [#uses=1]
-       %tmp47 = getelementptr i8* %p, i32 %p_addr.076.0.sum87          ; <i8*> [#uses=1]
-       %tmp49 = load i8* %tmp47                ; <i8> [#uses=1]
-       %tmp51 = getelementptr i8* %tmp3, i32 %tmp5.sum66               ; <i8*> [#uses=1]
+       %tmp47 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum87              ; <i8*> [#uses=1]
+       %tmp49 = load i8, i8* %tmp47            ; <i8> [#uses=1]
+       %tmp51 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum66           ; <i8*> [#uses=1]
        store i8 %tmp49, i8* %tmp51
        %p_addr.076.0.sum = add i32 %p_addr.076.0.rec, 8                ; <i32> [#uses=1]
-       %tmp53 = getelementptr i8* %p, i32 %p_addr.076.0.sum            ; <i8*> [#uses=1]
-       %tmp55 = load i8* %tmp53                ; <i8> [#uses=1]
-       %tmp57 = getelementptr i8* %tmp3, i32 %tmp5.sum         ; <i8*> [#uses=1]
+       %tmp53 = getelementptr i8, i8* %p, i32 %p_addr.076.0.sum                ; <i8*> [#uses=1]
+       %tmp55 = load i8, i8* %tmp53            ; <i8> [#uses=1]
+       %tmp57 = getelementptr i8, i8* %tmp3, i32 %tmp5.sum             ; <i8*> [#uses=1]
        store i8 %tmp55, i8* %tmp57
        %indvar.next = add i32 %i.073.0, 1              ; <i32> [#uses=2]
        icmp eq i32 %indvar.next, %size         ; <i1>:1 [#uses=1]