mirror of https://github.com/Cisco-Talos/clamav
parent
52a8d9f012
commit
3ae7d79401
@ -1,18 +0,0 @@ |
||||
; This testcase makes sure that size is taken to account when alias analysis |
||||
; is performed. It is not legal to delete the second load instruction because |
||||
; the value computed by the first load instruction is changed by the store. |
||||
|
||||
; RUN: opt < %s -gvn -instcombine -S | grep DONOTREMOVE |
||||
|
||||
define i32 @test() { |
||||
%A = alloca i32 |
||||
store i32 0, i32* %A |
||||
%X = load i32* %A |
||||
%B = bitcast i32* %A to i8* |
||||
%C = getelementptr i8* %B, i64 1 |
||||
store i8 1, i8* %C ; Aliases %A |
||||
%Y.DONOTREMOVE = load i32* %A |
||||
%Z = sub i32 %X, %Y.DONOTREMOVE |
||||
ret i32 %Z |
||||
} |
||||
|
@ -1,7 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null |
||||
; Test for a bug in BasicAA which caused a crash when querying equality of P1&P2 |
||||
define void @test({[2 x i32],[2 x i32]}* %A, i64 %X, i64 %Y) { |
||||
%P1 = getelementptr {[2 x i32],[2 x i32]}* %A, i64 0, i32 0, i64 %X |
||||
%P2 = getelementptr {[2 x i32],[2 x i32]}* %A, i64 0, i32 1, i64 %Y |
||||
ret void |
||||
} |
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -gvn -instcombine -S | grep sub |
||||
|
||||
; BasicAA was incorrectly concluding that P1 and P2 didn't conflict! |
||||
|
||||
define i32 @test(i32 *%Ptr, i64 %V) { |
||||
%P2 = getelementptr i32* %Ptr, i64 1 |
||||
%P1 = getelementptr i32* %Ptr, i64 %V |
||||
%X = load i32* %P1 |
||||
store i32 5, i32* %P2 |
||||
|
||||
%Y = load i32* %P1 |
||||
|
||||
%Z = sub i32 %X, %Y |
||||
ret i32 %Z |
||||
} |
@ -1,7 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null |
||||
; Test for a bug in BasicAA which caused a crash when querying equality of P1&P2 |
||||
define void @test([17 x i16]* %mask_bits) { |
||||
%P1 = getelementptr [17 x i16]* %mask_bits, i64 0, i64 0 |
||||
%P2 = getelementptr [17 x i16]* %mask_bits, i64 252645134, i64 0 |
||||
ret void |
||||
} |
@ -1,21 +0,0 @@ |
||||
; RUN: opt < %s -licm -disable-output |
||||
%struct..apr_array_header_t = type { i32*, i32, i32, i32, i8* } |
||||
%struct..apr_table_t = type { %struct..apr_array_header_t, i32, [32 x i32], [32 x i32] } |
||||
|
||||
define void @table_reindex(%struct..apr_table_t* %t.1) { ; No predecessors! |
||||
br label %loopentry |
||||
|
||||
loopentry: ; preds = %0, %no_exit |
||||
%tmp.101 = getelementptr %struct..apr_table_t* %t.1, i64 0, i32 0, i32 2 |
||||
%tmp.11 = load i32* %tmp.101 ; <i32> [#uses=0] |
||||
br i1 false, label %no_exit, label %UnifiedExitNode |
||||
|
||||
no_exit: ; preds = %loopentry |
||||
%tmp.25 = sext i32 0 to i64 ; <i64> [#uses=1] |
||||
%tmp.261 = getelementptr %struct..apr_table_t* %t.1, i64 0, i32 3, i64 %tmp.25 ; <i32*> [#uses=1] |
||||
store i32 0, i32* %tmp.261 |
||||
br label %loopentry |
||||
|
||||
UnifiedExitNode: ; preds = %loopentry |
||||
ret void |
||||
} |
@ -1,11 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null |
||||
|
||||
define i32 @MTConcat([3 x i32]* %a.1) { |
||||
%tmp.961 = getelementptr [3 x i32]* %a.1, i64 0, i64 4 |
||||
%tmp.97 = load i32* %tmp.961 |
||||
%tmp.119 = getelementptr [3 x i32]* %a.1, i64 1, i64 0 |
||||
%tmp.120 = load i32* %tmp.119 |
||||
%tmp.1541 = getelementptr [3 x i32]* %a.1, i64 0, i64 4 |
||||
%tmp.155 = load i32* %tmp.1541 |
||||
ret i32 0 |
||||
} |
@ -1,10 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null |
||||
|
||||
%struct..RefPoint = type { i32, { i32, i8, i8 } } |
||||
%struct..RefRect = type { %struct..RefPoint, %struct..RefPoint } |
||||
|
||||
define i32 @BMT_CommitPartDrawObj() { |
||||
%tmp.19111 = getelementptr %struct..RefRect* null, i64 0, i32 0, i32 1, i32 2 |
||||
%tmp.20311 = getelementptr %struct..RefRect* null, i64 0, i32 1, i32 1, i32 2 |
||||
ret i32 0 |
||||
} |
@ -1,12 +0,0 @@ |
||||
; In this test, a local alloca cannot alias an incoming argument. |
||||
|
||||
; RUN: opt < %s -gvn -instcombine -S | not grep sub |
||||
|
||||
define i32 @test(i32* %P) { |
||||
%X = alloca i32 |
||||
%V1 = load i32* %P |
||||
store i32 0, i32* %X |
||||
%V2 = load i32* %P |
||||
%Diff = sub i32 %V1, %V2 |
||||
ret i32 %Diff |
||||
} |
@ -1,16 +0,0 @@ |
||||
; This testcase consists of alias relations which should be completely |
||||
; resolvable by basicaa. |
||||
|
||||
; RUN: opt < %s -aa-eval -print-may-aliases -disable-output \ |
||||
; RUN: |& not grep May: |
||||
|
||||
%T = type { i32, [10 x i8] } |
||||
|
||||
define void @test(%T* %P) { |
||||
%A = getelementptr %T* %P, i64 0 |
||||
%B = getelementptr %T* %P, i64 0, i32 0 |
||||
%C = getelementptr %T* %P, i64 0, i32 1 |
||||
%D = getelementptr %T* %P, i64 0, i32 1, i64 0 |
||||
%E = getelementptr %T* %P, i64 0, i32 1, i64 5 |
||||
ret void |
||||
} |
@ -1,18 +0,0 @@ |
||||
; This testcase consists of alias relations which should be completely |
||||
; resolvable by basicaa, but require analysis of getelementptr constant exprs. |
||||
|
||||
; RUN: opt < %s -aa-eval -print-may-aliases -disable-output \ |
||||
; RUN: |& not grep May: |
||||
|
||||
%T = type { i32, [10 x i8] } |
||||
|
||||
@G = external global %T |
||||
|
||||
define void @test() { |
||||
%D = getelementptr %T* @G, i64 0, i32 0 |
||||
%E = getelementptr %T* @G, i64 0, i32 1, i64 5 |
||||
%F = getelementptr i32* getelementptr (%T* @G, i64 0, i32 0), i64 0 |
||||
%X = getelementptr [10 x i8]* getelementptr (%T* @G, i64 0, i32 1), i64 0, i64 5 |
||||
|
||||
ret void |
||||
} |
@ -1,10 +0,0 @@ |
||||
; RUN: opt < %s -dse -S | grep {store i32 0} |
||||
|
||||
define void @test({i32,i32 }* %P) { |
||||
%Q = getelementptr {i32,i32}* %P, i32 1 |
||||
%X = getelementptr {i32,i32}* %Q, i32 0, i32 1 |
||||
%Y = getelementptr {i32,i32}* %Q, i32 1, i32 1 |
||||
store i32 0, i32* %X |
||||
store i32 1, i32* %Y |
||||
ret void |
||||
} |
@ -1,22 +0,0 @@ |
||||
; RUN: opt < %s -licm |
||||
|
||||
%"java/lang/Object" = type { %struct.llvm_java_object_base } |
||||
%"java/lang/StringBuffer" = type { "java/lang/Object", i32, { "java/lang/Object", i32, [0 x i8] }*, i1 } |
||||
%struct.llvm_java_object_base = type opaque |
||||
|
||||
define void @"java/lang/StringBuffer/setLength(I)V"(%struct.llvm_java_object_base*) { |
||||
bc0: |
||||
br i1 false, label %bc40, label %bc65 |
||||
|
||||
bc65: ; preds = %bc0, %bc40 |
||||
ret void |
||||
|
||||
bc40: ; preds = %bc0, %bc40 |
||||
%tmp75 = bitcast %struct.llvm_java_object_base* %0 to %"java/lang/StringBuffer"* ; <"java/lang/StringBuffer"*> [#uses=1] |
||||
%tmp76 = getelementptr %"java/lang/StringBuffer"* %tmp75, i32 0, i32 1 ; <i32*> [#uses=1] |
||||
store i32 0, i32* %tmp76 |
||||
%tmp381 = bitcast %struct.llvm_java_object_base* %0 to %"java/lang/StringBuffer"* ; <"java/lang/StringBuffer"*> [#uses=1] |
||||
%tmp392 = getelementptr %"java/lang/StringBuffer"* %tmp381, i32 0, i32 1 ; <i32*> [#uses=1] |
||||
%tmp403 = load i32* %tmp392 ; <i32> [#uses=0] |
||||
br i1 false, label %bc40, label %bc65 |
||||
} |
@ -1,20 +0,0 @@ |
||||
; RUN: opt < %s -dse |
||||
|
||||
%"java/lang/Object" = type { %struct.llvm_java_object_base } |
||||
%"java/lang/StringBuffer" = type { "java/lang/Object", i32, { "java/lang/Object", i32, [0 x i8] }*, i1 } |
||||
%struct.llvm_java_object_base = type opaque |
||||
|
||||
define void @"java/lang/StringBuffer/ensureCapacity_unsynchronized(I)V"() { |
||||
bc0: |
||||
%tmp = getelementptr %"java/lang/StringBuffer"* null, i32 0, i32 3 ; <i1*> [#uses=1] |
||||
br i1 false, label %bc16, label %bc7 |
||||
|
||||
bc16: ; preds = %bc0 |
||||
%tmp91 = getelementptr %"java/lang/StringBuffer"* null, i32 0, i32 2 ; <{ "java/lang/Object", i32, [0 x i8] }**> [#uses=1] |
||||
store { %"java/lang/Object", i32, [0 x i8] }* null, { %"java/lang/Object", i32, [0 x i8] }** %tmp91 |
||||
store i1 false, i1* %tmp |
||||
ret void |
||||
|
||||
bc7: ; preds = %bc0 |
||||
ret void |
||||
} |
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -instcombine |\ |
||||
; RUN: llvm-dis | grep {load i32\\* %A} |
||||
|
||||
declare double* @useit(i32*) |
||||
|
||||
define i32 @foo(i32 %Amt) { |
||||
%A = malloc i32, i32 %Amt |
||||
%P = call double* @useit(i32* %A) |
||||
|
||||
%X = load i32* %A |
||||
store double 0.0, double* %P |
||||
%Y = load i32* %A |
||||
%Z = sub i32 %X, %Y |
||||
ret i32 %Z |
||||
} |
@ -1,31 +0,0 @@ |
||||
; RUN: opt < %s -aa-eval -disable-output |& grep {2 no alias respon} |
||||
; TEST that A[1][0] may alias A[0][i]. |
||||
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" |
||||
|
||||
define void @test(i32 %N) { |
||||
entry: |
||||
%X = alloca [3 x [3 x i32]] ; <[3 x [3 x i32]]*> [#uses=4] |
||||
%tmp.24 = icmp sgt i32 %N, 0 ; <i1> [#uses=1] |
||||
br i1 %tmp.24, label %no_exit, label %loopexit |
||||
|
||||
no_exit: ; preds = %no_exit, %entry |
||||
%i.0.0 = phi i32 [ 0, %entry ], [ %inc, %no_exit ] ; <i32> [#uses=2] |
||||
%tmp.6 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 0, i32 %i.0.0 ; <i32*> [#uses=1] |
||||
store i32 1, i32* %tmp.6 |
||||
%tmp.8 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 0, i32 0 ; <i32*> [#uses=1] |
||||
%tmp.9 = load i32* %tmp.8 ; <i32> [#uses=1] |
||||
%tmp.11 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 1, i32 0 ; <i32*> [#uses=1] |
||||
%tmp.12 = load i32* %tmp.11 ; <i32> [#uses=1] |
||||
%tmp.13 = add i32 %tmp.12, %tmp.9 ; <i32> [#uses=1] |
||||
%inc = add i32 %i.0.0, 1 ; <i32> [#uses=2] |
||||
%tmp.2 = icmp slt i32 %inc, %N ; <i1> [#uses=1] |
||||
br i1 %tmp.2, label %no_exit, label %loopexit |
||||
|
||||
loopexit: ; preds = %no_exit, %entry |
||||
%Y.0.1 = phi i32 [ 0, %entry ], [ %tmp.13, %no_exit ] ; <i32> [#uses=1] |
||||
%tmp.4 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 0 ; <[3 x i32]*> [#uses=1] |
||||
%tmp.15 = call i32 (...)* @foo( [3 x i32]* %tmp.4, i32 %Y.0.1 ) ; <i32> [#uses=0] |
||||
ret void |
||||
} |
||||
|
||||
declare i32 @foo(...) |
@ -1,48 +0,0 @@ |
||||
; RUN: opt < %s -licm -disable-output |
||||
target datalayout = "E-p:32:32" |
||||
target triple = "powerpc-apple-darwin8.7.0" |
||||
|
||||
define void @glgRunProcessor() { |
||||
entry: |
||||
br i1 false, label %bb2037.i, label %cond_true.i18 |
||||
|
||||
cond_true.i18: ; preds = %entry |
||||
ret void |
||||
|
||||
bb205.i: ; preds = %bb2037.i |
||||
switch i32 0, label %bb1013.i [ |
||||
i32 14, label %bb239.i |
||||
i32 15, label %bb917.i |
||||
] |
||||
|
||||
bb239.i: ; preds = %bb205.i |
||||
br i1 false, label %cond_false277.i, label %cond_true264.i |
||||
|
||||
cond_true264.i: ; preds = %bb239.i |
||||
ret void |
||||
|
||||
cond_false277.i: ; preds = %bb239.i |
||||
%tmp1062.i = getelementptr [2 x <4 x i32>]* null, i32 0, i32 1 ; <<4 x i32>*> [#uses=1] |
||||
store <4 x i32> zeroinitializer, <4 x i32>* %tmp1062.i |
||||
br i1 false, label %cond_true1032.i, label %cond_false1063.i85 |
||||
|
||||
bb917.i: ; preds = %bb205.i |
||||
ret void |
||||
|
||||
bb1013.i: ; preds = %bb205.i |
||||
ret void |
||||
|
||||
cond_true1032.i: ; preds = %cond_false277.i |
||||
%tmp1187.i = getelementptr [2 x <4 x i32>]* null, i32 0, i32 0, i32 7 ; <i32*> [#uses=1] |
||||
store i32 0, i32* %tmp1187.i |
||||
br label %bb2037.i |
||||
|
||||
cond_false1063.i85: ; preds = %cond_false277.i |
||||
ret void |
||||
|
||||
bb2037.i: ; preds = %cond_true1032.i, %entry |
||||
br i1 false, label %bb205.i, label %cond_next2042.i |
||||
|
||||
cond_next2042.i: ; preds = %bb2037.i |
||||
ret void |
||||
} |
@ -1,35 +0,0 @@ |
||||
; PR1109 |
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | \ |
||||
; RUN: grep {sub i32} |
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | \ |
||||
; RUN: not grep {ret i32 0} |
||||
; END. |
||||
|
||||
target datalayout = "e-p:32:32" |
||||
target triple = "i686-apple-darwin8" |
||||
%struct.CONSTRAINT = type { i32, i32, i32, i32 } |
||||
%struct.FILE_POS = type { i8, i8, i16, i32 } |
||||
%struct.FIRST_UNION = type { %struct.FILE_POS } |
||||
%struct.FOURTH_UNION = type { %struct.CONSTRAINT } |
||||
%struct.GAP = type { i8, i8, i16 } |
||||
%struct.LIST = type { %struct.rec*, %struct.rec* } |
||||
%struct.SECOND_UNION = type { { i16, i8, i8 } } |
||||
%struct.STYLE = type { { %struct.GAP }, { %struct.GAP }, i16, i16, i16, i8, i8 } |
||||
%struct.THIRD_UNION = type { { [2 x i32], [2 x i32] } } |
||||
%struct.closure_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, { %struct.rec* } } |
||||
%struct.head_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, { %struct.rec* }, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, i32 } |
||||
%struct.rec = type { %struct.head_type } |
||||
|
||||
|
||||
define i32 @test(%struct.closure_type* %tmp18169) { |
||||
%tmp18174 = getelementptr %struct.closure_type* %tmp18169, i32 0, i32 4, i32 0, i32 0 ; <i32*> [#uses=2] |
||||
%tmp18269 = bitcast i32* %tmp18174 to %struct.STYLE* ; <%struct.STYLE*> [#uses=1] |
||||
%A = load i32* %tmp18174 ; <i32> [#uses=1] |
||||
|
||||
%tmp18272 = getelementptr %struct.STYLE* %tmp18269, i32 0, i32 0, i32 0, i32 2 ; <i16*> [#uses=1] |
||||
store i16 123, i16* %tmp18272 |
||||
|
||||
%Q = load i32* %tmp18174 ; <i32> [#uses=1] |
||||
%Z = sub i32 %A, %Q ; <i32> [#uses=1] |
||||
ret i32 %Z |
||||
} |
@ -1,10 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {MayAlias:.*i32\\* %., i32\\* %.} | grep {%x} | grep {%y} |
||||
|
||||
declare i32* @unclear(i32* %a) |
||||
|
||||
define void @foo(i32* noalias %x) { |
||||
%y = call i32* @unclear(i32* %x) |
||||
store i32 0, i32* %x |
||||
store i32 0, i32* %y |
||||
ret void |
||||
} |
@ -1,17 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {9 no alias} |
||||
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {6 may alias} |
||||
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {MayAlias:.*i32\\* %Ipointer, i32\\* %Jpointer} |
||||
|
||||
define void @foo(i32* noalias %p, i32* noalias %q, i32 %i, i32 %j) { |
||||
%Ipointer = getelementptr i32* %p, i32 %i |
||||
%qi = getelementptr i32* %q, i32 %i |
||||
%Jpointer = getelementptr i32* %p, i32 %j |
||||
%qj = getelementptr i32* %q, i32 %j |
||||
store i32 0, i32* %p |
||||
store i32 0, i32* %Ipointer |
||||
store i32 0, i32* %Jpointer |
||||
store i32 0, i32* %q |
||||
store i32 0, i32* %qi |
||||
store i32 0, i32* %qj |
||||
ret void |
||||
} |
@ -1,17 +0,0 @@ |
||||
; PR1600 |
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | \ |
||||
; RUN: grep {ret i32 0} |
||||
; END. |
||||
|
||||
declare i16 @llvm.cttz.i16(i16) |
||||
|
||||
define i32 @test(i32* %P, i16* %Q) { |
||||
%A = load i16* %Q ; <i16> [#uses=1] |
||||
%x = load i32* %P ; <i32> [#uses=1] |
||||
%B = call i16 @llvm.cttz.i16( i16 %A ) ; <i16> [#uses=1] |
||||
%y = load i32* %P ; <i32> [#uses=1] |
||||
store i16 %B, i16* %Q |
||||
%z = sub i32 %x, %y ; <i32> [#uses=1] |
||||
ret i32 %z |
||||
} |
||||
|
@ -1,14 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -dce -S | grep tmp7 |
||||
|
||||
%struct.A = type { i32 } |
||||
%struct.B = type { %struct.A } |
||||
@a = global %struct.B zeroinitializer ; <%struct.B*> [#uses=2] |
||||
|
||||
define i32 @_Z3fooP1A(%struct.A* %b) { |
||||
entry: |
||||
store i32 1, i32* getelementptr (%struct.B* @a, i32 0, i32 0, i32 0), align 8 |
||||
%tmp4 = getelementptr %struct.A* %b, i32 0, i32 0 ;<i32*> [#uses=1] |
||||
store i32 0, i32* %tmp4, align 4 |
||||
%tmp7 = load i32* getelementptr (%struct.B* @a, i32 0, i32 0, i32 0), align 8 ; <i32> [#uses=1] |
||||
ret i32 %tmp7 |
||||
} |
@ -1,34 +0,0 @@ |
||||
; RUN: opt < %s -gvn -disable-output |
||||
; PR1774 |
||||
|
||||
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" |
||||
target triple = "x86_64-unknown-linux-gnu" |
||||
%struct.device = type { [20 x i8] } |
||||
%struct.pci_device_id = type { i32, i32, i32, i32, i32, i32, i64 } |
||||
%struct.usb_bus = type { %struct.device* } |
||||
%struct.usb_hcd = type { %struct.usb_bus, i64, [0 x i64] } |
||||
@uhci_pci_ids = external constant [1 x %struct.pci_device_id] ; <[1 x %struct.pci_device_id]*> [#uses=1] |
||||
|
||||
@__mod_pci_device_table = alias [1 x %struct.pci_device_id]* @uhci_pci_ids |
||||
; <[1 x %struct.pci_device_id]*> [#uses=0] |
||||
|
||||
define i32 @uhci_suspend(%struct.usb_hcd* %hcd) { |
||||
entry: |
||||
%tmp17 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 2, i64 1 |
||||
; <i64*> [#uses=1] |
||||
%tmp1718 = bitcast i64* %tmp17 to i32* ; <i32*> [#uses=1] |
||||
%tmp19 = load i32* %tmp1718, align 4 ; <i32> [#uses=0] |
||||
br i1 false, label %cond_true34, label %done_okay |
||||
|
||||
cond_true34: ; preds = %entry |
||||
%tmp631 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 2, i64 |
||||
2305843009213693950 ; <i64*> [#uses=1] |
||||
%tmp70 = bitcast i64* %tmp631 to %struct.device** |
||||
|
||||
%tmp71 = load %struct.device** %tmp70, align 8 |
||||
|
||||
ret i32 undef |
||||
|
||||
done_okay: ; preds = %entry |
||||
ret i32 undef |
||||
} |
@ -1,31 +0,0 @@ |
||||
; RUN: opt < %s -gvn -disable-output |
||||
; PR1782 |
||||
|
||||
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" |
||||
target triple = "x86_64-unknown-linux-gnu" |
||||
%struct.device = type { [20 x i8] } |
||||
%struct.pci_device_id = type { i32, i32, i32, i32, i32, i32, i64 } |
||||
%struct.usb_bus = type { %struct.device* } |
||||
%struct.usb_hcd = type { %struct.usb_bus, [0 x i64] } |
||||
@pci_ids = external constant [1 x %struct.pci_device_id] ; <[1 x %struct.pci_device_id]*> [#uses=1] |
||||
|
||||
@__mod_pci_device_table = alias [1 x %struct.pci_device_id]* @pci_ids ; <[1 x %struct.pci_device_id]*> [#uses=0] |
||||
|
||||
define i32 @ehci_pci_setup(%struct.usb_hcd* %hcd) { |
||||
entry: |
||||
%tmp14 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 0, i32 0 ; <%struct.device**> [#uses=1] |
||||
%tmp15 = load %struct.device** %tmp14, align 8 ; <%struct.device*> [#uses=0] |
||||
br i1 false, label %bb25, label %return |
||||
|
||||
bb25: ; preds = %entry |
||||
br i1 false, label %cond_true, label %return |
||||
|
||||
cond_true: ; preds = %bb25 |
||||
%tmp601 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 1, i64 2305843009213693951 ; <i64*> [#uses=1] |
||||
%tmp67 = bitcast i64* %tmp601 to %struct.device** ; <%struct.device**> [#uses=1] |
||||
%tmp68 = load %struct.device** %tmp67, align 8 ; <%struct.device*> [#uses=0] |
||||
ret i32 undef |
||||
|
||||
return: ; preds = %bb25, %entry |
||||
ret i32 undef |
||||
} |
@ -1,18 +0,0 @@ |
||||
; RUN: opt < %s -std-compile-opts -S | grep store |
||||
; ModuleID = 'small2.c' |
||||
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 = "i386-apple-darwin8" |
||||
%struct.x = type { [4 x i32] } |
||||
|
||||
define void @foo(%struct.x* byval align 4 %X) nounwind { |
||||
entry: |
||||
%tmp = getelementptr %struct.x* %X, i32 0, i32 0 ; <[4 x i32]*> [#uses=1] |
||||
%tmp1 = getelementptr [4 x i32]* %tmp, i32 0, i32 3 ; <i32*> [#uses=1] |
||||
store i32 2, i32* %tmp1, align 4 |
||||
%tmp2 = call i32 (...)* @bar( %struct.x* byval align 4 %X ) nounwind ; <i32> [#uses=0] |
||||
br label %return |
||||
return: ; preds = %entry |
||||
ret void |
||||
} |
||||
|
||||
declare i32 @bar(...) |
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -gvn -disable-output |
||||
; PR2395 |
||||
|
||||
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:32:32" |
||||
target triple = "i686-pc-linux-gnu" |
||||
%struct.S291 = type <{ %union.anon, i32 }> |
||||
%union.anon = type { } |
||||
@a291 = external global [5 x %struct.S291] ; <[5 x %struct.S291]*> [#uses=2] |
||||
|
||||
define void @test291() nounwind { |
||||
entry: |
||||
store i32 1138410269, i32* getelementptr ([5 x %struct.S291]* @a291, i32 0, i32 2, i32 1) |
||||
%tmp54 = load i32* bitcast (%struct.S291* getelementptr ([5 x %struct.S291]* @a291, i32 0, i32 2) to i32*), align 4 ; <i32> [#uses=0] |
||||
unreachable |
||||
} |
@ -1,12 +0,0 @@ |
||||
; RUN: opt < %s -aa-eval |& grep {1 no alias response} |
||||
|
||||
declare noalias i32* @_Znwj(i32 %x) nounwind |
||||
|
||||
define i32 @foo() { |
||||
%A = call i32* @_Znwj(i32 4) |
||||
%B = call i32* @_Znwj(i32 4) |
||||
store i32 1, i32* %A |
||||
store i32 2, i32* %B |
||||
%C = load i32* %A |
||||
ret i32 %C |
||||
} |
@ -1,13 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -S | grep load |
||||
|
||||
declare noalias i32* @noalias() |
||||
|
||||
define i32 @test(i32 %x) { |
||||
%a = call i32* @noalias() |
||||
store i32 1, i32* %a |
||||
%b = getelementptr i32* %a, i32 %x |
||||
store i32 2, i32* %b |
||||
|
||||
%c = load i32* %a |
||||
ret i32 %c |
||||
} |
@ -1,17 +0,0 @@ |
||||
; RUN: opt -gvn -instcombine -S < %s | FileCheck %s |
||||
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" |
||||
|
||||
declare i8 @llvm.atomic.load.add.i8.p0i8(i8*, i8) |
||||
|
||||
define i8 @foo(i8* %ptr) { |
||||
%P = getelementptr i8* %ptr, i32 0 |
||||
%Q = getelementptr i8* %ptr, i32 1 |
||||
; CHECK: getelementptr |
||||
%X = load i8* %P |
||||
%Y = call i8 @llvm.atomic.load.add.i8.p0i8(i8* %Q, i8 1) |
||||
%Z = load i8* %P |
||||
; CHECK-NOT: = load |
||||
%A = sub i8 %X, %Z |
||||
ret i8 %A |
||||
; CHECK: ret i8 0 |
||||
} |
@ -1,30 +0,0 @@ |
||||
; RUN: opt < %s -aa-eval -print-all-alias-modref-info -disable-output |& grep {NoAlias:.*%P,.*@Z} |
||||
; If GEP base doesn't alias Z, then GEP doesn't alias Z. |
||||
; rdar://7282591 |
||||
|
||||
@Y = common global i32 0 |
||||
@Z = common global i32 0 |
||||
|
||||
define void @foo(i32 %cond) nounwind ssp { |
||||
entry: |
||||
%a = alloca i32 |
||||
%tmp = icmp ne i32 %cond, 0 |
||||
br i1 %tmp, label %bb, label %bb1 |
||||
|
||||
bb: |
||||
%b = getelementptr i32* %a, i32 0 |
||||
br label %bb2 |
||||
|
||||
bb1: |
||||
br label %bb2 |
||||
|
||||
bb2: |
||||
%P = phi i32* [ %b, %bb ], [ @Y, %bb1 ] |
||||
%tmp1 = load i32* @Z, align 4 |
||||
store i32 123, i32* %P, align 4 |
||||
%tmp2 = load i32* @Z, align 4 |
||||
br label %return |
||||
|
||||
return: |
||||
ret void |
||||
} |
@ -1,18 +0,0 @@ |
||||
; RUN: opt < %s -gvn -S | grep {ret i32 1} |
||||
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-apple-darwin8" |
||||
%struct.x = type { i32, i32, i32, i32 } |
||||
@g = weak global i32 0 ; <i32*> [#uses=1] |
||||
|
||||
define i32 @foo(%struct.x* byval %a) nounwind { |
||||
entry: |
||||
%tmp1 = tail call i32 (...)* @bar( %struct.x* %a ) nounwind ; <i32> [#uses=0] |
||||
%tmp2 = getelementptr %struct.x* %a, i32 0, i32 0 ; <i32*> [#uses=2] |
||||
store i32 1, i32* %tmp2, align 4 |
||||
store i32 2, i32* @g, align 4 |
||||
%tmp4 = load i32* %tmp2, align 4 ; <i32> [#uses=1] |
||||
ret i32 %tmp4 |
||||
} |
||||
|
||||
declare i32 @bar(...) |
||||
|
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | grep {ret i32 0} |
||||
|
||||
@flag0 = internal global i32 zeroinitializer |
||||
@turn = internal global i32 zeroinitializer |
||||
|
||||
|
||||
define i32 @main() { |
||||
%a = load i32* @flag0 |
||||
%b = tail call i32 @llvm.atomic.swap.i32.p0i32(i32* @turn, i32 1) |
||||
%c = load i32* @flag0 |
||||
%d = sub i32 %a, %c |
||||
ret i32 %d |
||||
} |
||||
|
||||
declare i32 @llvm.atomic.swap.i32.p0i32(i32*, i32) nounwind |
@ -1,27 +0,0 @@ |
||||
; RUN: opt < %s -aa-eval -print-all-alias-modref-info \ |
||||
; RUN: |& grep {MayAlias: double\\* \[%\]p.0.i.0, double\\* \[%\]p3\$} |
||||
; PR4267 |
||||
|
||||
; %p3 is equal to %p.0.i.0 on the second iteration of the loop, |
||||
; so MayAlias is needed. |
||||
|
||||
define void @foo([3 x [3 x double]]* noalias %p) { |
||||
entry: |
||||
%p3 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 0, i64 3 |
||||
br label %loop |
||||
|
||||
loop: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %loop ] |
||||
|
||||
%p.0.i.0 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 %i, i64 0 |
||||
|
||||
volatile store double 0.0, double* %p3 |
||||
volatile store double 0.1, double* %p.0.i.0 |
||||
|
||||
%i.next = add i64 %i, 1 |
||||
%cmp = icmp slt i64 %i.next, 3 |
||||
br i1 %cmp, label %loop, label %exit |
||||
|
||||
exit: |
||||
ret void |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,83 +0,0 @@ |
||||
; This testcase tests for various features the basicaa test should be able to |
||||
; determine, as noted in the comments. |
||||
|
||||
; RUN: opt < %s -basicaa -gvn -instcombine -dce -S | not grep REMOVE |
||||
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" |
||||
|
||||
@Global = external global { i32 } |
||||
|
||||
; Array test: Test that operations on one local array do not invalidate |
||||
; operations on another array. Important for scientific codes. |
||||
; |
||||
define i32 @different_array_test(i64 %A, i64 %B) { |
||||
%Array1 = alloca i32, i32 100 |
||||
%Array2 = alloca i32, i32 200 |
||||
|
||||
%pointer = getelementptr i32* %Array1, i64 %A |
||||
%val = load i32* %pointer |
||||
|
||||
%pointer2 = getelementptr i32* %Array2, i64 %B |
||||
store i32 7, i32* %pointer2 |
||||
|
||||
%REMOVE = load i32* %pointer ; redundant with above load |
||||
%retval = sub i32 %REMOVE, %val |
||||
ret i32 %retval |
||||
} |
||||
|
||||
; Constant index test: Constant indexes into the same array should not |
||||
; interfere with each other. Again, important for scientific codes. |
||||
; |
||||
define i32 @constant_array_index_test() { |
||||
%Array = alloca i32, i32 100 |
||||
%P1 = getelementptr i32* %Array, i64 7 |
||||
%P2 = getelementptr i32* %Array, i64 6 |
||||
|
||||
%A = load i32* %P1 |
||||
store i32 1, i32* %P2 ; Should not invalidate load |
||||
%BREMOVE = load i32* %P1 |
||||
%Val = sub i32 %A, %BREMOVE |
||||
ret i32 %Val |
||||
} |
||||
|
||||
; Test that if two pointers are spaced out by a constant getelementptr, that |
||||
; they cannot alias. |
||||
define i32 @gep_distance_test(i32* %A) { |
||||
%REMOVEu = load i32* %A |
||||
%B = getelementptr i32* %A, i64 2 ; Cannot alias A |
||||
store i32 7, i32* %B |
||||
%REMOVEv = load i32* %A |
||||
%r = sub i32 %REMOVEu, %REMOVEv |
||||
ret i32 %r |
||||
} |
||||
|
||||
; Test that if two pointers are spaced out by a constant offset, that they |
||||
; cannot alias, even if there is a variable offset between them... |
||||
define i32 @gep_distance_test2({i32,i32}* %A, i64 %distance) { |
||||
%A1 = getelementptr {i32,i32}* %A, i64 0, i32 0 |
||||
%REMOVEu = load i32* %A1 |
||||
%B = getelementptr {i32,i32}* %A, i64 %distance, i32 1 |
||||
store i32 7, i32* %B ; B cannot alias A, it's at least 4 bytes away |
||||
%REMOVEv = load i32* %A1 |
||||
%r = sub i32 %REMOVEu, %REMOVEv |
||||
ret i32 %r |
||||
} |
||||
|
||||
; Test that we can do funny pointer things and that distance calc will still |
||||
; work. |
||||
define i32 @gep_distance_test3(i32 * %A) { |
||||
%X = load i32* %A |
||||
%B = bitcast i32* %A to i8* |
||||
%C = getelementptr i8* %B, i64 4 |
||||
%Y = load i8* %C |
||||
ret i32 8 |
||||
} |
||||
|
||||
; Test that we can disambiguate globals reached through constantexpr geps |
||||
define i32 @constexpr_test() { |
||||
%X = alloca i32 |
||||
%Y = load i32* %X |
||||
store i32 5, i32* getelementptr ({ i32 }* @Global, i64 0, i32 0) |
||||
%REMOVE = load i32* %X |
||||
%retval = sub i32 %Y, %REMOVE |
||||
ret i32 %retval |
||||
} |
@ -1,46 +0,0 @@ |
||||
; Test that GCSE uses basicaa to do alias analysis, which is capable of |
||||
; disambiguating some obvious cases. All loads should be removable in |
||||
; this testcase. |
||||
|
||||
; RUN: opt < %s -basicaa -gvn -instcombine -dce -S \ |
||||
; RUN: | not grep load |
||||
|
||||
@A = global i32 7 |
||||
@B = global i32 8 |
||||
|
||||
define i32 @test() { |
||||
%A1 = load i32* @A |
||||
|
||||
store i32 123, i32* @B ; Store cannot alias @A |
||||
|
||||
%A2 = load i32* @A |
||||
%X = sub i32 %A1, %A2 |
||||
ret i32 %X |
||||
} |
||||
|
||||
define i32 @test2() { |
||||
%A1 = load i32* @A |
||||
br label %Loop |
||||
Loop: |
||||
%AP = phi i32 [0, %0], [%X, %Loop] |
||||
store i32 %AP, i32* @B ; Store cannot alias @A |
||||
|
||||
%A2 = load i32* @A |
||||
%X = sub i32 %A1, %A2 |
||||
%c = icmp eq i32 %X, 0 |
||||
br i1 %c, label %out, label %Loop |
||||
|
||||
out: |
||||
ret i32 %X |
||||
} |
||||
|
||||
declare void @external() |
||||
|
||||
define i32 @test3() { |
||||
%X = alloca i32 |
||||
store i32 7, i32* %X |
||||
call void @external() |
||||
%V = load i32* %X |
||||
ret i32 %V |
||||
} |
||||
|
@ -1,171 +0,0 @@ |
||||
; RUN: opt < %s -gvn -instcombine -S |& FileCheck %s |
||||
|
||||
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" |
||||
|
||||
; Make sure that basicaa thinks R and r are must aliases. |
||||
define i32 @test1(i8 * %P) { |
||||
entry: |
||||
%Q = bitcast i8* %P to {i32, i32}* |
||||
%R = getelementptr {i32, i32}* %Q, i32 0, i32 1 |
||||
%S = load i32* %R |
||||
|
||||
%q = bitcast i8* %P to {i32, i32}* |
||||
%r = getelementptr {i32, i32}* %q, i32 0, i32 1 |
||||
%s = load i32* %r |
||||
|
||||
%t = sub i32 %S, %s |
||||
ret i32 %t |
||||
; CHECK: @test1 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
define i32 @test2(i8 * %P) { |
||||
entry: |
||||
%Q = bitcast i8* %P to {i32, i32, i32}* |
||||
%R = getelementptr {i32, i32, i32}* %Q, i32 0, i32 1 |
||||
%S = load i32* %R |
||||
|
||||
%r = getelementptr {i32, i32, i32}* %Q, i32 0, i32 2 |
||||
store i32 42, i32* %r |
||||
|
||||
%s = load i32* %R |
||||
|
||||
%t = sub i32 %S, %s |
||||
ret i32 %t |
||||
; CHECK: @test2 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
|
||||
; This was a miscompilation. |
||||
define i32 @test3({float, {i32, i32, i32}}* %P) { |
||||
entry: |
||||
%P2 = getelementptr {float, {i32, i32, i32}}* %P, i32 0, i32 1 |
||||
%R = getelementptr {i32, i32, i32}* %P2, i32 0, i32 1 |
||||
%S = load i32* %R |
||||
|
||||
%r = getelementptr {i32, i32, i32}* %P2, i32 0, i32 2 |
||||
store i32 42, i32* %r |
||||
|
||||
%s = load i32* %R |
||||
|
||||
%t = sub i32 %S, %s |
||||
ret i32 %t |
||||
; CHECK: @test3 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
|
||||
;; This is reduced from the SmallPtrSet constructor. |
||||
%SmallPtrSetImpl = type { i8**, i32, i32, i32, [1 x i8*] } |
||||
%SmallPtrSet64 = type { %SmallPtrSetImpl, [64 x i8*] } |
||||
|
||||
define i32 @test4(%SmallPtrSet64* %P) { |
||||
entry: |
||||
%tmp2 = getelementptr inbounds %SmallPtrSet64* %P, i64 0, i32 0, i32 1 |
||||
store i32 64, i32* %tmp2, align 8 |
||||
%tmp3 = getelementptr inbounds %SmallPtrSet64* %P, i64 0, i32 0, i32 4, i64 64 |
||||
store i8* null, i8** %tmp3, align 8 |
||||
%tmp4 = load i32* %tmp2, align 8 |
||||
ret i32 %tmp4 |
||||
; CHECK: @test4 |
||||
; CHECK: ret i32 64 |
||||
} |
||||
|
||||
; P[i] != p[i+1] |
||||
define i32 @test5(i32* %p, i64 %i) { |
||||
%pi = getelementptr i32* %p, i64 %i |
||||
%i.next = add i64 %i, 1 |
||||
%pi.next = getelementptr i32* %p, i64 %i.next |
||||
%x = load i32* %pi |
||||
store i32 42, i32* %pi.next |
||||
%y = load i32* %pi |
||||
%z = sub i32 %x, %y |
||||
ret i32 %z |
||||
; CHECK: @test5 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
; P[i] != p[(i*4)|1] |
||||
define i32 @test6(i32* %p, i64 %i1) { |
||||
%i = shl i64 %i1, 2 |
||||
%pi = getelementptr i32* %p, i64 %i |
||||
%i.next = or i64 %i, 1 |
||||
%pi.next = getelementptr i32* %p, i64 %i.next |
||||
%x = load i32* %pi |
||||
store i32 42, i32* %pi.next |
||||
%y = load i32* %pi |
||||
%z = sub i32 %x, %y |
||||
ret i32 %z |
||||
; CHECK: @test6 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
; P[1] != P[i*4] |
||||
define i32 @test7(i32* %p, i64 %i) { |
||||
%pi = getelementptr i32* %p, i64 1 |
||||
%i.next = shl i64 %i, 2 |
||||
%pi.next = getelementptr i32* %p, i64 %i.next |
||||
%x = load i32* %pi |
||||
store i32 42, i32* %pi.next |
||||
%y = load i32* %pi |
||||
%z = sub i32 %x, %y |
||||
ret i32 %z |
||||
; CHECK: @test7 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
; P[zext(i)] != p[zext(i+1)] |
||||
; PR1143 |
||||
define i32 @test8(i32* %p, i32 %i) { |
||||
%i1 = zext i32 %i to i64 |
||||
%pi = getelementptr i32* %p, i64 %i1 |
||||
%i.next = add i32 %i, 1 |
||||
%i.next2 = zext i32 %i.next to i64 |
||||
%pi.next = getelementptr i32* %p, i64 %i.next2 |
||||
%x = load i32* %pi |
||||
store i32 42, i32* %pi.next |
||||
%y = load i32* %pi |
||||
%z = sub i32 %x, %y |
||||
ret i32 %z |
||||
; CHECK: @test8 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
define i8 @test9([4 x i8] *%P, i32 %i, i32 %j) { |
||||
%i2 = shl i32 %i, 2 |
||||
%i3 = add i32 %i2, 1 |
||||
; P2 = P + 1 + 4*i |
||||
%P2 = getelementptr [4 x i8] *%P, i32 0, i32 %i3 |
||||
|
||||
%j2 = shl i32 %j, 2 |
||||
|
||||
; P4 = P + 4*j |
||||
%P4 = getelementptr [4 x i8]* %P, i32 0, i32 %j2 |
||||
|
||||
%x = load i8* %P2 |
||||
store i8 42, i8* %P4 |
||||
%y = load i8* %P2 |
||||
%z = sub i8 %x, %y |
||||
ret i8 %z |
||||
; CHECK: @test9 |
||||
; CHECK: ret i8 0 |
||||
} |
||||
|
||||
define i8 @test10([4 x i8] *%P, i32 %i) { |
||||
%i2 = shl i32 %i, 2 |
||||
%i3 = add i32 %i2, 4 |
||||
; P2 = P + 4 + 4*i |
||||
%P2 = getelementptr [4 x i8] *%P, i32 0, i32 %i3 |
||||
|
||||
; P4 = P + 4*i |
||||
%P4 = getelementptr [4 x i8]* %P, i32 0, i32 %i2 |
||||
|
||||
%x = load i8* %P2 |
||||
store i8 42, i8* %P4 |
||||
%y = load i8* %P2 |
||||
%z = sub i8 %x, %y |
||||
ret i8 %z |
||||
; CHECK: @test10 |
||||
; CHECK: ret i8 0 |
||||
} |
@ -1,16 +0,0 @@ |
||||
; A store or load cannot alias a global if the accessed amount is larger then |
||||
; the global. |
||||
|
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | not grep load |
||||
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" |
||||
|
||||
@B = global i16 8 ; <i16*> [#uses=2] |
||||
|
||||
define i16 @test(i32* %P) { |
||||
%X = load i16* @B ; <i16> [#uses=1] |
||||
store i32 7, i32* %P |
||||
%Y = load i16* @B ; <i16> [#uses=1] |
||||
%Z = sub i16 %Y, %X ; <i16> [#uses=1] |
||||
ret i16 %Z |
||||
} |
||||
|
@ -1,125 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -dse -S | FileCheck %s |
||||
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" |
||||
|
||||
declare void @llvm.memset.i32(i8*, i8, i32, i32) |
||||
declare void @llvm.memset.i8(i8*, i8, i8, i32) |
||||
declare void @llvm.memcpy.i8(i8*, i8*, i8, i32) |
||||
declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) |
||||
declare void @llvm.lifetime.end(i64, i8* nocapture) |
||||
|
||||
declare void @external(i32*) |
||||
|
||||
define i32 @test0(i8* %P) { |
||||
%A = alloca i32 |
||||
call void @external(i32* %A) |
||||
|
||||
store i32 0, i32* %A |
||||
|
||||
call void @llvm.memset.i32(i8* %P, i8 0, i32 42, i32 1) |
||||
|
||||
%B = load i32* %A |
||||
ret i32 %B |
||||
|
||||
; CHECK: @test0 |
||||
; CHECK: ret i32 0 |
||||
} |
||||
|
||||
declare void @llvm.memcpy.i8(i8*, i8*, i8, i32) |
||||
|
||||
define i8 @test1() { |
||||
; CHECK: @test1 |
||||
%A = alloca i8 |
||||
%B = alloca i8 |
||||
|
||||
store i8 2, i8* %B ;; Not written to by memcpy |
||||
|
||||
call void @llvm.memcpy.i8(i8* %A, i8* %B, i8 -1, i32 0) |
||||
|
||||
%C = load i8* %B |
||||
ret i8 %C |
||||
; CHECK: ret i8 2 |
||||
} |
||||
|
||||
define i8 @test2(i8* %P) { |
||||
; CHECK: @test2 |
||||
%P2 = getelementptr i8* %P, i32 127 |
||||
store i8 1, i8* %P2 ;; Not dead across memset |
||||
call void @llvm.memset.i8(i8* %P, i8 2, i8 127, i32 0) |
||||
%A = load i8* %P2 |
||||
ret i8 %A |
||||
; CHECK: ret i8 1 |
||||
} |
||||
|
||||
define i8 @test2a(i8* %P) { |
||||
; CHECK: @test2 |
||||
%P2 = getelementptr i8* %P, i32 126 |
||||
|
||||
;; FIXME: DSE isn't zapping this dead store. |
||||
store i8 1, i8* %P2 ;; Dead, clobbered by memset. |
||||
|
||||
call void @llvm.memset.i8(i8* %P, i8 2, i8 127, i32 0) |
||||
%A = load i8* %P2 |
||||
ret i8 %A |
||||
; CHECK-NOT: load |
||||
; CHECK: ret i8 2 |
||||
} |
||||
|
||||
define void @test3(i8* %P, i8 %X) { |
||||
; CHECK: @test3 |
||||
; CHECK-NOT: store |
||||
; CHECK-NOT: %Y |
||||
%Y = add i8 %X, 1 ;; Dead, because the only use (the store) is dead. |
||||
|
||||
%P2 = getelementptr i8* %P, i32 2 |
||||
store i8 %Y, i8* %P2 ;; Not read by lifetime.end, should be removed. |
||||
; CHECK: store i8 2, i8* %P2 |
||||
call void @llvm.lifetime.end(i64 1, i8* %P) |
||||
store i8 2, i8* %P2 |
||||
; CHECK-NOT: store |
||||
ret void |
||||
; CHECK: ret void |
||||
} |
||||
|
||||
define void @test3a(i8* %P, i8 %X) { |
||||
; CHECK: @test3a |
||||
%Y = add i8 %X, 1 ;; Dead, because the only use (the store) is dead. |
||||
|
||||
%P2 = getelementptr i8* %P, i32 2 |
||||
store i8 %Y, i8* %P2 ;; FIXME: Killed by llvm.lifetime.end, should be zapped. |
||||
; CHECK: store i8 %Y, i8* %P2 |
||||
call void @llvm.lifetime.end(i64 10, i8* %P) |
||||
ret void |
||||
; CHECK: ret void |
||||
} |
||||
|
||||
@G1 = external global i32 |
||||
@G2 = external global [4000 x i32] |
||||
|
||||
define i32 @test4(i8* %P) { |
||||
%tmp = load i32* @G1 |
||||
call void @llvm.memset.i32(i8* bitcast ([4000 x i32]* @G2 to i8*), i8 0, i32 4000, i32 1) |
||||
%tmp2 = load i32* @G1 |
||||
%sub = sub i32 %tmp2, %tmp |
||||
ret i32 %sub |
||||
; CHECK: @test4 |
||||
; CHECK: load i32* @G |
||||
; CHECK: memset.i32 |
||||
; CHECK-NOT: load |
||||
; CHECK: sub i32 %tmp, %tmp |
||||
} |
||||
|
||||
; Verify that basicaa is handling variable length memcpy, knowing it doesn't |
||||
; write to G1. |
||||
define i32 @test5(i8* %P, i32 %Len) { |
||||
%tmp = load i32* @G1 |
||||
call void @llvm.memcpy.i32(i8* bitcast ([4000 x i32]* @G2 to i8*), i8* bitcast (i32* @G1 to i8*), i32 %Len, i32 1) |
||||
%tmp2 = load i32* @G1 |
||||
%sub = sub i32 %tmp2, %tmp |
||||
ret i32 %sub |
||||
; CHECK: @test5 |
||||
; CHECK: load i32* @G |
||||
; CHECK: memcpy.i32 |
||||
; CHECK-NOT: load |
||||
; CHECK: sub i32 %tmp, %tmp |
||||
} |
||||
|
@ -1,23 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | grep {ret i1 true} |
||||
; PR2436 |
||||
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 = "i386-apple-darwin8" |
||||
|
||||
define i1 @foo(i32 %i) nounwind { |
||||
entry: |
||||
%arr = alloca [10 x i8*] ; <[10 x i8*]*> [#uses=1] |
||||
%tmp2 = call i8* @getPtr( ) nounwind ; <i8*> [#uses=2] |
||||
%tmp4 = getelementptr [10 x i8*]* %arr, i32 0, i32 %i ; <i8**> [#uses=2] |
||||
store i8* %tmp2, i8** %tmp4, align 4 |
||||
%tmp10 = getelementptr i8* %tmp2, i32 10 ; <i8*> [#uses=1] |
||||
store i8 42, i8* %tmp10, align 1 |
||||
%tmp14 = load i8** %tmp4, align 4 ; <i8*> [#uses=1] |
||||
%tmp16 = getelementptr i8* %tmp14, i32 10 ; <i8*> [#uses=1] |
||||
%tmp17 = load i8* %tmp16, align 1 ; <i8> [#uses=1] |
||||
%tmp19 = icmp eq i8 %tmp17, 42 ; <i1> [#uses=1] |
||||
ret i1 %tmp19 |
||||
} |
||||
|
||||
declare i8* @getPtr() |
||||
|
||||
declare void @abort() noreturn nounwind |
@ -1,14 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -instcombine -S | grep {ret i32 0} |
||||
|
||||
declare i32* @test(i32* nocapture) |
||||
|
||||
define i32 @test2() { |
||||
%P = alloca i32 |
||||
%Q = call i32* @test(i32* %P) |
||||
%a = load i32* %P |
||||
store i32 4, i32* %Q ;; cannot clobber P since it is nocapture. |
||||
%b = load i32* %P |
||||
%c = sub i32 %a, %b |
||||
ret i32 %c |
||||
} |
||||
|
@ -1,29 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {NoAlias:.*%P,.*@Z} |
||||
; rdar://7282591 |
||||
|
||||
@X = common global i32 0 |
||||
@Y = common global i32 0 |
||||
@Z = common global i32 0 |
||||
|
||||
define void @foo(i32 %cond) nounwind ssp { |
||||
entry: |
||||
%"alloca point" = bitcast i32 0 to i32 |
||||
%tmp = icmp ne i32 %cond, 0 |
||||
br i1 %tmp, label %bb, label %bb1 |
||||
|
||||
bb: |
||||
br label %bb2 |
||||
|
||||
bb1: |
||||
br label %bb2 |
||||
|
||||
bb2: |
||||
%P = phi i32* [ @X, %bb ], [ @Y, %bb1 ] |
||||
%tmp1 = load i32* @Z, align 4 |
||||
store i32 123, i32* %P, align 4 |
||||
%tmp2 = load i32* @Z, align 4 |
||||
br label %return |
||||
|
||||
return: |
||||
ret void |
||||
} |
@ -1,73 +0,0 @@ |
||||
; RUN: opt < %s -aa-eval -print-all-alias-modref-info -disable-output \ |
||||
; RUN: |& grep {NoAlias: double\\* \[%\]a, double\\* \[%\]b\$} | count 4 |
||||
|
||||
; BasicAA should detect NoAliases in PHIs and Selects. |
||||
|
||||
; Two PHIs in the same block. |
||||
define void @foo(i1 %m, double* noalias %x, double* noalias %y) { |
||||
entry: |
||||
br i1 %m, label %true, label %false |
||||
|
||||
true: |
||||
br label %exit |
||||
|
||||
false: |
||||
br label %exit |
||||
|
||||
exit: |
||||
%a = phi double* [ %x, %true ], [ %y, %false ] |
||||
%b = phi double* [ %x, %false ], [ %y, %true ] |
||||
volatile store double 0.0, double* %a |
||||
volatile store double 1.0, double* %b |
||||
ret void |
||||
} |
||||
|
||||
; Two selects with the same condition. |
||||
define void @bar(i1 %m, double* noalias %x, double* noalias %y) { |
||||
entry: |
||||
%a = select i1 %m, double* %x, double* %y |
||||
%b = select i1 %m, double* %y, double* %x |
||||
volatile store double 0.000000e+00, double* %a |
||||
volatile store double 1.000000e+00, double* %b |
||||
ret void |
||||
} |
||||
|
||||
; Two PHIs with disjoint sets of inputs. |
||||
define void @qux(i1 %m, double* noalias %x, double* noalias %y, |
||||
i1 %n, double* noalias %v, double* noalias %w) { |
||||
entry: |
||||
br i1 %m, label %true, label %false |
||||
|
||||
true: |
||||
br label %exit |
||||
|
||||
false: |
||||
br label %exit |
||||
|
||||
exit: |
||||
%a = phi double* [ %x, %true ], [ %y, %false ] |
||||
br i1 %n, label %ntrue, label %nfalse |
||||
|
||||
ntrue: |
||||
br label %nexit |
||||
|
||||
nfalse: |
||||
br label %nexit |
||||
|
||||
nexit: |
||||
%b = phi double* [ %v, %ntrue ], [ %w, %nfalse ] |
||||
volatile store double 0.0, double* %a |
||||
volatile store double 1.0, double* %b |
||||
ret void |
||||
} |
||||
|
||||
; Two selects with disjoint sets of arms. |
||||
define void @fin(i1 %m, double* noalias %x, double* noalias %y, |
||||
i1 %n, double* noalias %v, double* noalias %w) { |
||||
entry: |
||||
%a = select i1 %m, double* %x, double* %y |
||||
%b = select i1 %n, double* %v, double* %w |
||||
volatile store double 0.000000e+00, double* %a |
||||
volatile store double 1.000000e+00, double* %b |
||||
ret void |
||||
} |
@ -1,33 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -S | grep TestConst | count 2 |
||||
; RUN: opt < %s -basicaa -gvn -S | grep TestPure | count 3 |
||||
; RUN: opt < %s -basicaa -gvn -S | grep TestNone | count 4 |
||||
@g = global i32 0 ; <i32*> [#uses=1] |
||||
|
||||
define i32 @test() { |
||||
entry: |
||||
%tmp0 = call i32 @TestConst( i32 5 ) readnone ; <i32> [#uses=1] |
||||
%tmp1 = call i32 @TestPure( i32 6 ) readonly ; <i32> [#uses=1] |
||||
%tmp2 = call i32 @TestNone( i32 7 ) ; <i32> [#uses=1] |
||||
store i32 1, i32* @g |
||||
%tmp3 = call i32 @TestConst( i32 5 ) readnone ; <i32> [#uses=1] |
||||
%tmp4 = call i32 @TestConst( i32 5 ) readnone ; <i32> [#uses=1] |
||||
%tmp5 = call i32 @TestPure( i32 6 ) readonly ; <i32> [#uses=1] |
||||
%tmp6 = call i32 @TestPure( i32 6 ) readonly ; <i32> [#uses=1] |
||||
%tmp7 = call i32 @TestNone( i32 7 ) ; <i32> [#uses=1] |
||||
%tmp8 = call i32 @TestNone( i32 7 ) ; <i32> [#uses=1] |
||||
%sum0 = add i32 %tmp0, %tmp1 ; <i32> [#uses=1] |
||||
%sum1 = add i32 %sum0, %tmp2 ; <i32> [#uses=1] |
||||
%sum2 = add i32 %sum1, %tmp3 ; <i32> [#uses=1] |
||||
%sum3 = add i32 %sum2, %tmp4 ; <i32> [#uses=1] |
||||
%sum4 = add i32 %sum3, %tmp5 ; <i32> [#uses=1] |
||||
%sum5 = add i32 %sum4, %tmp6 ; <i32> [#uses=1] |
||||
%sum6 = add i32 %sum5, %tmp7 ; <i32> [#uses=1] |
||||
%sum7 = add i32 %sum6, %tmp8 ; <i32> [#uses=1] |
||||
ret i32 %sum7 |
||||
} |
||||
|
||||
declare i32 @TestConst(i32) readnone |
||||
|
||||
declare i32 @TestPure(i32) readonly |
||||
|
||||
declare i32 @TestNone(i32) |
@ -1,54 +0,0 @@ |
||||
; Test that LICM uses basicaa to do alias analysis, which is capable of |
||||
; disambiguating some obvious cases. If LICM is able to disambiguate the |
||||
; two pointers, then the load should be hoisted, and the store sunk. |
||||
|
||||
; RUN: opt < %s -basicaa -licm -S | FileCheck %s |
||||
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" |
||||
|
||||
@A = global i32 7 ; <i32*> [#uses=3] |
||||
@B = global i32 8 ; <i32*> [#uses=2] |
||||
@C = global [2 x i32] [ i32 4, i32 8 ] ; <[2 x i32]*> [#uses=2] |
||||
|
||||
define i32 @test1(i1 %c) { |
||||
%Atmp = load i32* @A ; <i32> [#uses=2] |
||||
br label %Loop |
||||
|
||||
Loop: ; preds = %Loop, %0 |
||||
%ToRemove = load i32* @A ; <i32> [#uses=1] |
||||
store i32 %Atmp, i32* @B |
||||
br i1 %c, label %Out, label %Loop |
||||
|
||||
Out: ; preds = %Loop |
||||
%X = sub i32 %ToRemove, %Atmp ; <i32> [#uses=1] |
||||
ret i32 %X |
||||
|
||||
; The Loop block should be empty after the load/store are promoted. |
||||
; CHECK: @test1 |
||||
; CHECK: load i32* @B |
||||
; CHECK: Loop: |
||||
; CHECK-NEXT: br i1 %c, label %Out, label %Loop |
||||
; CHECK: Out: |
||||
; CHECK: store i32 %Atmp, i32* @B |
||||
} |
||||
|
||||
define i32 @test2(i1 %c) { |
||||
br label %Loop |
||||
|
||||
Loop: ; preds = %Loop, %0 |
||||
%AVal = load i32* @A ; <i32> [#uses=2] |
||||
%C0 = getelementptr [2 x i32]* @C, i64 0, i64 0 ; <i32*> [#uses=1] |
||||
store i32 %AVal, i32* %C0 |
||||
%BVal = load i32* @B ; <i32> [#uses=2] |
||||
%C1 = getelementptr [2 x i32]* @C, i64 0, i64 1 ; <i32*> [#uses=1] |
||||
store i32 %BVal, i32* %C1 |
||||
br i1 %c, label %Out, label %Loop |
||||
|
||||
Out: ; preds = %Loop |
||||
%X = sub i32 %AVal, %BVal ; <i32> [#uses=1] |
||||
ret i32 %X |
||||
; The Loop block should be empty after the load/store are promoted. |
||||
; CHECK: @test2 |
||||
; CHECK: Loop: |
||||
; CHECK-NEXT: br i1 %c, label %Out, label %Loop |
||||
} |
||||
|
@ -1,16 +0,0 @@ |
||||
; RUN: opt < %s -basicaa -gvn -instcombine |\ |
||||
; RUN: llvm-dis | grep {ret i32 0} |
||||
|
||||
declare void @foo(i32*) |
||||
|
||||
declare void @bar() |
||||
|
||||
define i32 @test() { |
||||
%A = alloca i32 ; <i32*> [#uses=3] |
||||
call void @foo( i32* %A ) |
||||
%X = load i32* %A ; <i32> [#uses=1] |
||||
tail call void @bar( ) |
||||
%Y = load i32* %A ; <i32> [#uses=1] |
||||
%Z = sub i32 %X, %Y ; <i32> [#uses=1] |
||||
ret i32 %Z |
||||
} |
@ -1,13 +0,0 @@ |
||||
; RUN: opt < %s -print-callgraph -disable-output |& \ |
||||
; RUN: grep {Calls function 'callee'} | count 2 |
||||
|
||||
define internal void @callee(...) { |
||||
entry: |
||||
unreachable |
||||
} |
||||
|
||||
define void @caller() { |
||||
entry: |
||||
call void (...)* @callee( void (...)* @callee ) |
||||
unreachable |
||||
} |
@ -1,8 +0,0 @@ |
||||
; RUN: opt < %s -print-callgraph -disable-output |& \ |
||||
; RUN: grep {Calls function} |
||||
|
||||
@a = global void ()* @f ; <void ()**> [#uses=0] |
||||
|
||||
define internal void @f() { |
||||
unreachable |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,20 +0,0 @@ |
||||
; RUN: opt < %s -domtree -break-crit-edges -analyze \ |
||||
; RUN: -domtree | grep {3.*%brtrue } |
||||
; PR932 |
||||
|
||||
declare void @use1(i32) |
||||
|
||||
define void @f(i32 %i, i1 %c) { |
||||
entry: |
||||
%A = icmp eq i32 %i, 0 ; <i1> [#uses=1] |
||||
br i1 %A, label %brtrue, label %brfalse |
||||
|
||||
brtrue: ; preds = %brtrue, %entry |
||||
%B = phi i1 [ true, %brtrue ], [ false, %entry ] ; <i1> [#uses=1] |
||||
call void @use1( i32 %i ) |
||||
br i1 %B, label %brtrue, label %brfalse |
||||
|
||||
brfalse: ; preds = %brtrue, %entry |
||||
call void @use1( i32 %i ) |
||||
ret void |
||||
} |
@ -1,187 +0,0 @@ |
||||
; RUN: opt < %s -domtree -break-crit-edges -domtree -disable-output |
||||
; PR1110 |
||||
|
||||
%struct.OggVorbis_File = type { i8*, i32, i64, i64, %struct.ogg_sync_state, i32, i64*, i64*, i32*, i64*, %struct.vorbis_info*, %struct.vorbis_comment*, i64, i32, i32, i32, double, double, %struct.ogg_stream_state, %struct.vorbis_dsp_state, %struct.vorbis_block, %struct.ov_callbacks } |
||||
%struct.alloc_chain = type { i8*, %struct.alloc_chain* } |
||||
%struct.ogg_stream_state = type { i8*, i32, i32, i32, i32*, i64*, i32, i32, i32, i32, [282 x i8], i32, i32, i32, i32, i32, i64, i64 } |
||||
%struct.ogg_sync_state = type { i8*, i32, i32, i32, i32, i32, i32 } |
||||
%struct.oggpack_buffer = type { i32, i32, i8*, i8*, i32 } |
||||
%struct.ov_callbacks = type { i32 (i8*, i32, i32, i8*)*, i32 (i8*, i64, i32)*, i32 (i8*)*, i32 (i8*)* } |
||||
%struct.vorbis_block = type { float**, %struct.oggpack_buffer, i32, i32, i32, i32, i32, i32, i64, i64, %struct.vorbis_dsp_state*, i8*, i32, i32, i32, %struct.alloc_chain*, i32, i32, i32, i32, i8* } |
||||
%struct.vorbis_comment = type { i8**, i32*, i32, i8* } |
||||
%struct.vorbis_dsp_state = type { i32, %struct.vorbis_info*, float**, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* } |
||||
%struct.vorbis_info = type { i32, i32, i32, i32, i32, i32, i32, i8* } |
||||
|
||||
|
||||
define void @ov_read() { |
||||
entry: |
||||
br i1 false, label %bb, label %return |
||||
|
||||
bb: ; preds = %cond_next22, %entry |
||||
br i1 false, label %cond_true8, label %cond_next15 |
||||
|
||||
cond_true8: ; preds = %bb |
||||
br i1 false, label %cond_next15, label %bb29 |
||||
|
||||
cond_next15: ; preds = %cond_true8, %bb |
||||
br i1 false, label %return, label %cond_next22 |
||||
|
||||
cond_next22: ; preds = %cond_next15 |
||||
br i1 false, label %bb, label %return |
||||
|
||||
bb29: ; preds = %cond_true8 |
||||
br i1 false, label %cond_true32, label %return |
||||
|
||||
cond_true32: ; preds = %bb29 |
||||
br i1 false, label %cond_false37.i, label %cond_true.i11 |
||||
|
||||
cond_true.i11: ; preds = %cond_true32 |
||||
br i1 false, label %cond_true8.i, label %ov_info.exit |
||||
|
||||
cond_true8.i: ; preds = %cond_true.i11 |
||||
br i1 false, label %cond_true44, label %cond_next48 |
||||
|
||||
cond_false37.i: ; preds = %cond_true32 |
||||
br label %ov_info.exit |
||||
|
||||
ov_info.exit: ; preds = %cond_false37.i, %cond_true.i11 |
||||
br i1 false, label %cond_true44, label %cond_next48 |
||||
|
||||
cond_true44: ; preds = %ov_info.exit, %cond_true8.i |
||||
br label %cond_next48 |
||||
|
||||
cond_next48: ; preds = %cond_true44, %ov_info.exit, %cond_true8.i |
||||
br i1 false, label %cond_next53, label %return |
||||
|
||||
cond_next53: ; preds = %cond_next48 |
||||
br i1 false, label %cond_true56, label %cond_false97 |
||||
|
||||
cond_true56: ; preds = %cond_next53 |
||||
br i1 false, label %bb85, label %cond_next304 |
||||
|
||||
bb63: ; preds = %bb85 |
||||
br i1 false, label %cond_next78, label %cond_false73 |
||||
|
||||
cond_false73: ; preds = %bb63 |
||||
br i1 false, label %cond_true76, label %cond_next78 |
||||
|
||||
cond_true76: ; preds = %cond_false73 |
||||
br label %cond_next78 |
||||
|
||||
cond_next78: ; preds = %cond_true76, %cond_false73, %bb63 |
||||
br label %bb85 |
||||
|
||||
bb85: ; preds = %bb89, %cond_next78, %cond_true56 |
||||
br i1 false, label %bb63, label %bb89 |
||||
|
||||
bb89: ; preds = %bb85 |
||||
br i1 false, label %bb85, label %cond_next304 |
||||
|
||||
cond_false97: ; preds = %cond_next53 |
||||
br i1 false, label %cond_true108, label %bb248 |
||||
|
||||
cond_true108: ; preds = %cond_false97 |
||||
br i1 false, label %bb196, label %bb149 |
||||
|
||||
bb112: ; preds = %bb149, %bb146 |
||||
br i1 false, label %bb119, label %bb146 |
||||
|
||||
bb119: ; preds = %cond_next134, %bb112 |
||||
br i1 false, label %cond_next134, label %cond_false129 |
||||
|
||||
cond_false129: ; preds = %bb119 |
||||
br i1 false, label %cond_true132, label %cond_next134 |
||||
|
||||
cond_true132: ; preds = %cond_false129 |
||||
br label %cond_next134 |
||||
|
||||
cond_next134: ; preds = %cond_true132, %cond_false129, %bb119 |
||||
br i1 false, label %bb119, label %bb146 |
||||
|
||||
bb146: ; preds = %cond_next134, %bb112 |
||||
br i1 false, label %bb112, label %cond_next304 |
||||
|
||||
bb149: ; preds = %cond_true108 |
||||
br i1 false, label %bb112, label %cond_next304 |
||||
|
||||
bb155: ; preds = %bb196, %bb193 |
||||
br i1 false, label %bb165, label %bb193 |
||||
|
||||
bb165: ; preds = %cond_next180, %bb155 |
||||
br i1 false, label %cond_next180, label %cond_false175 |
||||
|
||||
cond_false175: ; preds = %bb165 |
||||
br i1 false, label %cond_true178, label %cond_next180 |
||||
|
||||
cond_true178: ; preds = %cond_false175 |
||||
br label %cond_next180 |
||||
|
||||
cond_next180: ; preds = %cond_true178, %cond_false175, %bb165 |
||||
br i1 false, label %bb165, label %bb193 |
||||
|
||||
bb193: ; preds = %cond_next180, %bb155 |
||||
br i1 false, label %bb155, label %cond_next304 |
||||
|
||||
bb196: ; preds = %cond_true108 |
||||
br i1 false, label %bb155, label %cond_next304 |
||||
|
||||
bb207: ; preds = %bb241 |
||||
br i1 false, label %cond_next225, label %cond_false220 |
||||
|
||||
cond_false220: ; preds = %bb207 |
||||
br i1 false, label %cond_true223, label %cond_next225 |
||||
|
||||
cond_true223: ; preds = %cond_false220 |
||||
br label %cond_next225 |
||||
|
||||
cond_next225: ; preds = %cond_true223, %cond_false220, %bb207 |
||||
br label %bb241 |
||||
|
||||
bb241: ; preds = %bb248, %bb245, %cond_next225 |
||||
br i1 false, label %bb207, label %bb245 |
||||
|
||||
bb245: ; preds = %bb241 |
||||
br i1 false, label %bb241, label %cond_next304 |
||||
|
||||
bb248: ; preds = %cond_false97 |
||||
br i1 false, label %bb241, label %cond_next304 |
||||
|
||||
bb256: ; preds = %bb290 |
||||
br i1 false, label %cond_next274, label %cond_false269 |
||||
|
||||
cond_false269: ; preds = %bb256 |
||||
br i1 false, label %cond_true272, label %cond_next274 |
||||
|
||||
cond_true272: ; preds = %cond_false269 |
||||
br label %cond_next274 |
||||
|
||||
cond_next274: ; preds = %cond_true272, %cond_false269, %bb256 |
||||
br label %bb290 |
||||
|
||||
bb290: ; preds = %bb294, %cond_next274 |
||||
br i1 false, label %bb256, label %bb294 |
||||
|
||||
bb294: ; preds = %bb290 |
||||
br i1 false, label %bb290, label %cond_next304 |
||||
|
||||
cond_next304: ; preds = %bb294, %bb248, %bb245, %bb196, %bb193, %bb149, %bb146, %bb89, %cond_true56 |
||||
br i1 false, label %cond_next11.i, label %cond_true.i |
||||
|
||||
cond_true.i: ; preds = %cond_next304 |
||||
br i1 false, label %vorbis_synthesis_read.exit, label %cond_next11.i |
||||
|
||||
cond_next11.i: ; preds = %cond_true.i, %cond_next304 |
||||
br label %vorbis_synthesis_read.exit |
||||
|
||||
vorbis_synthesis_read.exit: ; preds = %cond_next11.i, %cond_true.i |
||||
br i1 false, label %cond_next321, label %cond_true316 |
||||
|
||||
cond_true316: ; preds = %vorbis_synthesis_read.exit |
||||
ret void |
||||
|
||||
cond_next321: ; preds = %vorbis_synthesis_read.exit |
||||
ret void |
||||
|
||||
return: ; preds = %cond_next48, %bb29, %cond_next22, %cond_next15, %entry |
||||
ret void |
||||
} |
@ -1,21 +0,0 @@ |
||||
; RUN: opt < %s -loop-rotate -loop-unswitch -disable-output |
||||
|
||||
define i32 @stringSearch_Clib(i32 %count) { |
||||
entry: |
||||
br i1 false, label %bb36, label %bb44 |
||||
|
||||
cond_true20: ; preds = %bb36 |
||||
%tmp33 = add i32 0, 0 ; <i32> [#uses=1] |
||||
br label %bb36 |
||||
|
||||
bb36: ; preds = %cond_true20, %entry |
||||
%c.2 = phi i32 [ %tmp33, %cond_true20 ], [ 0, %entry ] ; <i32> [#uses=1] |
||||
br i1 false, label %cond_true20, label %bb41 |
||||
|
||||
bb41: ; preds = %bb36 |
||||
%c.2.lcssa = phi i32 [ %c.2, %bb36 ] ; <i32> [#uses=0] |
||||
ret i32 0 |
||||
|
||||
bb44: ; preds = %entry |
||||
ret i32 0 |
||||
} |
@ -1,13 +0,0 @@ |
||||
; RUN: opt < %s -loop-rotate -licm -loop-unswitch -disable-output |
||||
|
||||
define i32 @main(i32 %argc, i8** %argv) { |
||||
entry: |
||||
br label %bb7 |
||||
|
||||
bb7: ; preds = %bb7, %entry |
||||
%tmp54 = icmp slt i32 0, 2000000 ; <i1> [#uses=1] |
||||
br i1 %tmp54, label %bb7, label %bb56 |
||||
|
||||
bb56: ; preds = %bb7 |
||||
ret i32 0 |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,18 +0,0 @@ |
||||
; RUN: opt < %s -globalsmodref-aa -gvn -S | grep call | count 2 |
||||
|
||||
@g = internal global i32 0 ; <i32*> [#uses=2] |
||||
|
||||
define i32 @r() { |
||||
%tmp = load i32* @g ; <i32> [#uses=1] |
||||
ret i32 %tmp |
||||
} |
||||
|
||||
define i32 @f() { |
||||
entry: |
||||
%tmp = call i32 @e( ) ; <i32> [#uses=1] |
||||
store i32 %tmp, i32* @g |
||||
%tmp2 = call i32 @e( ) ; <i32> [#uses=1] |
||||
ret i32 %tmp2 |
||||
} |
||||
|
||||
declare i32 @e() readonly ; might call @r |
@ -1,9 +0,0 @@ |
||||
; RUN: opt < %s -globalsmodref-aa -gvn -S | not grep load |
||||
@X = internal global i32 4 ; <i32*> [#uses=1] |
||||
|
||||
define i32 @test(i32* %P) { |
||||
store i32 7, i32* %P |
||||
store i32 12, i32* @X |
||||
%V = load i32* %P ; <i32> [#uses=1] |
||||
ret i32 %V |
||||
} |
@ -1,20 +0,0 @@ |
||||
; RUN: opt < %s -globalsmodref-aa -gvn -S | not grep load |
||||
|
||||
; This test requires the use of previous analyses to determine that |
||||
; doesnotmodX does not modify X (because 'sin' doesn't). |
||||
|
||||
@X = internal global i32 4 ; <i32*> [#uses=2] |
||||
|
||||
declare double @sin(double) readnone |
||||
|
||||
define i32 @test(i32* %P) { |
||||
store i32 12, i32* @X |
||||
call double @doesnotmodX( double 1.000000e+00 ) ; <double>:1 [#uses=0] |
||||
%V = load i32* @X ; <i32> [#uses=1] |
||||
ret i32 %V |
||||
} |
||||
|
||||
define double @doesnotmodX(double %V) { |
||||
%V2 = call double @sin( double %V ) readnone ; <double> [#uses=1] |
||||
ret double %V2 |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,20 +0,0 @@ |
||||
; RUN: opt < %s -globalsmodref-aa -gvn -instcombine -S | \ |
||||
; RUN: grep {ret i32 0} |
||||
|
||||
@G = internal global i32* null ; <i32**> [#uses=3] |
||||
|
||||
define void @test() { |
||||
%A = malloc i32 ; <i32*> [#uses=1] |
||||
store i32* %A, i32** @G |
||||
ret void |
||||
} |
||||
|
||||
define i32 @test1(i32* %P) { |
||||
%g1 = load i32** @G ; <i32*> [#uses=2] |
||||
%h1 = load i32* %g1 ; <i32> [#uses=1] |
||||
store i32 123, i32* %P |
||||
%g2 = load i32** @G ; <i32*> [#uses=0] |
||||
%h2 = load i32* %g1 ; <i32> [#uses=1] |
||||
%X = sub i32 %h1, %h2 ; <i32> [#uses=1] |
||||
ret i32 %X |
||||
} |
@ -1,13 +0,0 @@ |
||||
; RUN: opt < %s -globalsmodref-aa -gvn -S | not grep load |
||||
@X = internal global i32 4 ; <i32*> [#uses=2] |
||||
|
||||
define i32 @test(i32* %P) { |
||||
store i32 12, i32* @X |
||||
call void @doesnotmodX( ) |
||||
%V = load i32* @X ; <i32> [#uses=1] |
||||
ret i32 %V |
||||
} |
||||
|
||||
define void @doesnotmodX() { |
||||
ret void |
||||
} |
@ -1,23 +0,0 @@ |
||||
; Test that pure functions are cse'd away |
||||
; RUN: opt < %s -globalsmodref-aa -gvn -instcombine | \ |
||||
; RUN: llvm-dis | not grep sub |
||||
|
||||
define i32 @pure(i32 %X) { |
||||
%Y = add i32 %X, 1 ; <i32> [#uses=1] |
||||
ret i32 %Y |
||||
} |
||||
|
||||
define i32 @test1(i32 %X) { |
||||
%A = call i32 @pure( i32 %X ) ; <i32> [#uses=1] |
||||
%B = call i32 @pure( i32 %X ) ; <i32> [#uses=1] |
||||
%C = sub i32 %A, %B ; <i32> [#uses=1] |
||||
ret i32 %C |
||||
} |
||||
|
||||
define i32 @test2(i32 %X, i32* %P) { |
||||
%A = call i32 @pure( i32 %X ) ; <i32> [#uses=1] |
||||
store i32 %X, i32* %P ;; Does not invalidate 'pure' call. |
||||
%B = call i32 @pure( i32 %X ) ; <i32> [#uses=1] |
||||
%C = sub i32 %A, %B ; <i32> [#uses=1] |
||||
ret i32 %C |
||||
} |
@ -1,44 +0,0 @@ |
||||
; RUN: opt < %s -analyze -lda | FileCheck %s |
||||
|
||||
;; x[5] = x[6] // with x being a pointer passed as argument |
||||
|
||||
define void @f1(i32* nocapture %xptr) nounwind { |
||||
entry: |
||||
%x.ld.addr = getelementptr i32* %xptr, i64 6 |
||||
%x.st.addr = getelementptr i32* %xptr, i64 5 |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x = load i32* %x.ld.addr |
||||
store i32 %x, i32* %x.st.addr |
||||
; CHECK: 0,1: dep |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; x[5] = x[6] // with x being an array on the stack |
||||
|
||||
define void @foo(...) nounwind { |
||||
entry: |
||||
%xptr = alloca [256 x i32], align 4 |
||||
%x.ld.addr = getelementptr [256 x i32]* %xptr, i64 0, i64 6 |
||||
%x.st.addr = getelementptr [256 x i32]* %xptr, i64 0, i64 5 |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x = load i32* %x.ld.addr |
||||
store i32 %x, i32* %x.st.addr |
||||
; CHECK: 0,1: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,110 +0,0 @@ |
||||
; RUN: opt < %s -analyze -lda | FileCheck %s |
||||
|
||||
@x = common global [256 x i32] zeroinitializer, align 4 |
||||
@y = common global [256 x i32] zeroinitializer, align 4 |
||||
|
||||
;; for (i = 0; i < 256; i++) |
||||
;; x[i] = x[i] + y[i] |
||||
|
||||
define void @f1(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%x = load i32* %x.addr ; 0 |
||||
%y = load i32* %y.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; for (i = 0; i < 256; i++) |
||||
;; x[i+1] = x[i] + y[i] |
||||
|
||||
define void @f2(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%i.next = add i64 %i, 1 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.next |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; for (i = 0; i < 10; i++) |
||||
;; x[i+20] = x[i] + y[i] |
||||
|
||||
define void @f3(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%i.20 = add i64 %i, 20 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.20 |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 10 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; for (i = 0; i < 10; i++) |
||||
;; x[10*i+1] = x[10*i] + y[i] |
||||
|
||||
define void @f4(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%i.10 = mul i64 %i, 10 |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i.10 |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.10 |
||||
%i.10.1 = add i64 %i.10, 1 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.10.1 |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 10 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
@ -1,118 +0,0 @@ |
||||
; RUN: opt < %s -analyze -lda | FileCheck %s |
||||
|
||||
@x = common global [256 x i32] zeroinitializer, align 4 |
||||
@y = common global [256 x i32] zeroinitializer, align 4 |
||||
|
||||
;; for (i = 0; i < 256; i++) |
||||
;; x[i] = x[255 - i] + y[i] |
||||
|
||||
define void @f1(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%i.255 = sub i64 255, %i |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.255 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; for (i = 0; i < 100; i++) |
||||
;; x[i] = x[255 - i] + y[i] |
||||
|
||||
define void @f2(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%i.255 = sub i64 255, %i |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.255 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 100 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; // the first iteration (i=0) leads to an out-of-bounds access of x. as the |
||||
;; // result of this access is undefined, _any_ dependence result is safe. |
||||
;; for (i = 0; i < 256; i++) |
||||
;; x[i] = x[256 - i] + y[i] |
||||
|
||||
define void @f3(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%i.256 = sub i64 0, %i |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 1, i64 %i.256 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; // slightly contrived but valid IR for the following loop, where all |
||||
;; // accesses in all iterations are within bounds. while this example's first |
||||
;; // (ZIV-)subscript is (0, 1), accesses are dependent. |
||||
;; for (i = 1; i < 256; i++) |
||||
;; x[i] = x[256 - i] + y[i] |
||||
|
||||
define void @f4(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%i.1 = add i64 1, %i |
||||
%i.256 = sub i64 -1, %i |
||||
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i.1 |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 1, i64 %i.256 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.1 |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.ld.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.st.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
@ -1,56 +0,0 @@ |
||||
; RUN: opt < %s -analyze -lda | FileCheck %s |
||||
|
||||
@x = common global [256 x i32] zeroinitializer, align 4 |
||||
@y = common global [256 x i32] zeroinitializer, align 4 |
||||
|
||||
;; for (i = 0; i < 256; i++) |
||||
;; x[i] = x[42] + y[i] |
||||
|
||||
define void @f1(...) nounwind { |
||||
entry: |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 42 |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; for (i = 0; i < 250; i++) |
||||
;; x[i] = x[255] + y[i] |
||||
|
||||
define void @f2(...) nounwind { |
||||
entry: |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 255 |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i |
||||
%y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i |
||||
%x = load i32* %x.ld.addr ; 0 |
||||
%y = load i32* %y.addr ; 1 |
||||
%r = add i32 %y, %x |
||||
store i32 %r, i32* %x.addr ; 2 |
||||
; CHECK: 0,2: dep |
||||
; CHECK: 1,2: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 250 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
@ -1,63 +0,0 @@ |
||||
; RUN: opt < %s -analyze -lda | FileCheck %s |
||||
|
||||
@x = common global [256 x i32] zeroinitializer, align 4 |
||||
|
||||
;; x[5] = x[6] |
||||
|
||||
define void @f1(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x = load i32* getelementptr ([256 x i32]* @x, i32 0, i64 6) |
||||
store i32 %x, i32* getelementptr ([256 x i32]* @x, i32 0, i64 5) |
||||
; CHECK: 0,1: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; x[c] = x[c+1] // with c being a loop-invariant constant |
||||
|
||||
define void @f2(i64 %c0) nounwind { |
||||
entry: |
||||
%c1 = add i64 %c0, 1 |
||||
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %c0 |
||||
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %c1 |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x = load i32* %x.ld.addr |
||||
store i32 %x, i32* %x.st.addr |
||||
; CHECK: 0,1: ind |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
||||
|
||||
;; x[6] = x[6] |
||||
|
||||
define void @f3(...) nounwind { |
||||
entry: |
||||
br label %for.body |
||||
|
||||
for.body: |
||||
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ] |
||||
%x = load i32* getelementptr ([256 x i32]* @x, i32 0, i64 6) |
||||
store i32 %x, i32* getelementptr ([256 x i32]* @x, i32 0, i64 6) |
||||
; CHECK: 0,1: dep |
||||
%i.next = add i64 %i, 1 |
||||
%exitcond = icmp eq i64 %i.next, 256 |
||||
br i1 %exitcond, label %for.end, label %for.body |
||||
|
||||
for.end: |
||||
ret void |
||||
} |
@ -1,30 +0,0 @@ |
||||
; This testcase was incorrectly computing that the loopentry.7 loop was |
||||
; not a child of the loopentry.6 loop. |
||||
; |
||||
; RUN: opt < %s -analyze -loops | \ |
||||
; RUN: grep {^ Loop at depth 4 containing: %loopentry.7<header><latch><exiting>} |
||||
|
||||
define void @getAndMoveToFrontDecode() { |
||||
br label %endif.2 |
||||
|
||||
endif.2: ; preds = %loopexit.5, %0 |
||||
br i1 false, label %loopentry.5, label %UnifiedExitNode |
||||
|
||||
loopentry.5: ; preds = %loopexit.6, %endif.2 |
||||
br i1 false, label %loopentry.6, label %UnifiedExitNode |
||||
|
||||
loopentry.6: ; preds = %loopentry.7, %loopentry.5 |
||||
br i1 false, label %loopentry.7, label %loopexit.6 |
||||
|
||||
loopentry.7: ; preds = %loopentry.7, %loopentry.6 |
||||
br i1 false, label %loopentry.7, label %loopentry.6 |
||||
|
||||
loopexit.6: ; preds = %loopentry.6 |
||||
br i1 false, label %loopentry.5, label %loopexit.5 |
||||
|
||||
loopexit.5: ; preds = %loopexit.6 |
||||
br i1 false, label %endif.2, label %UnifiedExitNode |
||||
|
||||
UnifiedExitNode: ; preds = %loopexit.5, %loopentry.5, %endif.2 |
||||
ret void |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,86 +0,0 @@ |
||||
; RUN: opt < %s -pointertracking -analyze | FileCheck %s |
||||
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" |
||||
target triple = "x86_64-unknown-linux-gnu" |
||||
@.str = internal constant [5 x i8] c"1234\00" ; <[5 x i8]*> [#uses=1] |
||||
@test1p = global i8* getelementptr ([5 x i8]* @.str, i32 0, i32 0), align 8 ; <i8**> [#uses=1] |
||||
@test1a = global [5 x i8] c"1234\00", align 1 ; <[5 x i8]*> [#uses=1] |
||||
@test2a = global [5 x i32] [i32 1, i32 2, i32 3, i32 4, i32 5], align 4 ; <[5 x i32]*> [#uses=2] |
||||
@test2p = global i32* getelementptr ([5 x i32]* @test2a, i32 0, i32 0), align 8 ; <i32**> [#uses=1] |
||||
@test0p = common global i32* null, align 8 ; <i32**> [#uses=1] |
||||
@test0i = common global i32 0, align 4 ; <i32*> [#uses=1] |
||||
|
||||
define i32 @foo0() nounwind { |
||||
entry: |
||||
%tmp = load i32** @test0p ; <i32*> [#uses=1] |
||||
%conv = bitcast i32* %tmp to i8* ; <i8*> [#uses=1] |
||||
%call = tail call i32 @bar(i8* %conv) nounwind ; <i32> [#uses=1] |
||||
%tmp1 = load i8** @test1p ; <i8*> [#uses=1] |
||||
%call2 = tail call i32 @bar(i8* %tmp1) nounwind ; <i32> [#uses=1] |
||||
%call3 = tail call i32 @bar(i8* getelementptr ([5 x i8]* @test1a, i32 0, i32 0)) nounwind ; <i32> [#uses=1] |
||||
%call5 = tail call i32 @bar(i8* bitcast ([5 x i32]* @test2a to i8*)) nounwind ; <i32> [#uses=1] |
||||
%tmp7 = load i32** @test2p ; <i32*> [#uses=1] |
||||
%conv8 = bitcast i32* %tmp7 to i8* ; <i8*> [#uses=1] |
||||
%call9 = tail call i32 @bar(i8* %conv8) nounwind ; <i32> [#uses=1] |
||||
%call11 = tail call i32 @bar(i8* bitcast (i32* @test0i to i8*)) nounwind ; <i32> [#uses=1] |
||||
%add = add i32 %call2, %call ; <i32> [#uses=1] |
||||
%add4 = add i32 %add, %call3 ; <i32> [#uses=1] |
||||
%add6 = add i32 %add4, %call5 ; <i32> [#uses=1] |
||||
%add10 = add i32 %add6, %call9 ; <i32> [#uses=1] |
||||
%add12 = add i32 %add10, %call11 ; <i32> [#uses=1] |
||||
ret i32 %add12 |
||||
} |
||||
|
||||
declare i32 @bar(i8*) |
||||
|
||||
define i32 @foo1(i32 %n) nounwind { |
||||
entry: |
||||
; CHECK: 'foo1': |
||||
%test4a = alloca [10 x i8], align 1 ; <[10 x i8]*> [#uses=1] |
||||
; CHECK: %test4a = |
||||
; CHECK: ==> 1 elements, 10 bytes allocated |
||||
%test6a = alloca [10 x i32], align 4 ; <[10 x i32]*> [#uses=1] |
||||
; CHECK: %test6a = |
||||
; CHECK: ==> 1 elements, 40 bytes allocated |
||||
%vla = alloca i8, i32 %n, align 1 ; <i8*> [#uses=1] |
||||
; CHECK: %vla = |
||||
; CHECK: ==> %n elements, %n bytes allocated |
||||
%0 = shl i32 %n, 2 ; <i32> [#uses=1] |
||||
%vla7 = alloca i8, i32 %0, align 1 ; <i8*> [#uses=1] |
||||
; CHECK: %vla7 = |
||||
; CHECK: ==> (4 * %n) elements, (4 * %n) bytes allocated |
||||
%call = call i32 @bar(i8* %vla) nounwind ; <i32> [#uses=1] |
||||
%arraydecay = getelementptr [10 x i8]* %test4a, i64 0, i64 0 ; <i8*> [#uses=1] |
||||
%call10 = call i32 @bar(i8* %arraydecay) nounwind ; <i32> [#uses=1] |
||||
%call11 = call i32 @bar(i8* %vla7) nounwind ; <i32> [#uses=1] |
||||
%ptrconv14 = bitcast [10 x i32]* %test6a to i8* ; <i8*> [#uses=1] |
||||
%call15 = call i32 @bar(i8* %ptrconv14) nounwind ; <i32> [#uses=1] |
||||
%add = add i32 %call10, %call ; <i32> [#uses=1] |
||||
%add12 = add i32 %add, %call11 ; <i32> [#uses=1] |
||||
%add16 = add i32 %add12, %call15 ; <i32> [#uses=1] |
||||
ret i32 %add16 |
||||
} |
||||
|
||||
define i32 @foo2(i64 %n) nounwind { |
||||
entry: |
||||
%call = tail call i8* @malloc(i64 %n) ; <i8*> [#uses=1] |
||||
; CHECK: %call = |
||||
; CHECK: ==> %n elements, %n bytes allocated |
||||
%call2 = tail call i8* @calloc(i64 2, i64 4) nounwind ; <i8*> [#uses=1] |
||||
; CHECK: %call2 = |
||||
; CHECK: ==> 8 elements, 8 bytes allocated |
||||
%call4 = tail call i8* @realloc(i8* null, i64 16) nounwind ; <i8*> [#uses=1] |
||||
; CHECK: %call4 = |
||||
; CHECK: ==> 16 elements, 16 bytes allocated |
||||
%call6 = tail call i32 @bar(i8* %call) nounwind ; <i32> [#uses=1] |
||||
%call8 = tail call i32 @bar(i8* %call2) nounwind ; <i32> [#uses=1] |
||||
%call10 = tail call i32 @bar(i8* %call4) nounwind ; <i32> [#uses=1] |
||||
%add = add i32 %call8, %call6 ; <i32> [#uses=1] |
||||
%add11 = add i32 %add, %call10 ; <i32> [#uses=1] |
||||
ret i32 %add11 |
||||
} |
||||
|
||||
declare noalias i8* @malloc(i64) nounwind |
||||
|
||||
declare noalias i8* @calloc(i64, i64) nounwind |
||||
|
||||
declare noalias i8* @realloc(i8* nocapture, i64) nounwind |
@ -1,97 +0,0 @@ |
||||
; RUN: opt < %s -analyze -postdomfrontier \ |
||||
; RUN: -disable-verify |
||||
; ModuleID = '2006-09-26-PostDominanceFrontier.bc' |
||||
target datalayout = "e-p:64:64" |
||||
target triple = "alphaev67-unknown-linux-gnu" |
||||
%struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [44 x i8] } |
||||
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 } |
||||
@TOP = external global i64* ; <i64**> [#uses=1] |
||||
@BOT = external global i64* ; <i64**> [#uses=1] |
||||
@str = external global [2 x i8] ; <[2 x i8]*> [#uses=0] |
||||
|
||||
declare void @fopen() |
||||
|
||||
define void @main(i8** %argv) { |
||||
entry: |
||||
%netSelect.i507 = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%topStart.i = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%topEnd.i = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%botStart.i = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%botEnd.i = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%c1.i154 = alloca i32, align 4 ; <i32*> [#uses=0] |
||||
%b1.i155 = alloca i32, align 4 ; <i32*> [#uses=0] |
||||
%t1.i156 = alloca i32, align 4 ; <i32*> [#uses=0] |
||||
%c1.i = alloca i32, align 4 ; <i32*> [#uses=0] |
||||
%b1.i = alloca i32, align 4 ; <i32*> [#uses=0] |
||||
%t1.i = alloca i32, align 4 ; <i32*> [#uses=0] |
||||
%netSelect.i5 = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%netSelect.i = alloca i64, align 8 ; <i64*> [#uses=0] |
||||
%tmp2.i = getelementptr i8** %argv, i32 1 ; <i8**> [#uses=1] |
||||
%tmp3.i4 = load i8** %tmp2.i ; <i8*> [#uses=0] |
||||
call void @fopen( ) |
||||
br i1 false, label %DimensionChannel.exit, label %bb.backedge.i |
||||
|
||||
bb.backedge.i: ; preds = %entry |
||||
ret void |
||||
|
||||
DimensionChannel.exit: ; preds = %entry |
||||
%tmp13.i137 = malloc i64, i32 0 ; <i64*> [#uses=1] |
||||
%tmp610.i = malloc i64, i32 0 ; <i64*> [#uses=1] |
||||
br label %cond_true.i143 |
||||
|
||||
cond_true.i143: ; preds = %cond_true.i143, %DimensionChannel.exit |
||||
%tmp9.i140 = getelementptr i64* %tmp13.i137, i64 0 ; <i64*> [#uses=0] |
||||
%tmp12.i = getelementptr i64* %tmp610.i, i64 0 ; <i64*> [#uses=0] |
||||
br i1 false, label %bb18.i144, label %cond_true.i143 |
||||
|
||||
bb18.i144: ; preds = %cond_true.i143 |
||||
call void @fopen( ) |
||||
%tmp76.i105 = malloc i64, i32 0 ; <i64*> [#uses=3] |
||||
%tmp674.i = malloc i64, i32 0 ; <i64*> [#uses=2] |
||||
%tmp1072.i = malloc i64, i32 0 ; <i64*> [#uses=2] |
||||
%tmp1470.i = malloc i64, i32 0 ; <i64*> [#uses=1] |
||||
br label %cond_true.i114 |
||||
|
||||
cond_true.i114: ; preds = %cond_true.i114, %bb18.i144 |
||||
%tmp17.i108 = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0] |
||||
%tmp20.i = getelementptr i64* %tmp674.i, i64 0 ; <i64*> [#uses=0] |
||||
%tmp23.i111 = getelementptr i64* %tmp1470.i, i64 0 ; <i64*> [#uses=0] |
||||
br i1 false, label %cond_true40.i, label %cond_true.i114 |
||||
|
||||
cond_true40.i: ; preds = %cond_true40.i, %cond_true.i114 |
||||
%tmp33.i115 = getelementptr i64* %tmp1072.i, i64 0 ; <i64*> [#uses=0] |
||||
br i1 false, label %bb142.i, label %cond_true40.i |
||||
|
||||
cond_next54.i: ; preds = %cond_true76.i |
||||
%tmp57.i = getelementptr i64* %tmp55.i, i64 0 ; <i64*> [#uses=0] |
||||
br i1 false, label %bb64.i, label %bb69.i |
||||
|
||||
bb64.i: ; preds = %cond_true76.i, %cond_next54.i |
||||
%tmp67.i117 = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0] |
||||
br i1 false, label %bb114.i, label %cond_true111.i |
||||
|
||||
bb69.i: ; preds = %cond_next54.i |
||||
br i1 false, label %bb79.i, label %cond_true76.i |
||||
|
||||
cond_true76.i: ; preds = %bb142.i, %bb69.i |
||||
%tmp48.i = getelementptr i64* %tmp46.i, i64 0 ; <i64*> [#uses=0] |
||||
br i1 false, label %bb64.i, label %cond_next54.i |
||||
|
||||
bb79.i: ; preds = %bb69.i |
||||
br i1 false, label %bb114.i, label %cond_true111.i |
||||
|
||||
cond_true111.i: ; preds = %bb79.i, %bb64.i |
||||
%tmp84.i127 = getelementptr i64* %tmp46.i, i64 0 ; <i64*> [#uses=0] |
||||
ret void |
||||
|
||||
bb114.i: ; preds = %bb142.i, %bb79.i, %bb64.i |
||||
%tmp117.i = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0] |
||||
%tmp132.i131 = getelementptr i64* %tmp674.i, i64 0 ; <i64*> [#uses=0] |
||||
%tmp122.i = getelementptr i64* %tmp1072.i, i64 0 ; <i64*> [#uses=0] |
||||
ret void |
||||
|
||||
bb142.i: ; preds = %cond_true40.i |
||||
%tmp46.i = load i64** @BOT ; <i64*> [#uses=2] |
||||
%tmp55.i = load i64** @TOP ; <i64*> [#uses=1] |
||||
br i1 false, label %bb114.i, label %cond_true76.i |
||||
} |
@ -1,692 +0,0 @@ |
||||
; RUN: opt < %s -postdomfrontier -disable-output |
||||
|
||||
define void @SManager() { |
||||
entry: |
||||
br label %bb.outer |
||||
|
||||
bb.outer: ; preds = %bb193, %entry |
||||
br label %bb.outer156 |
||||
|
||||
bb.loopexit: ; preds = %bb442 |
||||
br label %bb.outer156 |
||||
|
||||
bb.outer156: ; preds = %bb.loopexit, %bb.outer |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb.backedge, %bb.outer156 |
||||
br i1 false, label %cond_true, label %bb.cond_next_crit_edge |
||||
|
||||
bb.cond_next_crit_edge: ; preds = %bb |
||||
br label %cond_next |
||||
|
||||
cond_true: ; preds = %bb |
||||
br label %cond_next |
||||
|
||||
cond_next: ; preds = %cond_true, %bb.cond_next_crit_edge |
||||
br i1 false, label %cond_next.bb.backedge_crit_edge, label %cond_next107 |
||||
|
||||
cond_next.bb.backedge_crit_edge: ; preds = %cond_next |
||||
br label %bb.backedge |
||||
|
||||
bb.backedge: ; preds = %cond_true112.bb.backedge_crit_edge, %cond_next.bb.backedge_crit_edge |
||||
br label %bb |
||||
|
||||
cond_next107: ; preds = %cond_next |
||||
br i1 false, label %cond_true112, label %cond_next197 |
||||
|
||||
cond_true112: ; preds = %cond_next107 |
||||
br i1 false, label %cond_true118, label %cond_true112.bb.backedge_crit_edge |
||||
|
||||
cond_true112.bb.backedge_crit_edge: ; preds = %cond_true112 |
||||
br label %bb.backedge |
||||
|
||||
cond_true118: ; preds = %cond_true112 |
||||
br i1 false, label %bb123.preheader, label %cond_true118.bb148_crit_edge |
||||
|
||||
cond_true118.bb148_crit_edge: ; preds = %cond_true118 |
||||
br label %bb148 |
||||
|
||||
bb123.preheader: ; preds = %cond_true118 |
||||
br label %bb123 |
||||
|
||||
bb123: ; preds = %bb142.bb123_crit_edge, %bb123.preheader |
||||
br i1 false, label %bb123.bb142_crit_edge, label %cond_next.i57 |
||||
|
||||
bb123.bb142_crit_edge: ; preds = %bb123 |
||||
br label %bb142 |
||||
|
||||
cond_next.i57: ; preds = %bb123 |
||||
br i1 false, label %cond_true135, label %cond_next.i57.bb142_crit_edge |
||||
|
||||
cond_next.i57.bb142_crit_edge: ; preds = %cond_next.i57 |
||||
br label %bb142 |
||||
|
||||
cond_true135: ; preds = %cond_next.i57 |
||||
br label %bb142 |
||||
|
||||
bb142: ; preds = %cond_true135, %cond_next.i57.bb142_crit_edge, %bb123.bb142_crit_edge |
||||
br i1 false, label %bb148.loopexit, label %bb142.bb123_crit_edge |
||||
|
||||
bb142.bb123_crit_edge: ; preds = %bb142 |
||||
br label %bb123 |
||||
|
||||
bb148.loopexit: ; preds = %bb142 |
||||
br label %bb148 |
||||
|
||||
bb148: ; preds = %bb148.loopexit, %cond_true118.bb148_crit_edge |
||||
br i1 false, label %bb151.preheader, label %bb148.bb177_crit_edge |
||||
|
||||
bb148.bb177_crit_edge: ; preds = %bb148 |
||||
br label %bb177 |
||||
|
||||
bb151.preheader: ; preds = %bb148 |
||||
br label %bb151 |
||||
|
||||
bb151: ; preds = %bb171.bb151_crit_edge, %bb151.preheader |
||||
br i1 false, label %bb151.bb171_crit_edge, label %cond_next.i49 |
||||
|
||||
bb151.bb171_crit_edge: ; preds = %bb151 |
||||
br label %bb171 |
||||
|
||||
cond_next.i49: ; preds = %bb151 |
||||
br i1 false, label %cond_true164, label %cond_next.i49.bb171_crit_edge |
||||
|
||||
cond_next.i49.bb171_crit_edge: ; preds = %cond_next.i49 |
||||
br label %bb171 |
||||
|
||||
cond_true164: ; preds = %cond_next.i49 |
||||
br label %bb171 |
||||
|
||||
bb171: ; preds = %cond_true164, %cond_next.i49.bb171_crit_edge, %bb151.bb171_crit_edge |
||||
br i1 false, label %bb177.loopexit, label %bb171.bb151_crit_edge |
||||
|
||||
bb171.bb151_crit_edge: ; preds = %bb171 |
||||
br label %bb151 |
||||
|
||||
bb177.loopexit: ; preds = %bb171 |
||||
br label %bb177 |
||||
|
||||
bb177: ; preds = %bb177.loopexit, %bb148.bb177_crit_edge |
||||
br i1 false, label %bb180.preheader, label %bb177.bb193_crit_edge |
||||
|
||||
bb177.bb193_crit_edge: ; preds = %bb177 |
||||
br label %bb193 |
||||
|
||||
bb180.preheader: ; preds = %bb177 |
||||
br label %bb180 |
||||
|
||||
bb180: ; preds = %bb180.bb180_crit_edge, %bb180.preheader |
||||
br i1 false, label %bb193.loopexit, label %bb180.bb180_crit_edge |
||||
|
||||
bb180.bb180_crit_edge: ; preds = %bb180 |
||||
br label %bb180 |
||||
|
||||
bb193.loopexit: ; preds = %bb180 |
||||
br label %bb193 |
||||
|
||||
bb193: ; preds = %bb193.loopexit, %bb177.bb193_crit_edge |
||||
br label %bb.outer |
||||
|
||||
cond_next197: ; preds = %cond_next107 |
||||
br i1 false, label %cond_next210, label %cond_true205 |
||||
|
||||
cond_true205: ; preds = %cond_next197 |
||||
br i1 false, label %cond_true205.bb213_crit_edge, label %cond_true205.bb299_crit_edge |
||||
|
||||
cond_true205.bb299_crit_edge: ; preds = %cond_true205 |
||||
br label %bb299 |
||||
|
||||
cond_true205.bb213_crit_edge: ; preds = %cond_true205 |
||||
br label %bb213 |
||||
|
||||
cond_next210: ; preds = %cond_next197 |
||||
br label %bb293 |
||||
|
||||
bb213: ; preds = %bb293.bb213_crit_edge, %cond_true205.bb213_crit_edge |
||||
br i1 false, label %bb213.cond_next290_crit_edge, label %cond_true248 |
||||
|
||||
bb213.cond_next290_crit_edge: ; preds = %bb213 |
||||
br label %cond_next290 |
||||
|
||||
cond_true248: ; preds = %bb213 |
||||
br i1 false, label %cond_true248.cond_next290_crit_edge, label %cond_true255 |
||||
|
||||
cond_true248.cond_next290_crit_edge: ; preds = %cond_true248 |
||||
br label %cond_next290 |
||||
|
||||
cond_true255: ; preds = %cond_true248 |
||||
br i1 false, label %cond_true266, label %cond_true255.cond_next271_crit_edge |
||||
|
||||
cond_true255.cond_next271_crit_edge: ; preds = %cond_true255 |
||||
br label %cond_next271 |
||||
|
||||
cond_true266: ; preds = %cond_true255 |
||||
br label %cond_next271 |
||||
|
||||
cond_next271: ; preds = %cond_true266, %cond_true255.cond_next271_crit_edge |
||||
br label %cond_next290 |
||||
|
||||
cond_next290: ; preds = %cond_next271, %cond_true248.cond_next290_crit_edge, %bb213.cond_next290_crit_edge |
||||
br label %bb293 |
||||
|
||||
bb293: ; preds = %cond_next290, %cond_next210 |
||||
br i1 false, label %bb293.bb213_crit_edge, label %bb293.bb299_crit_edge |
||||
|
||||
bb293.bb299_crit_edge: ; preds = %bb293 |
||||
br label %bb299 |
||||
|
||||
bb293.bb213_crit_edge: ; preds = %bb293 |
||||
br label %bb213 |
||||
|
||||
bb299: ; preds = %bb293.bb299_crit_edge, %cond_true205.bb299_crit_edge |
||||
br i1 false, label %bb302.preheader, label %bb299.bb390_crit_edge |
||||
|
||||
bb299.bb390_crit_edge: ; preds = %bb299 |
||||
br label %bb390 |
||||
|
||||
bb302.preheader: ; preds = %bb299 |
||||
br label %bb302 |
||||
|
||||
bb302: ; preds = %bb384.bb302_crit_edge, %bb302.preheader |
||||
br i1 false, label %bb302.bb384_crit_edge, label %cond_true339 |
||||
|
||||
bb302.bb384_crit_edge: ; preds = %bb302 |
||||
br label %bb384 |
||||
|
||||
cond_true339: ; preds = %bb302 |
||||
br i1 false, label %cond_true339.bb384_crit_edge, label %cond_true346 |
||||
|
||||
cond_true339.bb384_crit_edge: ; preds = %cond_true339 |
||||
br label %bb384 |
||||
|
||||
cond_true346: ; preds = %cond_true339 |
||||
br i1 false, label %cond_true357, label %cond_true346.cond_next361_crit_edge |
||||
|
||||
cond_true346.cond_next361_crit_edge: ; preds = %cond_true346 |
||||
br label %cond_next361 |
||||
|
||||
cond_true357: ; preds = %cond_true346 |
||||
br label %cond_next361 |
||||
|
||||
cond_next361: ; preds = %cond_true357, %cond_true346.cond_next361_crit_edge |
||||
br label %bb384 |
||||
|
||||
bb384: ; preds = %cond_next361, %cond_true339.bb384_crit_edge, %bb302.bb384_crit_edge |
||||
br i1 false, label %bb390.loopexit, label %bb384.bb302_crit_edge |
||||
|
||||
bb384.bb302_crit_edge: ; preds = %bb384 |
||||
br label %bb302 |
||||
|
||||
bb390.loopexit: ; preds = %bb384 |
||||
br label %bb390 |
||||
|
||||
bb390: ; preds = %bb390.loopexit, %bb299.bb390_crit_edge |
||||
br i1 false, label %bb391.preheader, label %bb390.bb442.preheader_crit_edge |
||||
|
||||
bb390.bb442.preheader_crit_edge: ; preds = %bb390 |
||||
br label %bb442.preheader |
||||
|
||||
bb391.preheader: ; preds = %bb390 |
||||
br label %bb391 |
||||
|
||||
bb391: ; preds = %bb413.bb391_crit_edge, %bb391.preheader |
||||
br i1 false, label %bb391.bb413_crit_edge, label %cond_next404 |
||||
|
||||
bb391.bb413_crit_edge: ; preds = %bb391 |
||||
br label %bb413 |
||||
|
||||
cond_next404: ; preds = %bb391 |
||||
br i1 false, label %cond_next404.HWrite.exit_crit_edge, label %cond_next.i13 |
||||
|
||||
cond_next404.HWrite.exit_crit_edge: ; preds = %cond_next404 |
||||
br label %HWrite.exit |
||||
|
||||
cond_next.i13: ; preds = %cond_next404 |
||||
br i1 false, label %cond_next.i13.cond_next13.i_crit_edge, label %cond_true12.i |
||||
|
||||
cond_next.i13.cond_next13.i_crit_edge: ; preds = %cond_next.i13 |
||||
br label %cond_next13.i |
||||
|
||||
cond_true12.i: ; preds = %cond_next.i13 |
||||
br label %cond_next13.i |
||||
|
||||
cond_next13.i: ; preds = %cond_true12.i, %cond_next.i13.cond_next13.i_crit_edge |
||||
br i1 false, label %cond_next13.i.bb.i22_crit_edge, label %cond_next43.i |
||||
|
||||
cond_next13.i.bb.i22_crit_edge: ; preds = %cond_next13.i |
||||
br label %bb.i22 |
||||
|
||||
cond_next43.i: ; preds = %cond_next13.i |
||||
br i1 false, label %cond_next43.i.bb.i22_crit_edge, label %bb60.i |
||||
|
||||
cond_next43.i.bb.i22_crit_edge: ; preds = %cond_next43.i |
||||
br label %bb.i22 |
||||
|
||||
bb.i22: ; preds = %cond_next43.i.bb.i22_crit_edge, %cond_next13.i.bb.i22_crit_edge |
||||
br label %bb413 |
||||
|
||||
bb60.i: ; preds = %cond_next43.i |
||||
br i1 false, label %bb60.i.HWrite.exit_crit_edge, label %cond_true81.i |
||||
|
||||
bb60.i.HWrite.exit_crit_edge: ; preds = %bb60.i |
||||
br label %HWrite.exit |
||||
|
||||
cond_true81.i: ; preds = %bb60.i |
||||
br label %bb413 |
||||
|
||||
HWrite.exit: ; preds = %bb60.i.HWrite.exit_crit_edge, %cond_next404.HWrite.exit_crit_edge |
||||
br label %bb413 |
||||
|
||||
bb413: ; preds = %HWrite.exit, %cond_true81.i, %bb.i22, %bb391.bb413_crit_edge |
||||
br i1 false, label %bb442.preheader.loopexit, label %bb413.bb391_crit_edge |
||||
|
||||
bb413.bb391_crit_edge: ; preds = %bb413 |
||||
br label %bb391 |
||||
|
||||
bb442.preheader.loopexit: ; preds = %bb413 |
||||
br label %bb442.preheader |
||||
|
||||
bb442.preheader: ; preds = %bb442.preheader.loopexit, %bb390.bb442.preheader_crit_edge |
||||
br label %bb442.outer |
||||
|
||||
bb420: ; preds = %bb442 |
||||
br i1 false, label %bb439.loopexit, label %cond_next433 |
||||
|
||||
cond_next433: ; preds = %bb420 |
||||
br i1 false, label %cond_next433.HRead.exit.loopexit_crit_edge, label %cond_next.i |
||||
|
||||
cond_next433.HRead.exit.loopexit_crit_edge: ; preds = %cond_next433 |
||||
br label %HRead.exit.loopexit |
||||
|
||||
cond_next.i: ; preds = %cond_next433 |
||||
br i1 false, label %cond_true9.i, label %cond_false223.i |
||||
|
||||
cond_true9.i: ; preds = %cond_next.i |
||||
switch i32 0, label %cond_false.i [ |
||||
i32 1, label %cond_true9.i.cond_true15.i_crit_edge |
||||
i32 5, label %cond_true9.i.cond_true15.i_crit_edge9 |
||||
] |
||||
|
||||
cond_true9.i.cond_true15.i_crit_edge9: ; preds = %cond_true9.i |
||||
br label %cond_true15.i |
||||
|
||||
cond_true9.i.cond_true15.i_crit_edge: ; preds = %cond_true9.i |
||||
br label %cond_true15.i |
||||
|
||||
cond_true15.i: ; preds = %cond_true9.i.cond_true15.i_crit_edge, %cond_true9.i.cond_true15.i_crit_edge9 |
||||
br i1 false, label %cond_true15.i.cond_true44.i_crit_edge, label %cond_true15.i.cond_false49.i_crit_edge |
||||
|
||||
cond_true15.i.cond_false49.i_crit_edge: ; preds = %cond_true15.i |
||||
br label %cond_false49.i |
||||
|
||||
cond_true15.i.cond_true44.i_crit_edge: ; preds = %cond_true15.i |
||||
br label %cond_true44.i |
||||
|
||||
cond_false.i: ; preds = %cond_true9.i |
||||
br i1 false, label %cond_false.i.cond_next39.i_crit_edge, label %cond_true30.i |
||||
|
||||
cond_false.i.cond_next39.i_crit_edge: ; preds = %cond_false.i |
||||
br label %cond_next39.i |
||||
|
||||
cond_true30.i: ; preds = %cond_false.i |
||||
br label %cond_next39.i |
||||
|
||||
cond_next39.i: ; preds = %cond_true30.i, %cond_false.i.cond_next39.i_crit_edge |
||||
br i1 false, label %cond_next39.i.cond_true44.i_crit_edge, label %cond_next39.i.cond_false49.i_crit_edge |
||||
|
||||
cond_next39.i.cond_false49.i_crit_edge: ; preds = %cond_next39.i |
||||
br label %cond_false49.i |
||||
|
||||
cond_next39.i.cond_true44.i_crit_edge: ; preds = %cond_next39.i |
||||
br label %cond_true44.i |
||||
|
||||
cond_true44.i: ; preds = %cond_next39.i.cond_true44.i_crit_edge, %cond_true15.i.cond_true44.i_crit_edge |
||||
br i1 false, label %cond_true44.i.cond_next70.i_crit_edge, label %cond_true44.i.cond_true61.i_crit_edge |
||||
|
||||
cond_true44.i.cond_true61.i_crit_edge: ; preds = %cond_true44.i |
||||
br label %cond_true61.i |
||||
|
||||
cond_true44.i.cond_next70.i_crit_edge: ; preds = %cond_true44.i |
||||
br label %cond_next70.i |
||||
|
||||
cond_false49.i: ; preds = %cond_next39.i.cond_false49.i_crit_edge, %cond_true15.i.cond_false49.i_crit_edge |
||||
br i1 false, label %cond_false49.i.cond_next70.i_crit_edge, label %cond_false49.i.cond_true61.i_crit_edge |
||||
|
||||
cond_false49.i.cond_true61.i_crit_edge: ; preds = %cond_false49.i |
||||
br label %cond_true61.i |
||||
|
||||
cond_false49.i.cond_next70.i_crit_edge: ; preds = %cond_false49.i |
||||
br label %cond_next70.i |
||||
|
||||
cond_true61.i: ; preds = %cond_false49.i.cond_true61.i_crit_edge, %cond_true44.i.cond_true61.i_crit_edge |
||||
br i1 false, label %cond_true61.i.cond_next70.i_crit_edge, label %cond_true67.i |
||||
|
||||
cond_true61.i.cond_next70.i_crit_edge: ; preds = %cond_true61.i |
||||
br label %cond_next70.i |
||||
|
||||
cond_true67.i: ; preds = %cond_true61.i |
||||
br label %cond_next70.i |
||||
|
||||
cond_next70.i: ; preds = %cond_true67.i, %cond_true61.i.cond_next70.i_crit_edge, %cond_false49.i.cond_next70.i_crit_edge, %cond_true44.i.cond_next70.i_crit_edge |
||||
br i1 false, label %cond_true77.i, label %cond_next81.i |
||||
|
||||
cond_true77.i: ; preds = %cond_next70.i |
||||
br label %bb442.outer.backedge |
||||
|
||||
cond_next81.i: ; preds = %cond_next70.i |
||||
br i1 false, label %cond_true87.i, label %cond_false94.i |
||||
|
||||
cond_true87.i: ; preds = %cond_next81.i |
||||
br i1 false, label %cond_true87.i.cond_true130.i_crit_edge, label %cond_true87.i.cond_next135.i_crit_edge |
||||
|
||||
cond_true87.i.cond_next135.i_crit_edge: ; preds = %cond_true87.i |
||||
br label %cond_next135.i |
||||
|
||||
cond_true87.i.cond_true130.i_crit_edge: ; preds = %cond_true87.i |
||||
br label %cond_true130.i |
||||
|
||||
cond_false94.i: ; preds = %cond_next81.i |
||||
switch i32 0, label %cond_false94.i.cond_next125.i_crit_edge [ |
||||
i32 1, label %cond_false94.i.cond_true100.i_crit_edge |
||||
i32 5, label %cond_false94.i.cond_true100.i_crit_edge10 |
||||
] |
||||
|
||||
cond_false94.i.cond_true100.i_crit_edge10: ; preds = %cond_false94.i |
||||
br label %cond_true100.i |
||||
|
||||
cond_false94.i.cond_true100.i_crit_edge: ; preds = %cond_false94.i |
||||
br label %cond_true100.i |
||||
|
||||
cond_false94.i.cond_next125.i_crit_edge: ; preds = %cond_false94.i |
||||
br label %cond_next125.i |
||||
|
||||
cond_true100.i: ; preds = %cond_false94.i.cond_true100.i_crit_edge, %cond_false94.i.cond_true100.i_crit_edge10 |
||||
br i1 false, label %cond_true107.i, label %cond_true100.i.cond_next109.i_crit_edge |
||||
|
||||
cond_true100.i.cond_next109.i_crit_edge: ; preds = %cond_true100.i |
||||
br label %cond_next109.i |
||||
|
||||
cond_true107.i: ; preds = %cond_true100.i |
||||
br label %cond_next109.i |
||||
|
||||
cond_next109.i: ; preds = %cond_true107.i, %cond_true100.i.cond_next109.i_crit_edge |
||||
br i1 false, label %cond_next109.i.cond_next125.i_crit_edge, label %cond_true116.i |
||||
|
||||
cond_next109.i.cond_next125.i_crit_edge: ; preds = %cond_next109.i |
||||
br label %cond_next125.i |
||||
|
||||
cond_true116.i: ; preds = %cond_next109.i |
||||
br label %cond_next125.i |
||||
|
||||
cond_next125.i: ; preds = %cond_true116.i, %cond_next109.i.cond_next125.i_crit_edge, %cond_false94.i.cond_next125.i_crit_edge |
||||
br i1 false, label %cond_next125.i.cond_true130.i_crit_edge, label %cond_next125.i.cond_next135.i_crit_edge |
||||
|
||||
cond_next125.i.cond_next135.i_crit_edge: ; preds = %cond_next125.i |
||||
br label %cond_next135.i |
||||
|
||||
cond_next125.i.cond_true130.i_crit_edge: ; preds = %cond_next125.i |
||||
br label %cond_true130.i |
||||
|
||||
cond_true130.i: ; preds = %cond_next125.i.cond_true130.i_crit_edge, %cond_true87.i.cond_true130.i_crit_edge |
||||
br label %cond_next135.i |
||||
|
||||
cond_next135.i: ; preds = %cond_true130.i, %cond_next125.i.cond_next135.i_crit_edge, %cond_true87.i.cond_next135.i_crit_edge |
||||
br i1 false, label %cond_true142.i, label %cond_next135.i.cond_next149.i_crit_edge |
||||
|
||||
cond_next135.i.cond_next149.i_crit_edge: ; preds = %cond_next135.i |
||||
br label %cond_next149.i |
||||
|
||||
cond_true142.i: ; preds = %cond_next135.i |
||||
br label %cond_next149.i |
||||
|
||||
cond_next149.i: ; preds = %cond_true142.i, %cond_next135.i.cond_next149.i_crit_edge |
||||
br i1 false, label %cond_true156.i, label %cond_next149.i.cond_next163.i_crit_edge |
||||
|
||||
cond_next149.i.cond_next163.i_crit_edge: ; preds = %cond_next149.i |
||||
br label %cond_next163.i |
||||
|
||||
cond_true156.i: ; preds = %cond_next149.i |
||||
br label %cond_next163.i |
||||
|
||||
cond_next163.i: ; preds = %cond_true156.i, %cond_next149.i.cond_next163.i_crit_edge |
||||
br i1 false, label %cond_true182.i, label %cond_next163.i.cond_next380.i_crit_edge |
||||
|
||||
cond_next163.i.cond_next380.i_crit_edge: ; preds = %cond_next163.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true182.i: ; preds = %cond_next163.i |
||||
br i1 false, label %cond_true182.i.cond_next380.i_crit_edge, label %cond_true196.i |
||||
|
||||
cond_true182.i.cond_next380.i_crit_edge: ; preds = %cond_true182.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true196.i: ; preds = %cond_true182.i |
||||
br i1 false, label %cond_true210.i, label %cond_true196.i.cond_next380.i_crit_edge |
||||
|
||||
cond_true196.i.cond_next380.i_crit_edge: ; preds = %cond_true196.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true210.i: ; preds = %cond_true196.i |
||||
br i1 false, label %cond_true216.i, label %cond_true210.i.cond_next380.i_crit_edge |
||||
|
||||
cond_true210.i.cond_next380.i_crit_edge: ; preds = %cond_true210.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true216.i: ; preds = %cond_true210.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_false223.i: ; preds = %cond_next.i |
||||
br i1 false, label %cond_true229.i, label %cond_false355.i |
||||
|
||||
cond_true229.i: ; preds = %cond_false223.i |
||||
br i1 false, label %cond_true229.i.HRead.exit.loopexit_crit_edge, label %cond_next243.i |
||||
|
||||
cond_true229.i.HRead.exit.loopexit_crit_edge: ; preds = %cond_true229.i |
||||
br label %HRead.exit.loopexit |
||||
|
||||
cond_next243.i: ; preds = %cond_true229.i |
||||
br i1 false, label %cond_true248.i, label %cond_false255.i |
||||
|
||||
cond_true248.i: ; preds = %cond_next243.i |
||||
br label %cond_next260.i |
||||
|
||||
cond_false255.i: ; preds = %cond_next243.i |
||||
br label %cond_next260.i |
||||
|
||||
cond_next260.i: ; preds = %cond_false255.i, %cond_true248.i |
||||
br i1 false, label %cond_true267.i, label %cond_next273.i |
||||
|
||||
cond_true267.i: ; preds = %cond_next260.i |
||||
br label %bb442.backedge |
||||
|
||||
bb442.backedge: ; preds = %bb.i, %cond_true267.i |
||||
br label %bb442 |
||||
|
||||
cond_next273.i: ; preds = %cond_next260.i |
||||
br i1 false, label %cond_true281.i, label %cond_next273.i.cond_next288.i_crit_edge |
||||
|
||||
cond_next273.i.cond_next288.i_crit_edge: ; preds = %cond_next273.i |
||||
br label %cond_next288.i |
||||
|
||||
cond_true281.i: ; preds = %cond_next273.i |
||||
br label %cond_next288.i |
||||
|
||||
cond_next288.i: ; preds = %cond_true281.i, %cond_next273.i.cond_next288.i_crit_edge |
||||
br i1 false, label %cond_true295.i, label %cond_next288.i.cond_next302.i_crit_edge |
||||
|
||||
cond_next288.i.cond_next302.i_crit_edge: ; preds = %cond_next288.i |
||||
br label %cond_next302.i |
||||
|
||||
cond_true295.i: ; preds = %cond_next288.i |
||||
br label %cond_next302.i |
||||
|
||||
cond_next302.i: ; preds = %cond_true295.i, %cond_next288.i.cond_next302.i_crit_edge |
||||
br i1 false, label %cond_next302.i.cond_next380.i_crit_edge, label %cond_true328.i |
||||
|
||||
cond_next302.i.cond_next380.i_crit_edge: ; preds = %cond_next302.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true328.i: ; preds = %cond_next302.i |
||||
br i1 false, label %cond_true343.i, label %cond_true328.i.cond_next380.i_crit_edge |
||||
|
||||
cond_true328.i.cond_next380.i_crit_edge: ; preds = %cond_true328.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true343.i: ; preds = %cond_true328.i |
||||
br i1 false, label %cond_true349.i, label %cond_true343.i.cond_next380.i_crit_edge |
||||
|
||||
cond_true343.i.cond_next380.i_crit_edge: ; preds = %cond_true343.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_true349.i: ; preds = %cond_true343.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_false355.i: ; preds = %cond_false223.i |
||||
br i1 false, label %cond_false355.i.bb.i_crit_edge, label %cond_next363.i |
||||
|
||||
cond_false355.i.bb.i_crit_edge: ; preds = %cond_false355.i |
||||
br label %bb.i |
||||
|
||||
cond_next363.i: ; preds = %cond_false355.i |
||||
br i1 false, label %bb377.i, label %cond_next363.i.bb.i_crit_edge |
||||
|
||||
cond_next363.i.bb.i_crit_edge: ; preds = %cond_next363.i |
||||
br label %bb.i |
||||
|
||||
bb.i: ; preds = %cond_next363.i.bb.i_crit_edge, %cond_false355.i.bb.i_crit_edge |
||||
br label %bb442.backedge |
||||
|
||||
bb377.i: ; preds = %cond_next363.i |
||||
br label %cond_next380.i |
||||
|
||||
cond_next380.i: ; preds = %bb377.i, %cond_true349.i, %cond_true343.i.cond_next380.i_crit_edge, %cond_true328.i.cond_next380.i_crit_edge, %cond_next302.i.cond_next380.i_crit_edge, %cond_true216.i, %cond_true210.i.cond_next380.i_crit_edge, %cond_true196.i.cond_next380.i_crit_edge, %cond_true182.i.cond_next380.i_crit_edge, %cond_next163.i.cond_next380.i_crit_edge |
||||
br i1 false, label %cond_next380.i.HRead.exit_crit_edge, label %cond_true391.i |
||||
|
||||
cond_next380.i.HRead.exit_crit_edge: ; preds = %cond_next380.i |
||||
br label %HRead.exit |
||||
|
||||
cond_true391.i: ; preds = %cond_next380.i |
||||
br label %bb442.outer.backedge |
||||
|
||||
bb442.outer.backedge: ; preds = %bb439, %cond_true391.i, %cond_true77.i |
||||
br label %bb442.outer |
||||
|
||||
HRead.exit.loopexit: ; preds = %cond_true229.i.HRead.exit.loopexit_crit_edge, %cond_next433.HRead.exit.loopexit_crit_edge |
||||
br label %HRead.exit |
||||
|
||||
HRead.exit: ; preds = %HRead.exit.loopexit, %cond_next380.i.HRead.exit_crit_edge |
||||
br label %bb439 |
||||
|
||||
bb439.loopexit: ; preds = %bb420 |
||||
br label %bb439 |
||||
|
||||
bb439: ; preds = %bb439.loopexit, %HRead.exit |
||||
br label %bb442.outer.backedge |
||||
|
||||
bb442.outer: ; preds = %bb442.outer.backedge, %bb442.preheader |
||||
br label %bb442 |
||||
|
||||
bb442: ; preds = %bb442.outer, %bb442.backedge |
||||
br i1 false, label %bb420, label %bb.loopexit |
||||
} |
||||
|
||||
define void @Invalidate() { |
||||
entry: |
||||
br i1 false, label %cond_false, label %cond_true |
||||
|
||||
cond_true: ; preds = %entry |
||||
br i1 false, label %cond_true40, label %cond_true.cond_next_crit_edge |
||||
|
||||
cond_true.cond_next_crit_edge: ; preds = %cond_true |
||||
br label %cond_next |
||||
|
||||
cond_true40: ; preds = %cond_true |
||||
br label %cond_next |
||||
|
||||
cond_next: ; preds = %cond_true40, %cond_true.cond_next_crit_edge |
||||
br i1 false, label %cond_true68, label %cond_next.cond_next73_crit_edge |
||||
|
||||
cond_next.cond_next73_crit_edge: ; preds = %cond_next |
||||
br label %cond_next73 |
||||
|
||||
cond_true68: ; preds = %cond_next |
||||
br label %cond_next73 |
||||
|
||||
cond_next73: ; preds = %cond_true68, %cond_next.cond_next73_crit_edge |
||||
br i1 false, label %cond_true91, label %cond_next73.cond_next96_crit_edge |
||||
|
||||
cond_next73.cond_next96_crit_edge: ; preds = %cond_next73 |
||||
br label %cond_next96 |
||||
|
||||
cond_true91: ; preds = %cond_next73 |
||||
br label %cond_next96 |
||||
|
||||
cond_next96: ; preds = %cond_true91, %cond_next73.cond_next96_crit_edge |
||||
br i1 false, label %cond_next96.cond_next112_crit_edge, label %cond_true105 |
||||
|
||||
cond_next96.cond_next112_crit_edge: ; preds = %cond_next96 |
||||
br label %cond_next112 |
||||
|
||||
cond_true105: ; preds = %cond_next96 |
||||
br label %cond_next112 |
||||
|
||||
cond_next112: ; preds = %cond_true105, %cond_next96.cond_next112_crit_edge |
||||
br i1 false, label %cond_next112.cond_next127_crit_edge, label %cond_true119 |
||||
|
||||
cond_next112.cond_next127_crit_edge: ; preds = %cond_next112 |
||||
br label %cond_next127 |
||||
|
||||
cond_true119: ; preds = %cond_next112 |
||||
br label %cond_next127 |
||||
|
||||
cond_next127: ; preds = %cond_true119, %cond_next112.cond_next127_crit_edge |
||||
br i1 false, label %cond_next141, label %cond_true134 |
||||
|
||||
cond_true134: ; preds = %cond_next127 |
||||
br i1 false, label %cond_true134.bb161_crit_edge, label %cond_true134.bb_crit_edge |
||||
|
||||
cond_true134.bb_crit_edge: ; preds = %cond_true134 |
||||
br label %bb |
||||
|
||||
cond_true134.bb161_crit_edge: ; preds = %cond_true134 |
||||
br label %bb161 |
||||
|
||||
cond_next141: ; preds = %cond_next127 |
||||
br label %bb154 |
||||
|
||||
bb: ; preds = %bb154.bb_crit_edge, %cond_true134.bb_crit_edge |
||||
br label %bb154 |
||||
|
||||
bb154: ; preds = %bb, %cond_next141 |
||||
br i1 false, label %bb154.bb161_crit_edge, label %bb154.bb_crit_edge |
||||
|
||||
bb154.bb_crit_edge: ; preds = %bb154 |
||||
br label %bb |
||||
|
||||
bb154.bb161_crit_edge: ; preds = %bb154 |
||||
br label %bb161 |
||||
|
||||
bb161: ; preds = %bb154.bb161_crit_edge, %cond_true134.bb161_crit_edge |
||||
br i1 false, label %bb161.cond_next201_crit_edge, label %cond_true198 |
||||
|
||||
bb161.cond_next201_crit_edge: ; preds = %bb161 |
||||
br label %cond_next201 |
||||
|
||||
cond_true198: ; preds = %bb161 |
||||
br label %cond_next201 |
||||
|
||||
cond_next201: ; preds = %cond_true198, %bb161.cond_next201_crit_edge |
||||
br i1 false, label %cond_next212, label %cond_true206 |
||||
|
||||
cond_true206: ; preds = %cond_next201 |
||||
br label %UnifiedReturnBlock |
||||
|
||||
cond_false: ; preds = %entry |
||||
br label %UnifiedReturnBlock |
||||
|
||||
cond_next212: ; preds = %cond_next201 |
||||
br label %UnifiedReturnBlock |
||||
|
||||
UnifiedReturnBlock: ; preds = %cond_next212, %cond_false, %cond_true206 |
||||
ret void |
||||
} |
@ -1,28 +0,0 @@ |
||||
; RUN: opt < %s -postdomfrontier -disable-output |
||||
|
||||
define void @args_out_of_range() { |
||||
entry: |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb, %entry |
||||
br label %bb |
||||
} |
||||
|
||||
define void @args_out_of_range_3() { |
||||
entry: |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb, %entry |
||||
br label %bb |
||||
} |
||||
|
||||
define void @Feq() { |
||||
entry: |
||||
br i1 false, label %cond_true, label %cond_next |
||||
|
||||
cond_true: ; preds = %entry |
||||
unreachable |
||||
|
||||
cond_next: ; preds = %entry |
||||
unreachable |
||||
} |
@ -1,3 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
@ -1,14 +0,0 @@ |
||||
; RUN: opt < %s -postdomtree -analyze | grep entry |
||||
; PR932 |
||||
|
||||
define void @foo(i1 %x) { |
||||
entry: |
||||
br i1 %x, label %bb1, label %bb0 |
||||
bb0: ; preds = %entry, bb0 |
||||
br label %bb0 |
||||
bb1: ; preds = %entry |
||||
br label %bb2 |
||||
bb2: ; preds = %bb1 |
||||
ret void |
||||
} |
||||
|
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -postdomtree -analyze | FileCheck %s |
||||
define internal void @f() { |
||||
entry: |
||||
br i1 undef, label %bb35, label %bb3.i |
||||
|
||||
bb3.i: |
||||
br label %bb3.i |
||||
|
||||
bb35.loopexit3: |
||||
br label %bb35 |
||||
|
||||
bb35: |
||||
ret void |
||||
} |
||||
; CHECK: [3] %entry |
@ -1,19 +0,0 @@ |
||||
; RUN: opt < %s -postdomtree -analyze | FileCheck %s |
||||
define internal void @f() { |
||||
entry: |
||||
br i1 undef, label %a, label %bb3.i |
||||
|
||||
a: |
||||
br i1 undef, label %bb35, label %bb3.i |
||||
|
||||
bb3.i: |
||||
br label %bb3.i |
||||
|
||||
|
||||
bb35.loopexit3: |
||||
br label %bb35 |
||||
|
||||
bb35: |
||||
ret void |
||||
} |
||||
; CHECK: [4] %entry |
@ -1,147 +0,0 @@ |
||||
; RUN: opt < %s -postdomtree -analyze | FileCheck %s |
||||
define internal void @f() { |
||||
entry: |
||||
br i1 undef, label %bb35, label %bb3.i |
||||
|
||||
bb3.i: |
||||
br label %bb3.i |
||||
|
||||
bb: |
||||
br label %bb35 |
||||
|
||||
bb.i: |
||||
br label %bb35 |
||||
|
||||
_float32_unpack.exit: |
||||
br label %bb35 |
||||
|
||||
bb.i5: |
||||
br label %bb35 |
||||
|
||||
_float32_unpack.exit8: |
||||
br label %bb35 |
||||
|
||||
bb32.preheader: |
||||
br label %bb35 |
||||
|
||||
bb3: |
||||
br label %bb35 |
||||
|
||||
bb3.split.us: |
||||
br label %bb35 |
||||
|
||||
bb.i4.us: |
||||
br label %bb35 |
||||
|
||||
bb7.i.us: |
||||
br label %bb35 |
||||
|
||||
bb.i4.us.backedge: |
||||
br label %bb35 |
||||
|
||||
bb1.i.us: |
||||
br label %bb35 |
||||
|
||||
bb6.i.us: |
||||
br label %bb35 |
||||
|
||||
bb4.i.us: |
||||
br label %bb35 |
||||
|
||||
bb8.i.us: |
||||
br label %bb35 |
||||
|
||||
bb3.i.loopexit.us: |
||||
br label %bb35 |
||||
|
||||
bb.nph21: |
||||
br label %bb35 |
||||
|
||||
bb4: |
||||
br label %bb35 |
||||
|
||||
bb5: |
||||
br label %bb35 |
||||
|
||||
bb14.preheader: |
||||
br label %bb35 |
||||
|
||||
bb.nph18: |
||||
br label %bb35 |
||||
|
||||
bb8.us.preheader: |
||||
br label %bb35 |
||||
|
||||
bb8.preheader: |
||||
br label %bb35 |
||||
|
||||
bb8.us: |
||||
br label %bb35 |
||||
|
||||
bb8: |
||||
br label %bb35 |
||||
|
||||
bb15.loopexit: |
||||
br label %bb35 |
||||
|
||||
bb15.loopexit2: |
||||
br label %bb35 |
||||
|
||||
bb15: |
||||
br label %bb35 |
||||
|
||||
bb16: |
||||
br label %bb35 |
||||
|
||||
bb17.loopexit.split: |
||||
br label %bb35 |
||||
|
||||
bb.nph14: |
||||
br label %bb35 |
||||
|
||||
bb19: |
||||
br label %bb35 |
||||
|
||||
bb20: |
||||
br label %bb35 |
||||
|
||||
bb29.preheader: |
||||
br label %bb35 |
||||
|
||||
bb.nph: |
||||
br label %bb35 |
||||
|
||||
bb23.us.preheader: |
||||
br label %bb35 |
||||
|
||||
bb23.preheader: |
||||
br label %bb35 |
||||
|
||||
bb23.us: |
||||
br label %bb35 |
||||
|
||||
bb23: |
||||
br label %bb35 |
||||
|
||||
bb30.loopexit: |
||||
br label %bb35 |
||||
|
||||
bb30.loopexit1: |
||||
br label %bb35 |
||||
|
||||
bb30: |
||||
br label %bb35 |
||||
|
||||
bb31: |
||||
br label %bb35 |
||||
|
||||
bb35.loopexit: |
||||
br label %bb35 |
||||
|
||||
bb35.loopexit3: |
||||
br label %bb35 |
||||
|
||||
bb35: |
||||
ret void |
||||
} |
||||
; CHECK: [3] %entry |
@ -1,24 +0,0 @@ |
||||
; RUN: opt < %s -postdomtree -analyze | FileCheck %s |
||||
define internal void @f() { |
||||
entry: |
||||
br i1 1, label %a, label %b |
||||
|
||||
a: |
||||
br label %c |
||||
|
||||
b: |
||||
br label %c |
||||
|
||||
c: |
||||
br i1 undef, label %bb35, label %bb3.i |
||||
|
||||
bb3.i: |
||||
br label %bb3.i |
||||
|
||||
bb35.loopexit3: |
||||
br label %bb35 |
||||
|
||||
bb35: |
||||
ret void |
||||
} |
||||
; CHECK: [4] %entry |
@ -1,4 +0,0 @@ |
||||
load_lib llvm.exp |
||||
|
||||
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |
||||
|
@ -1,139 +0,0 @@ |
||||
; Test the edge profiling instrumentation. |
||||
; RUN: opt < %s -insert-edge-profiling -S | FileCheck %s |
||||
|
||||
; ModuleID = '<stdin>' |
||||
|
||||
@.str = private constant [12 x i8] c"hello world\00", align 1 ; <[12 x i8]*> [#uses=1] |
||||
@.str1 = private constant [6 x i8] c"franz\00", align 1 ; <[6 x i8]*> [#uses=1] |
||||
@.str2 = private constant [9 x i8] c"argc > 2\00", align 1 ; <[9 x i8]*> [#uses=1] |
||||
@.str3 = private constant [9 x i8] c"argc = 1\00", align 1 ; <[9 x i8]*> [#uses=1] |
||||
@.str4 = private constant [6 x i8] c"fritz\00", align 1 ; <[6 x i8]*> [#uses=1] |
||||
@.str5 = private constant [10 x i8] c"argc <= 1\00", align 1 ; <[10 x i8]*> [#uses=1] |
||||
; CHECK:@EdgeProfCounters |
||||
; CHECK:[19 x i32] |
||||
; CHECK:zeroinitializer |
||||
|
||||
define void @oneblock() nounwind { |
||||
entry: |
||||
; CHECK:entry: |
||||
; CHECK:%OldFuncCounter |
||||
; CHECK:load |
||||
; CHECK:getelementptr |
||||
; CHECK:@EdgeProfCounters |
||||
; CHECK:i32 0 |
||||
; CHECK:i32 0 |
||||
; CHECK:%NewFuncCounter |
||||
; CHECK:add |
||||
; CHECK:%OldFuncCounter |
||||
; CHECK:store |
||||
; CHECK:%NewFuncCounter |
||||
; CHECK:getelementptr |
||||
; CHECK:@EdgeProfCounters |
||||
%0 = call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
ret void |
||||
} |
||||
|
||||
declare i32 @puts(i8*) |
||||
|
||||
define i32 @main(i32 %argc, i8** %argv) nounwind { |
||||
entry: |
||||
; CHECK:entry: |
||||
%argc_addr = alloca i32 ; <i32*> [#uses=4] |
||||
%argv_addr = alloca i8** ; <i8***> [#uses=1] |
||||
%retval = alloca i32 ; <i32*> [#uses=2] |
||||
%j = alloca i32 ; <i32*> [#uses=4] |
||||
%i = alloca i32 ; <i32*> [#uses=4] |
||||
%0 = alloca i32 ; <i32*> [#uses=2] |
||||
; CHECK:call |
||||
; CHECK:@llvm_start_edge_profiling |
||||
; CHECK:@EdgeProfCounters |
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] |
||||
store i32 %argc, i32* %argc_addr |
||||
store i8** %argv, i8*** %argv_addr |
||||
store i32 0, i32* %i, align 4 |
||||
br label %bb10 |
||||
|
||||
bb: ; preds = %bb10 |
||||
; CHECK:bb: |
||||
%1 = load i32* %argc_addr, align 4 ; <i32> [#uses=1] |
||||
%2 = icmp sgt i32 %1, 1 ; <i1> [#uses=1] |
||||
br i1 %2, label %bb1, label %bb8 |
||||
|
||||
bb1: ; preds = %bb |
||||
; CHECK:bb1: |
||||
store i32 0, i32* %j, align 4 |
||||
br label %bb6 |
||||
|
||||
bb2: ; preds = %bb6 |
||||
; CHECK:bb2: |
||||
%3 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str1, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
%4 = load i32* %argc_addr, align 4 ; <i32> [#uses=1] |
||||
%5 = icmp sgt i32 %4, 2 ; <i1> [#uses=1] |
||||
br i1 %5, label %bb3, label %bb4 |
||||
|
||||
bb3: ; preds = %bb2 |
||||
; CHECK:bb3: |
||||
%6 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
br label %bb5 |
||||
|
||||
bb4: ; preds = %bb2 |
||||
; CHECK:bb4: |
||||
%7 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str3, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
br label %bb11 |
||||
|
||||
bb5: ; preds = %bb3 |
||||
; CHECK:bb5: |
||||
%8 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str4, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
%9 = load i32* %j, align 4 ; <i32> [#uses=1] |
||||
%10 = add nsw i32 %9, 1 ; <i32> [#uses=1] |
||||
store i32 %10, i32* %j, align 4 |
||||
br label %bb6 |
||||
|
||||
bb6: ; preds = %bb5, %bb1 |
||||
; CHECK:bb6: |
||||
%11 = load i32* %j, align 4 ; <i32> [#uses=1] |
||||
%12 = load i32* %argc_addr, align 4 ; <i32> [#uses=1] |
||||
%13 = icmp slt i32 %11, %12 ; <i1> [#uses=1] |
||||
br i1 %13, label %bb2, label %bb7 |
||||
|
||||
bb7: ; preds = %bb6 |
||||
; CHECK:bb7: |
||||
br label %bb9 |
||||
|
||||
bb8: ; preds = %bb |
||||
; CHECK:bb8: |
||||
%14 = call i32 @puts(i8* getelementptr inbounds ([10 x i8]* @.str5, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
br label %bb9 |
||||
|
||||
bb9: ; preds = %bb8, %bb7 |
||||
; CHECK:bb9: |
||||
%15 = load i32* %i, align 4 ; <i32> [#uses=1] |
||||
%16 = add nsw i32 %15, 1 ; <i32> [#uses=1] |
||||
store i32 %16, i32* %i, align 4 |
||||
br label %bb10 |
||||
|
||||
bb10: ; preds = %bb9, %entry |
||||
; CHECK:bb10: |
||||
%17 = load i32* %i, align 4 ; <i32> [#uses=1] |
||||
%18 = icmp ne i32 %17, 3 ; <i1> [#uses=1] |
||||
br i1 %18, label %bb, label %bb11 |
||||
; CHECK:br |
||||
; CHECK:label %bb10.bb11_crit_edge |
||||
|
||||
; CHECK:bb10.bb11_crit_edge: |
||||
; CHECK:br |
||||
; CHECK:label %bb11 |
||||
|
||||
bb11: ; preds = %bb10, %bb4 |
||||
; CHECK:bb11: |
||||
call void @oneblock() nounwind |
||||
store i32 0, i32* %0, align 4 |
||||
%19 = load i32* %0, align 4 ; <i32> [#uses=1] |
||||
store i32 %19, i32* %retval, align 4 |
||||
br label %return |
||||
|
||||
return: ; preds = %bb11 |
||||
; CHECK:return: |
||||
%retval12 = load i32* %retval ; <i32> [#uses=1] |
||||
ret i32 %retval12 |
||||
} |
@ -1,212 +0,0 @@ |
||||
; RUN: llvm-as %s -o %t1 |
||||
|
||||
; FIXME: The RUX parts of the test are disabled for now, they aren't working on |
||||
; llvm-gcc-x86_64-darwin10-selfhost. |
||||
|
||||
; Test the edge optimal profiling instrumentation. |
||||
; RUN: opt %t1 -insert-optimal-edge-profiling -o %t2 |
||||
; RUX: llvm-dis < %t2 | FileCheck --check-prefix=INST %s |
||||
|
||||
; Test the creation, reading and displaying of profile |
||||
; RUX: rm -f llvmprof.out |
||||
; RUX: lli -load %llvmlibsdir/profile_rt%shlibext %t2 |
||||
; RUX: lli -load %llvmlibsdir/profile_rt%shlibext %t2 1 2 |
||||
; RUX: llvm-prof -print-all-code %t1 | FileCheck --check-prefix=PROF %s |
||||
|
||||
; Test the loaded profile also with verifier. |
||||
; RUX opt %t1 -profile-loader -profile-verifier -o %t3 |
||||
|
||||
; Test profile estimator. |
||||
; RUN: opt %t1 -profile-estimator -profile-verifier -o %t3 |
||||
|
||||
; PROF: 1. 2/4 oneblock |
||||
; PROF: 2. 2/4 main |
||||
; PROF: 1. 15.7895% 12/76 main() - bb6 |
||||
; PROF: 2. 11.8421% 9/76 main() - bb2 |
||||
; PROF: 3. 11.8421% 9/76 main() - bb3 |
||||
; PROF: 4. 11.8421% 9/76 main() - bb5 |
||||
; PROF: 5. 10.5263% 8/76 main() - bb10 |
||||
; PROF: 6. 7.89474% 6/76 main() - bb |
||||
; PROF: 7. 7.89474% 6/76 main() - bb9 |
||||
; PROF: 8. 3.94737% 3/76 main() - bb1 |
||||
; PROF: 9. 3.94737% 3/76 main() - bb7 |
||||
; PROF: 10. 3.94737% 3/76 main() - bb8 |
||||
; PROF: 11. 2.63158% 2/76 oneblock() - entry |
||||
; PROF: 12. 2.63158% 2/76 main() - entry |
||||
; PROF: 13. 2.63158% 2/76 main() - bb11 |
||||
; PROF: 14. 2.63158% 2/76 main() - return |
||||
|
||||
; ModuleID = '<stdin>' |
||||
|
||||
@.str = private constant [12 x i8] c"hello world\00", align 1 ; <[12 x i8]*> [#uses=1] |
||||
@.str1 = private constant [6 x i8] c"franz\00", align 1 ; <[6 x i8]*> [#uses=1] |
||||
@.str2 = private constant [9 x i8] c"argc > 2\00", align 1 ; <[9 x i8]*> [#uses=1] |
||||
@.str3 = private constant [9 x i8] c"argc = 1\00", align 1 ; <[9 x i8]*> [#uses=1] |
||||
@.str4 = private constant [6 x i8] c"fritz\00", align 1 ; <[6 x i8]*> [#uses=1] |
||||
@.str5 = private constant [10 x i8] c"argc <= 1\00", align 1 ; <[10 x i8]*> [#uses=1] |
||||
; INST:@OptEdgeProfCounters |
||||
; INST:[21 x i32] |
||||
; INST:[i32 0, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 0, |
||||
; INST:i32 0, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 0, |
||||
; INST:i32 0, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1, |
||||
; INST:i32 0, |
||||
; INST:i32 -1, |
||||
; INST:i32 -1] |
||||
|
||||
; PROF:;;; %oneblock called 2 times. |
||||
; PROF:;;; |
||||
define void @oneblock() nounwind { |
||||
entry: |
||||
; PROF:entry: |
||||
; PROF: ;;; Basic block executed 2 times. |
||||
%0 = call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
ret void |
||||
} |
||||
|
||||
declare i32 @puts(i8*) |
||||
|
||||
; PROF:;;; %main called 2 times. |
||||
; PROF:;;; |
||||
define i32 @main(i32 %argc, i8** %argv) nounwind { |
||||
entry: |
||||
; PROF:entry: |
||||
; PROF: ;;; Basic block executed 2 times. |
||||
%argc_addr = alloca i32 ; <i32*> [#uses=4] |
||||
%argv_addr = alloca i8** ; <i8***> [#uses=1] |
||||
%retval = alloca i32 ; <i32*> [#uses=2] |
||||
%j = alloca i32 ; <i32*> [#uses=4] |
||||
%i = alloca i32 ; <i32*> [#uses=4] |
||||
%0 = alloca i32 ; <i32*> [#uses=2] |
||||
; INST:call |
||||
; INST:@llvm_start_opt_edge_profiling |
||||
; INST:@OptEdgeProfCounters |
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] |
||||
store i32 %argc, i32* %argc_addr |
||||
store i8** %argv, i8*** %argv_addr |
||||
store i32 0, i32* %i, align 4 |
||||
br label %bb10 |
||||
; PROF: ;;; Out-edge counts: [2.000000e+00 -> bb10] |
||||
|
||||
bb: ; preds = %bb10 |
||||
; PROF:bb: |
||||
; PROF: ;;; Basic block executed 6 times. |
||||
%1 = load i32* %argc_addr, align 4 ; <i32> [#uses=1] |
||||
%2 = icmp sgt i32 %1, 1 ; <i1> [#uses=1] |
||||
br i1 %2, label %bb1, label %bb8 |
||||
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb1] [3.000000e+00 -> bb8] |
||||
|
||||
bb1: ; preds = %bb |
||||
; PROF:bb1: |
||||
; PROF: ;;; Basic block executed 3 times. |
||||
store i32 0, i32* %j, align 4 |
||||
br label %bb6 |
||||
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb6] |
||||
|
||||
bb2: ; preds = %bb6 |
||||
; PROF:bb2: |
||||
; PROF: ;;; Basic block executed 9 times. |
||||
%3 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str1, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
%4 = load i32* %argc_addr, align 4 ; <i32> [#uses=1] |
||||
%5 = icmp sgt i32 %4, 2 ; <i1> [#uses=1] |
||||
br i1 %5, label %bb3, label %bb4 |
||||
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb3] |
||||
|
||||
bb3: ; preds = %bb2 |
||||
; PROF:bb3: |
||||
; PROF: ;;; Basic block executed 9 times. |
||||
%6 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
br label %bb5 |
||||
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb5] |
||||
|
||||
bb4: ; preds = %bb2 |
||||
; PROF:bb4: |
||||
; PROF: ;;; Never executed! |
||||
%7 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str3, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
br label %bb11 |
||||
|
||||
bb5: ; preds = %bb3 |
||||
; PROF:bb5: |
||||
; PROF: ;;; Basic block executed 9 times. |
||||
%8 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str4, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
%9 = load i32* %j, align 4 ; <i32> [#uses=1] |
||||
%10 = add nsw i32 %9, 1 ; <i32> [#uses=1] |
||||
store i32 %10, i32* %j, align 4 |
||||
br label %bb6 |
||||
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb6] |
||||
|
||||
bb6: ; preds = %bb5, %bb1 |
||||
; PROF:bb6: |
||||
; PROF: ;;; Basic block executed 12 times. |
||||
%11 = load i32* %j, align 4 ; <i32> [#uses=1] |
||||
%12 = load i32* %argc_addr, align 4 ; <i32> [#uses=1] |
||||
%13 = icmp slt i32 %11, %12 ; <i1> [#uses=1] |
||||
br i1 %13, label %bb2, label %bb7 |
||||
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb2] [3.000000e+00 -> bb7] |
||||
|
||||
bb7: ; preds = %bb6 |
||||
; PROF:bb7: |
||||
; PROF: ;;; Basic block executed 3 times. |
||||
br label %bb9 |
||||
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb9] |
||||
|
||||
bb8: ; preds = %bb |
||||
; PROF:bb8: |
||||
; PROF: ;;; Basic block executed 3 times. |
||||
%14 = call i32 @puts(i8* getelementptr inbounds ([10 x i8]* @.str5, i64 0, i64 0)) nounwind ; <i32> [#uses=0] |
||||
br label %bb9 |
||||
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb9] |
||||
|
||||
bb9: ; preds = %bb8, %bb7 |
||||
; PROF:bb9: |
||||
; PROF: ;;; Basic block executed 6 times. |
||||
%15 = load i32* %i, align 4 ; <i32> [#uses=1] |
||||
%16 = add nsw i32 %15, 1 ; <i32> [#uses=1] |
||||
store i32 %16, i32* %i, align 4 |
||||
br label %bb10 |
||||
; PROF: ;;; Out-edge counts: [6.000000e+00 -> bb10] |
||||
|
||||
bb10: ; preds = %bb9, %entry |
||||
; PROF:bb10: |
||||
; PROF: ;;; Basic block executed 8 times. |
||||
%17 = load i32* %i, align 4 ; <i32> [#uses=1] |
||||
%18 = icmp ne i32 %17, 3 ; <i1> [#uses=1] |
||||
br i1 %18, label %bb, label %bb11 |
||||
; INST:br |
||||
; INST:label %bb10.bb11_crit_edge |
||||
; PROF: ;;; Out-edge counts: [6.000000e+00 -> bb] [2.000000e+00 -> bb11] |
||||
|
||||
; INST:bb10.bb11_crit_edge: |
||||
; INST:br |
||||
; INST:label %bb11 |
||||
|
||||
bb11: ; preds = %bb10, %bb4 |
||||
; PROF:bb11: |
||||
; PROF: ;;; Basic block executed 2 times. |
||||
call void @oneblock() nounwind |
||||
store i32 0, i32* %0, align 4 |
||||
%19 = load i32* %0, align 4 ; <i32> [#uses=1] |
||||
store i32 %19, i32* %retval, align 4 |
||||
br label %return |
||||
; PROF: ;;; Out-edge counts: [2.000000e+00 -> return] |
||||
|
||||
return: ; preds = %bb11 |
||||
; PROF:return: |
||||
; PROF: ;;; Basic block executed 2 times. |
||||
%retval12 = load i32* %retval ; <i32> [#uses=1] |
||||
ret i32 %retval12 |
||||
} |
@ -1,21 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | grep {Loop %bb: backedge-taken count is 100} |
||||
; PR1533 |
||||
|
||||
@array = weak global [101 x i32] zeroinitializer, align 32 ; <[100 x i32]*> [#uses=1] |
||||
|
||||
define void @loop(i32 %x) { |
||||
entry: |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb, %entry |
||||
%i.01.0 = phi i32 [ 100, %entry ], [ %tmp4, %bb ] ; <i32> [#uses=2] |
||||
%tmp1 = getelementptr [101 x i32]* @array, i32 0, i32 %i.01.0 ; <i32*> [#uses=1] |
||||
store i32 %x, i32* %tmp1 |
||||
%tmp4 = add i32 %i.01.0, -1 ; <i32> [#uses=2] |
||||
%tmp7 = icmp sgt i32 %tmp4, -1 ; <i1> [#uses=1] |
||||
br i1 %tmp7, label %bb, label %return |
||||
|
||||
return: ; preds = %bb |
||||
ret void |
||||
} |
@ -1,18 +0,0 @@ |
||||
; RUN: opt < %s -indvars -adce -simplifycfg -S | grep "icmp s" |
||||
; PR1598 |
||||
|
||||
define i32 @f(i32 %a, i32 %b, i32 %x, i32 %y) { |
||||
entry: |
||||
%tmp3 = icmp eq i32 %a, %b ; <i1> [#uses=1] |
||||
br i1 %tmp3, label %return, label %bb |
||||
|
||||
bb: ; preds = %bb, %entry |
||||
%x_addr.0 = phi i32 [ %tmp6, %bb ], [ %x, %entry ] ; <i32> [#uses=1] |
||||
%tmp6 = add i32 %x_addr.0, 1 ; <i32> [#uses=3] |
||||
%tmp9 = icmp slt i32 %tmp6, %y ; <i1> [#uses=1] |
||||
br i1 %tmp9, label %bb, label %return |
||||
|
||||
return: ; preds = %bb, %entry |
||||
%x_addr.1 = phi i32 [ %x, %entry ], [ %tmp6, %bb ] ; <i32> [#uses=1] |
||||
ret i32 %x_addr.1 |
||||
} |
@ -1,30 +0,0 @@ |
||||
; RUN: opt < %s -scalar-evolution -analyze | grep {Loop %bb: backedge-taken count is (-1 + (-1 \\* %x) + %y)} |
||||
; PR1597 |
||||
|
||||
define i32 @f(i32 %x, i32 %y) { |
||||
entry: |
||||
%tmp63 = icmp ult i32 %x, %y ; <i1> [#uses=1] |
||||
br i1 %tmp63, label %bb.preheader, label %bb8 |
||||
|
||||
bb.preheader: ; preds = %entry |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb3, %bb.preheader |
||||
%x_addr.0 = phi i32 [ %tmp2, %bb3 ], [ %x, %bb.preheader ] ; <i32> [#uses=1] |
||||
%tmp2 = add i32 %x_addr.0, 1 ; <i32> [#uses=3] |
||||
br label %bb3 |
||||
|
||||
bb3: ; preds = %bb |
||||
%tmp6 = icmp ult i32 %tmp2, %y ; <i1> [#uses=1] |
||||
br i1 %tmp6, label %bb, label %bb8.loopexit |
||||
|
||||
bb8.loopexit: ; preds = %bb3 |
||||
br label %bb8 |
||||
|
||||
bb8: ; preds = %bb8.loopexit, %entry |
||||
%x_addr.1 = phi i32 [ %x, %entry ], [ %tmp2, %bb8.loopexit ] ; <i32> [#uses=1] |
||||
br label %return |
||||
|
||||
return: ; preds = %bb8 |
||||
ret i32 %x_addr.1 |
||||
} |
@ -1,22 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | grep {backedge-taken count is 13} |
||||
; PR1706 |
||||
|
||||
define i32 @f() { |
||||
entry: |
||||
br label %bb5 |
||||
|
||||
bb: ; preds = %bb5 |
||||
%tmp2 = shl i32 %j.0, 1 ; <i32> [#uses=1] |
||||
%tmp4 = add i32 %i.0, 268435456 ; <i32> [#uses=1] |
||||
br label %bb5 |
||||
|
||||
bb5: ; preds = %bb, %entry |
||||
%j.0 = phi i32 [ 1, %entry ], [ %tmp2, %bb ] ; <i32> [#uses=2] |
||||
%i.0 = phi i32 [ -1879048192, %entry ], [ %tmp4, %bb ] ; <i32> [#uses=2] |
||||
%tmp7 = icmp slt i32 %i.0, 1610612736 ; <i1> [#uses=1] |
||||
br i1 %tmp7, label %bb, label %return |
||||
|
||||
return: ; preds = %bb5 |
||||
ret i32 %j.0 |
||||
} |
@ -1,24 +0,0 @@ |
||||
; RUN: opt < %s -indvars -S | grep printd | grep 1206807378 |
||||
; PR1798 |
||||
|
||||
declare void @printd(i32) |
||||
|
||||
define i32 @test() { |
||||
entry: |
||||
br label %bb6 |
||||
|
||||
bb: ; preds = %bb6 |
||||
%tmp3 = add i32 %x.0, %i.0 ; <i32> [#uses=1] |
||||
%tmp5 = add i32 %i.0, 1 ; <i32> [#uses=1] |
||||
br label %bb6 |
||||
|
||||
bb6: ; preds = %bb, %entry |
||||
%i.0 = phi i32 [ 0, %entry ], [ %tmp5, %bb ] ; <i32> [#uses=3] |
||||
%x.0 = phi i32 [ 0, %entry ], [ %tmp3, %bb ] ; <i32> [#uses=3] |
||||
%tmp8 = icmp slt i32 %i.0, 123456789 ; <i1> [#uses=1] |
||||
br i1 %tmp8, label %bb, label %bb10 |
||||
|
||||
bb10: ; preds = %bb6 |
||||
call void @printd(i32 %x.0) |
||||
ret i32 0 |
||||
} |
@ -1,21 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s |
||||
; PR1810 |
||||
|
||||
define void @fun() { |
||||
entry: |
||||
br label %header |
||||
header: |
||||
%i = phi i32 [ 1, %entry ], [ %i.next, %body ] |
||||
%cond = icmp eq i32 %i, 10 |
||||
br i1 %cond, label %exit, label %body |
||||
body: |
||||
%a = mul i32 %i, 5 |
||||
%b = or i32 %a, 1 |
||||
%i.next = add i32 %i, 1 |
||||
br label %header |
||||
exit: |
||||
ret void |
||||
} |
||||
|
||||
; CHECK: --> %b |
||||
|
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -scalar-evolution -analyze | grep {Loop %header: backedge-taken count is (0 smax %n)} |
||||
|
||||
define void @foo(i32 %n) { |
||||
entry: |
||||
br label %header |
||||
header: |
||||
%i = phi i32 [ 0, %entry ], [ %i.inc, %next ] |
||||
%cond = icmp sgt i32 %n, %i |
||||
br i1 %cond, label %next, label %return |
||||
next: |
||||
%i.inc = add i32 %i, 1 |
||||
br label %header |
||||
return: |
||||
ret void |
||||
} |
@ -1,16 +0,0 @@ |
||||
; RUN: opt < %s -scalar-evolution -analyze | grep {Loop %loop: backedge-taken count is (100 + (-100 smax %n))} |
||||
; PR2002 |
||||
|
||||
define void @foo(i8 %n) { |
||||
entry: |
||||
br label %loop |
||||
loop: |
||||
%i = phi i8 [ -100, %entry ], [ %i.inc, %next ] |
||||
%cond = icmp slt i8 %i, %n |
||||
br i1 %cond, label %next, label %return |
||||
next: |
||||
%i.inc = add i8 %i, 1 |
||||
br label %loop |
||||
return: |
||||
ret void |
||||
} |
@ -1,17 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution | grep umax |
||||
; PR2003 |
||||
|
||||
define i32 @foo(i32 %n) { |
||||
entry: |
||||
br label %header |
||||
header: |
||||
%i = phi i32 [ 100, %entry ], [ %i.inc, %next ] |
||||
%cond = icmp ult i32 %i, %n |
||||
br i1 %cond, label %next, label %return |
||||
next: |
||||
%i.inc = add i32 %i, 1 |
||||
br label %header |
||||
return: |
||||
ret i32 %i |
||||
} |
||||
|
@ -1,22 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | grep {backedge-taken count is 61} |
||||
; PR2364 |
||||
|
||||
define i32 @func_6() nounwind { |
||||
entry: |
||||
br label %bb5 |
||||
|
||||
bb: ; preds = %bb5 |
||||
%tmp2 = add i32 %i.0, 1 ; <i32> [#uses=1] |
||||
%tmp4 = add i8 %x.0, -4 ; <i8> [#uses=1] |
||||
br label %bb5 |
||||
|
||||
bb5: ; preds = %bb, %entry |
||||
%x.0 = phi i8 [ 0, %entry ], [ %tmp4, %bb ] ; <i8> [#uses=2] |
||||
%i.0 = phi i32 [ 0, %entry ], [ %tmp2, %bb ] ; <i32> [#uses=2] |
||||
%tmp7 = icmp eq i8 %x.0, 12 ; <i1> [#uses=1] |
||||
br i1 %tmp7, label %return, label %bb |
||||
|
||||
return: ; preds = %bb5 |
||||
ret i32 %i.0 |
||||
} |
@ -1,43 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution 2>/dev/null |
||||
; PR2433 |
||||
|
||||
define i32 @main1(i32 %argc, i8** %argv) nounwind { |
||||
entry: |
||||
br i1 false, label %bb10, label %bb23 |
||||
|
||||
bb10: ; preds = %bb10, %entry |
||||
%accum.03 = phi i64 [ %tmp14, %bb10 ], [ 0, %entry ] ; <i64> [#uses=1] |
||||
%i.02 = phi i32 [ %tmp16, %bb10 ], [ 0, %entry ] ; <i32> [#uses=1] |
||||
%d.1.01 = phi i64 [ %tmp5.i, %bb10 ], [ 0, %entry ] ; <i64> [#uses=1] |
||||
%tmp5.i = add i64 %d.1.01, 1 ; <i64> [#uses=2] |
||||
%tmp14 = add i64 %accum.03, %tmp5.i ; <i64> [#uses=2] |
||||
%tmp16 = add i32 %i.02, 1 ; <i32> [#uses=2] |
||||
%tmp20 = icmp slt i32 %tmp16, 0 ; <i1> [#uses=1] |
||||
br i1 %tmp20, label %bb10, label %bb23 |
||||
|
||||
bb23: ; preds = %bb10, %entry |
||||
%accum.0.lcssa = phi i64 [ 0, %entry ], [ %tmp14, %bb10 ] ; <i64> [#uses=0] |
||||
ret i32 0 |
||||
} |
||||
|
||||
define i32 @main2(i32 %argc, i8** %argv) { |
||||
entry: |
||||
%tmp8 = tail call i32 @atoi( i8* null ) nounwind readonly ; <i32> [#uses=1] |
||||
br i1 false, label %bb9, label %bb21 |
||||
|
||||
bb9: ; preds = %bb9, %entry |
||||
%accum.03 = phi i64 [ %tmp12, %bb9 ], [ 0, %entry ] ; <i64> [#uses=1] |
||||
%i.02 = phi i32 [ %tmp14, %bb9 ], [ 0, %entry ] ; <i32> [#uses=1] |
||||
%d.1.01 = phi i64 [ %tmp4.i, %bb9 ], [ 0, %entry ] ; <i64> [#uses=1] |
||||
%tmp4.i = add i64 %d.1.01, 1 ; <i64> [#uses=2] |
||||
%tmp12 = add i64 %accum.03, %tmp4.i ; <i64> [#uses=2] |
||||
%tmp14 = add i32 %i.02, 1 ; <i32> [#uses=2] |
||||
%tmp18 = icmp slt i32 %tmp14, %tmp8 ; <i1> [#uses=1] |
||||
br i1 %tmp18, label %bb9, label %bb21 |
||||
|
||||
bb21: ; preds = %bb9, %entry |
||||
%accum.0.lcssa = phi i64 [ 0, %entry ], [ %tmp12, %bb9 ] ; <i64> [#uses=0] |
||||
ret i32 0 |
||||
} |
||||
|
||||
declare i32 @atoi(i8*) nounwind readonly |
@ -1,36 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution |& not grep smax |
||||
; PR2261 |
||||
|
||||
@lut = common global [256 x i8] zeroinitializer, align 32 ; <[256 x i8]*> [#uses=1] |
||||
|
||||
define void @foo(i32 %count, i32* %srcptr, i32* %dstptr) nounwind { |
||||
entry: |
||||
icmp sgt i32 %count, 0 ; <i1>:0 [#uses=1] |
||||
br i1 %0, label %bb.nph, label %return |
||||
|
||||
bb.nph: ; preds = %entry |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb1, %bb.nph |
||||
%j.01 = phi i32 [ %8, %bb1 ], [ 0, %bb.nph ] ; <i32> [#uses=1] |
||||
load i32* %srcptr, align 4 ; <i32>:1 [#uses=2] |
||||
and i32 %1, 255 ; <i32>:2 [#uses=1] |
||||
and i32 %1, -256 ; <i32>:3 [#uses=1] |
||||
getelementptr [256 x i8]* @lut, i32 0, i32 %2 ; <i8*>:4 [#uses=1] |
||||
load i8* %4, align 1 ; <i8>:5 [#uses=1] |
||||
zext i8 %5 to i32 ; <i32>:6 [#uses=1] |
||||
or i32 %6, %3 ; <i32>:7 [#uses=1] |
||||
store i32 %7, i32* %dstptr, align 4 |
||||
add i32 %j.01, 1 ; <i32>:8 [#uses=2] |
||||
br label %bb1 |
||||
|
||||
bb1: ; preds = %bb |
||||
icmp slt i32 %8, %count ; <i1>:9 [#uses=1] |
||||
br i1 %9, label %bb, label %bb1.return_crit_edge |
||||
|
||||
bb1.return_crit_edge: ; preds = %bb1 |
||||
br label %return |
||||
|
||||
return: ; preds = %bb1.return_crit_edge, %entry |
||||
ret void |
||||
} |
@ -1,30 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution |& not grep smax |
||||
; PR2070 |
||||
|
||||
define i32 @a(i32 %x) nounwind { |
||||
entry: |
||||
icmp sgt i32 %x, 1 ; <i1>:0 [#uses=1] |
||||
br i1 %0, label %bb.nph, label %bb2 |
||||
|
||||
bb.nph: ; preds = %entry |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb1, %bb.nph |
||||
%z.02 = phi i32 [ %1, %bb1 ], [ 1, %bb.nph ] ; <i32> [#uses=1] |
||||
%i.01 = phi i32 [ %2, %bb1 ], [ 1, %bb.nph ] ; <i32> [#uses=2] |
||||
mul i32 %z.02, %i.01 ; <i32>:1 [#uses=2] |
||||
add i32 %i.01, 1 ; <i32>:2 [#uses=2] |
||||
br label %bb1 |
||||
|
||||
bb1: ; preds = %bb |
||||
icmp slt i32 %2, %x ; <i1>:3 [#uses=1] |
||||
br i1 %3, label %bb, label %bb1.bb2_crit_edge |
||||
|
||||
bb1.bb2_crit_edge: ; preds = %bb1 |
||||
%.lcssa = phi i32 [ %1, %bb1 ] ; <i32> [#uses=1] |
||||
br label %bb2 |
||||
|
||||
bb2: ; preds = %bb1.bb2_crit_edge, %entry |
||||
%z.0.lcssa = phi i32 [ %.lcssa, %bb1.bb2_crit_edge ], [ 1, %entry ] ; <i32> [#uses=1] |
||||
ret i32 %z.0.lcssa |
||||
} |
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | grep Unpredictable |
||||
; PR2088 |
||||
|
||||
define void @fun() { |
||||
entry: |
||||
br label %loop |
||||
loop: |
||||
%i = phi i8 [ 0, %entry ], [ %i.next, %loop ] |
||||
%i.next = add i8 %i, 4 |
||||
%cond = icmp ne i8 %i.next, 6 |
||||
br i1 %cond, label %loop, label %exit |
||||
exit: |
||||
ret void |
||||
} |
@ -1,15 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | grep {backedge-taken count is 113} |
||||
; PR2088 |
||||
|
||||
define void @fun() { |
||||
entry: |
||||
br label %loop |
||||
loop: |
||||
%i = phi i8 [ 0, %entry ], [ %i.next, %loop ] |
||||
%i.next = add i8 %i, 18 |
||||
%cond = icmp ne i8 %i.next, 4 |
||||
br i1 %cond, label %loop, label %exit |
||||
exit: |
||||
ret void |
||||
} |
@ -1,28 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | FileCheck %s |
||||
; PR2607 |
||||
|
||||
define i32 @_Z1aj(i32 %j) nounwind { |
||||
entry: |
||||
icmp sgt i32 0, %j ; <i1>:0 [#uses=1] |
||||
br i1 %0, label %bb.preheader, label %return |
||||
|
||||
bb.preheader: ; preds = %entry |
||||
br label %bb |
||||
|
||||
bb: ; preds = %bb, %bb.preheader |
||||
%i.01 = phi i32 [ %1, %bb ], [ 0, %bb.preheader ] ; <i32> [#uses=1] |
||||
add i32 %i.01, -1 ; <i32>:1 [#uses=3] |
||||
icmp sgt i32 %1, %j ; <i1>:2 [#uses=1] |
||||
br i1 %2, label %bb, label %return.loopexit |
||||
|
||||
return.loopexit: ; preds = %bb |
||||
br label %return |
||||
|
||||
return: ; preds = %return.loopexit, %entry |
||||
%i.0.lcssa = phi i32 [ 0, %entry ], [ %1, %return.loopexit ] ; <i32> [#uses=1] |
||||
ret i32 %i.0.lcssa |
||||
} |
||||
|
||||
; CHECK: backedge-taken count is (-1 + (-1 * %j)) |
||||
|
@ -1,26 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | FileCheck %s |
||||
; PR2607 |
||||
|
||||
define i32 @b(i32 %x, i32 %y) nounwind { |
||||
entry: |
||||
%cmp2 = icmp slt i32 %y, %x |
||||
%cond3 = select i1 %cmp2, i32 %y, i32 %x |
||||
%cmp54 = icmp slt i32 %cond3, -2147483632 |
||||
br i1 %cmp54, label %forinc, label %afterfor |
||||
|
||||
forinc: ; preds = %forinc, %entry |
||||
%j.01 = phi i32 [ %dec, %forinc ], [ -2147483632, %entry ] |
||||
%dec = add i32 %j.01, -1 |
||||
%cmp = icmp slt i32 %y, %x |
||||
%cond = select i1 %cmp, i32 %y, i32 %x |
||||
%cmp5 = icmp sgt i32 %dec, %cond |
||||
br i1 %cmp5, label %forinc, label %afterfor |
||||
|
||||
afterfor: ; preds = %forinc, %entry |
||||
%j.0.lcssa = phi i32 [ -2147483632, %entry ], [ %dec, %forinc ] |
||||
ret i32 %j.0.lcssa |
||||
} |
||||
|
||||
; CHECK: backedge-taken count is (-2147483632 + ((-1 + (-1 * %x)) smax (-1 + (-1 * %y)))) |
||||
|
@ -1,27 +0,0 @@ |
||||
; RUN: opt < %s -analyze -scalar-evolution \ |
||||
; RUN: -scalar-evolution-max-iterations=0 | FileCheck %s |
||||
; PR2621 |
||||
|
||||
define i32 @a() nounwind { |
||||
entry: |
||||
br label %bb1 |
||||
|
||||
bb: |
||||
trunc i32 %i.0 to i16 |
||||
add i16 %0, %x16.0 |
||||
add i32 %i.0, 1 |
||||
br label %bb1 |
||||
|
||||
bb1: |
||||
%i.0 = phi i32 [ 0, %entry ], [ %2, %bb ] |
||||
%x16.0 = phi i16 [ 0, %entry ], [ %1, %bb ] |
||||
icmp ult i32 %i.0, 888888 |
||||
br i1 %3, label %bb, label %bb2 |
||||
|
||||
bb2: |
||||
zext i16 %x16.0 to i32 |
||||
ret i32 %4 |
||||
} |
||||
|
||||
; CHECK: Exits: 20028 |
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue