Imported Upstream version 5.18.0.167

Former-commit-id: 289509151e0fee68a1b591a20c9f109c3c789d3a
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-10-20 08:25:10 +00:00
parent e19d552987
commit b084638f15
28489 changed files with 184 additions and 3866856 deletions

View File

@ -1,19 +0,0 @@
; CFG Simplification is making a loop dead, then changing the add into:
;
; %V1 = add int %V1, 1
;
; Which is not valid SSA
;
; RUN: opt < %s -simplifycfg | llvm-dis
define void @test() {
; <label>:0
br i1 true, label %end, label %Loop
Loop: ; preds = %Loop, %0
%V = phi i32 [ 0, %0 ], [ %V1, %Loop ] ; <i32> [#uses=1]
%V1 = add i32 %V, 1 ; <i32> [#uses=1]
br label %Loop
end: ; preds = %0
ret void
}

View File

@ -1,13 +0,0 @@
; RUN: opt < %s -simplifycfg
define i32 @test(i32 %A, i32 %B, i1 %cond) {
J:
%C = add i32 %A, 12 ; <i32> [#uses=3]
br i1 %cond, label %L, label %L
L: ; preds = %J, %J
%Q = phi i32 [ %C, %J ], [ %C, %J ] ; <i32> [#uses=1]
%D = add i32 %C, %B ; <i32> [#uses=1]
%E = add i32 %Q, %D ; <i32> [#uses=1]
ret i32 %E
}

View File

@ -1,17 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
define void @test(i32* %ldo, i1 %c, i1 %d) {
bb9:
br i1 %c, label %bb11, label %bb10
bb10: ; preds = %bb9
br label %bb11
bb11: ; preds = %bb10, %bb9
%reg330 = phi i32* [ null, %bb10 ], [ %ldo, %bb9 ] ; <i32*> [#uses=1]
br label %bb20
bb20: ; preds = %bb20, %bb11
store i32* %reg330, i32** null
br i1 %d, label %bb20, label %done
done: ; preds = %bb20
ret void
}

View File

@ -1,16 +0,0 @@
; Do not remove the invoke!
;
; RUN: opt < %s -simplifycfg -disable-output
define i32 @test() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
%A = invoke i32 @test( )
to label %Ret unwind label %Ret2 ; <i32> [#uses=1]
Ret: ; preds = %0
ret i32 %A
Ret2: ; preds = %0
%val = landingpad { i8*, i32 }
catch i8* null
ret i32 undef
}
declare i32 @__gxx_personality_v0(...)

View File

@ -1,22 +0,0 @@
; This test checks to make sure that 'br X, Dest, Dest' is folded into
; 'br Dest'
; RUN: opt < %s -simplifycfg -S | FileCheck %s
declare void @noop()
; CHECK-NOT: br i1 %c2
define i32 @test(i1 %c1, i1 %c2) {
call void @noop( )
br i1 %c1, label %A, label %Y
A: ; preds = %0
call void @noop( )
br i1 %c2, label %X, label %X
X: ; preds = %Y, %A, %A
call void @noop( )
ret i32 0
Y: ; preds = %0
call void @noop( )
br label %X
}

View File

@ -1,27 +0,0 @@
; This test checks to make sure that 'br X, Dest, Dest' is folded into
; 'br Dest'. This can only happen after the 'Z' block is eliminated. This is
; due to the fact that the SimplifyCFG function does not use
; the ConstantFoldTerminator function.
; RUN: opt < %s -simplifycfg -S | FileCheck %s
; CHECK-NOT: br i1 %c2
declare void @noop()
define i32 @test(i1 %c1, i1 %c2) {
call void @noop( )
br i1 %c1, label %A, label %Y
A: ; preds = %0
call void @noop( )
br i1 %c2, label %Z, label %X
Z: ; preds = %A
br label %X
X: ; preds = %Y, %Z, %A
call void @noop( )
ret i32 0
Y: ; preds = %0
call void @noop( )
br label %X
}

View File

@ -1,57 +0,0 @@
; RUN: opt < %s -simplifycfg -S | FileCheck %s
; CHECK-NOT: switch
%llvm.dbg.anchor.type = type { i32, i32 }
%llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8*, i1, i1, i8* }
@llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type { i32 458752, i32 17 }, section "llvm.metadata"
@.str = internal constant [4 x i8] c"a.c\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1]
@.str1 = internal constant [6 x i8] c"/tmp/\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1]
@.str2 = internal constant [55 x i8] c"4.2.1 (Based on Apple Inc. build 5636) (LLVM build 00)\00", section "llvm.metadata" ; <[55 x i8]*> [#uses=1]
@llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type { i32 458769, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to { }*), i32 1, i8* getelementptr ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr ([6 x i8], [6 x i8]* @.str1, i32 0, i32 0), i8* getelementptr ([55 x i8], [55 x i8]* @.str2, i32 0, i32 0), i1 true, i1 false, i8* null }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1]
declare void @llvm.dbg.stoppoint(i32, i32, { }*) nounwind
; Test folding all to same dest
define i32 @test3(i1 %C) {
br i1 %C, label %Start, label %TheDest
Start: ; preds = %0
call void @llvm.dbg.stoppoint(i32 5, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*))
switch i32 3, label %TheDest [
i32 0, label %TheDest
i32 1, label %TheDest
i32 2, label %TheDest
i32 5, label %TheDest
]
TheDest: ; preds = %Start, %Start, %Start, %Start, %Start, %0
ret i32 1234
}
; Test folding switch -> branch
define i32 @test4(i32 %C) {
switch i32 %C, label %L1 [
i32 0, label %L2
]
L1: ; preds = %0
call void @llvm.dbg.stoppoint(i32 5, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*))
ret i32 0
L2: ; preds = %0
call void @llvm.dbg.stoppoint(i32 5, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*))
ret i32 1
}
; Can fold into a cond branch!
define i32 @test5(i32 %C) {
switch i32 %C, label %L1 [
i32 0, label %L2
i32 123, label %L1
]
L1: ; preds = %0, %0
call void @llvm.dbg.stoppoint(i32 5, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*))
ret i32 0
L2: ; preds = %0
call void @llvm.dbg.stoppoint(i32 5, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*))
ret i32 1
}

View File

@ -1,104 +0,0 @@
; NOTE: Assertions have been autogenerated by update_test_checks.py
; RUN: opt < %s -simplifycfg -S | FileCheck %s
; Test normal folding
define i32 @test1() {
; CHECK-LABEL: @test1(
; CHECK-NEXT: TheDest:
; CHECK-NEXT: ret i32 1234
;
switch i32 5, label %Default [
i32 0, label %Foo
i32 1, label %Bar
i32 2, label %Baz
i32 5, label %TheDest
]
Default:
ret i32 -1
Foo:
ret i32 -2
Bar:
ret i32 -3
Baz:
ret i32 -4
TheDest:
ret i32 1234
}
; Test folding to default dest
define i32 @test2() {
; CHECK-LABEL: @test2(
; CHECK-NEXT: Default:
; CHECK-NEXT: ret i32 1234
;
switch i32 3, label %Default [
i32 0, label %Foo
i32 1, label %Bar
i32 2, label %Baz
i32 5, label %TheDest
]
Default:
ret i32 1234
Foo:
ret i32 -2
Bar:
ret i32 -5
Baz:
ret i32 -6
TheDest:
ret i32 -8
}
; Test folding all to same dest
define i32 @test3(i1 %C) {
; CHECK-LABEL: @test3(
; CHECK-NEXT: TheDest:
; CHECK-NEXT: ret i32 1234
;
br i1 %C, label %Start, label %TheDest
Start: ; preds = %0
switch i32 3, label %TheDest [
i32 0, label %TheDest
i32 1, label %TheDest
i32 2, label %TheDest
i32 5, label %TheDest
]
TheDest:
ret i32 1234
}
; Test folding switch -> branch
define i32 @test4(i32 %C) {
; CHECK-LABEL: @test4(
; CHECK-NEXT: L1:
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 %C, 0
; CHECK-NEXT: [[DOT:%.*]] = select i1 [[COND]], i32 1, i32 0
; CHECK-NEXT: ret i32 [[DOT]]
;
switch i32 %C, label %L1 [
i32 0, label %L2
]
L1:
ret i32 0
L2:
ret i32 1
}
; Can fold into a cond branch!
define i32 @test5(i32 %C) {
; CHECK-LABEL: @test5(
; CHECK-NEXT: L1:
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 %C, 0
; CHECK-NEXT: [[DOT:%.*]] = select i1 [[COND]], i32 1, i32 0
; CHECK-NEXT: ret i32 [[DOT]]
;
switch i32 %C, label %L1 [
i32 0, label %L2
i32 123, label %L1
]
L1:
ret i32 0
L2:
ret i32 1
}

View File

@ -1,40 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
define void @symhash_add() {
entry:
br i1 undef, label %then.0, label %UnifiedReturnBlock
then.0: ; preds = %entry
br i1 undef, label %loopentry.2, label %loopentry.1.preheader
loopentry.1.preheader: ; preds = %then.0
br label %loopentry.1.outer
loopentry.1.outer: ; preds = %loopexit.1, %loopentry.1.preheader
br label %loopentry.1
loopentry.1: ; preds = %endif.1, %then.4, %then.3, %then.1, %loopentry.1.outer
br i1 undef, label %loopexit.1, label %no_exit.1
no_exit.1: ; preds = %loopentry.1
br i1 undef, label %then.1, label %else.0
then.1: ; preds = %no_exit.1
br label %loopentry.1
else.0: ; preds = %no_exit.1
br i1 undef, label %then.2, label %else.1
then.2: ; preds = %else.0
br i1 undef, label %then.3, label %endif.1
then.3: ; preds = %then.2
br label %loopentry.1
else.1: ; preds = %else.0
br i1 undef, label %endif.1, label %then.4
then.4: ; preds = %else.1
br label %loopentry.1
endif.1: ; preds = %else.1, %then.2
br label %loopentry.1
loopexit.1: ; preds = %loopentry.1
br i1 undef, label %loopentry.1.outer, label %loopentry.2
loopentry.2: ; preds = %no_exit.2, %loopexit.1, %then.0
br i1 undef, label %loopexit.2, label %no_exit.2
no_exit.2: ; preds = %loopentry.2
br label %loopentry.2
loopexit.2: ; preds = %loopentry.2
ret void
UnifiedReturnBlock: ; preds = %entry
ret void
}

View File

@ -1,95 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
; PR584
@g_38098584 = external global i32 ; <i32*> [#uses=1]
@g_60187400 = external global i32 ; <i32*> [#uses=1]
@g_59182229 = external global i32 ; <i32*> [#uses=2]
define i32 @_Z13func_26556482h(i8 %l_88173906) {
entry:
%tmp.1 = bitcast i8 %l_88173906 to i8 ; <i8> [#uses=2]
%tmp.3 = icmp eq i8 %l_88173906, 0 ; <i1> [#uses=1]
br i1 %tmp.3, label %else.0, label %then.0
then.0: ; preds = %entry
%tmp.5 = icmp eq i8 %l_88173906, 0 ; <i1> [#uses=1]
br i1 %tmp.5, label %else.1, label %then.1
then.1: ; preds = %then.0
br label %return
else.1: ; preds = %then.0
br label %loopentry.0
loopentry.0: ; preds = %no_exit.0, %else.1
%i.0.1 = phi i32 [ 0, %else.1 ], [ %inc.0, %no_exit.0 ] ; <i32> [#uses=2]
%tmp.9 = icmp sgt i32 %i.0.1, 99 ; <i1> [#uses=1]
br i1 %tmp.9, label %endif.0, label %no_exit.0
no_exit.0: ; preds = %loopentry.0
%inc.0 = add i32 %i.0.1, 1 ; <i32> [#uses=1]
br label %loopentry.0
else.0: ; preds = %entry
%tmp.12 = sext i8 %tmp.1 to i32 ; <i32> [#uses=1]
br label %return
endif.0: ; preds = %loopentry.0
%tmp.14 = sext i8 %tmp.1 to i32 ; <i32> [#uses=1]
%tmp.16 = zext i8 %l_88173906 to i32 ; <i32> [#uses=1]
%tmp.17 = icmp sgt i32 %tmp.14, %tmp.16 ; <i1> [#uses=1]
%tmp.19 = load i32, i32* @g_59182229 ; <i32> [#uses=2]
br i1 %tmp.17, label %cond_true, label %cond_false
cond_true: ; preds = %endif.0
%tmp.20 = icmp ne i32 %tmp.19, 1 ; <i1> [#uses=1]
br label %cond_continue
cond_false: ; preds = %endif.0
%tmp.22 = icmp ne i32 %tmp.19, 0 ; <i1> [#uses=1]
br label %cond_continue
cond_continue: ; preds = %cond_false, %cond_true
%mem_tmp.0 = phi i1 [ %tmp.20, %cond_true ], [ %tmp.22, %cond_false ] ; <i1> [#uses=1]
br i1 %mem_tmp.0, label %then.2, label %else.2
then.2: ; preds = %cond_continue
%tmp.25 = zext i8 %l_88173906 to i32 ; <i32> [#uses=1]
br label %return
else.2: ; preds = %cond_continue
br label %loopentry.1
loopentry.1: ; preds = %endif.3, %else.2
%i.1.1 = phi i32 [ 0, %else.2 ], [ %inc.3, %endif.3 ] ; <i32> [#uses=2]
%i.3.2 = phi i32 [ undef, %else.2 ], [ %i.3.0, %endif.3 ] ; <i32> [#uses=2]
%l_88173906_addr.1 = phi i8 [ %l_88173906, %else.2 ], [ %l_88173906_addr.0, %endif.3 ] ; <i8> [#uses=3]
%tmp.29 = icmp sgt i32 %i.1.1, 99 ; <i1> [#uses=1]
br i1 %tmp.29, label %endif.2, label %no_exit.1
no_exit.1: ; preds = %loopentry.1
%tmp.30 = load i32, i32* @g_38098584 ; <i32> [#uses=1]
%tmp.31 = icmp eq i32 %tmp.30, 0 ; <i1> [#uses=1]
br i1 %tmp.31, label %else.3, label %then.3
then.3: ; preds = %no_exit.1
br label %endif.3
else.3: ; preds = %no_exit.1
br i1 false, label %else.4, label %then.4
then.4: ; preds = %else.3
br label %endif.3
else.4: ; preds = %else.3
br i1 false, label %else.5, label %then.5
then.5: ; preds = %else.4
store i32 -1004318825, i32* @g_59182229
br label %return
else.5: ; preds = %else.4
br label %loopentry.3
loopentry.3: ; preds = %then.7, %else.5
%i.3.3 = phi i32 [ 0, %else.5 ], [ %inc.2, %then.7 ] ; <i32> [#uses=3]
%tmp.55 = icmp sgt i32 %i.3.3, 99 ; <i1> [#uses=1]
br i1 %tmp.55, label %endif.3, label %no_exit.3
no_exit.3: ; preds = %loopentry.3
%tmp.57 = icmp eq i8 %l_88173906_addr.1, 0 ; <i1> [#uses=1]
br i1 %tmp.57, label %else.7, label %then.7
then.7: ; preds = %no_exit.3
store i32 16239, i32* @g_60187400
%inc.2 = add i32 %i.3.3, 1 ; <i32> [#uses=1]
br label %loopentry.3
else.7: ; preds = %no_exit.3
br label %return
endif.3: ; preds = %loopentry.3, %then.4, %then.3
%i.3.0 = phi i32 [ %i.3.2, %then.3 ], [ %i.3.2, %then.4 ], [ %i.3.3, %loopentry.3 ] ; <i32> [#uses=1]
%l_88173906_addr.0 = phi i8 [ 100, %then.3 ], [ %l_88173906_addr.1, %then.4 ], [ %l_88173906_addr.1, %loopentry.3 ] ; <i8> [#uses=1]
%inc.3 = add i32 %i.1.1, 1 ; <i32> [#uses=1]
br label %loopentry.1
endif.2: ; preds = %loopentry.1
br label %return
return: ; preds = %endif.2, %else.7, %then.5, %then.2, %else.0, %then.1
%result.0 = phi i32 [ 1624650671, %then.1 ], [ %tmp.25, %then.2 ], [ 3379, %then.5 ], [ 52410, %else.7 ], [ -1526438411, %endif.2 ], [ %tmp.12, %else.0 ] ; <i32> [#uses=1]
ret i32 %result.0
}

View File

@ -1,71 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
; END.
define void @main() {
entry:
%tmp.14.i19 = icmp eq i32 0, 2 ; <i1> [#uses=1]
br i1 %tmp.14.i19, label %endif.1.i20, label %read_min.exit
endif.1.i20: ; preds = %entry
%tmp.9.i.i = icmp eq i8* null, null ; <i1> [#uses=1]
br i1 %tmp.9.i.i, label %then.i12.i, label %then.i.i
then.i.i: ; preds = %endif.1.i20
ret void
then.i12.i: ; preds = %endif.1.i20
%tmp.9.i4.i = icmp eq i8* null, null ; <i1> [#uses=1]
br i1 %tmp.9.i4.i, label %endif.2.i33, label %then.i5.i
then.i5.i: ; preds = %then.i12.i
ret void
endif.2.i33: ; preds = %then.i12.i
br i1 false, label %loopexit.0.i40, label %no_exit.0.i35
no_exit.0.i35: ; preds = %no_exit.0.i35, %endif.2.i33
%tmp.130.i = icmp slt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.130.i, label %loopexit.0.i40.loopexit, label %no_exit.0.i35
loopexit.0.i40.loopexit: ; preds = %no_exit.0.i35
br label %loopexit.0.i40
loopexit.0.i40: ; preds = %loopexit.0.i40.loopexit, %endif.2.i33
%tmp.341.i = icmp eq i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.341.i, label %loopentry.1.i, label %read_min.exit
loopentry.1.i: ; preds = %loopexit.0.i40
%tmp.347.i = icmp sgt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.347.i, label %no_exit.1.i41, label %loopexit.2.i44
no_exit.1.i41: ; preds = %endif.5.i, %loopentry.1.i
%indvar.i42 = phi i32 [ %indvar.next.i, %endif.5.i ], [ 0, %loopentry.1.i ] ; <i32> [#uses=1]
%tmp.355.i = icmp eq i32 0, 3 ; <i1> [#uses=1]
br i1 %tmp.355.i, label %endif.5.i, label %read_min.exit
endif.5.i: ; preds = %no_exit.1.i41
%tmp.34773.i = icmp sgt i32 0, 0 ; <i1> [#uses=1]
%indvar.next.i = add i32 %indvar.i42, 1 ; <i32> [#uses=1]
br i1 %tmp.34773.i, label %no_exit.1.i41, label %loopexit.1.i.loopexit
loopexit.1.i.loopexit: ; preds = %endif.5.i
ret void
loopexit.2.i44: ; preds = %loopentry.1.i
ret void
read_min.exit: ; preds = %no_exit.1.i41, %loopexit.0.i40, %entry
%tmp.23 = icmp eq i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.23, label %endif.1, label %then.1
then.1: ; preds = %read_min.exit
br i1 false, label %endif.0.i, label %then.0.i
then.0.i: ; preds = %then.1
br i1 false, label %endif.1.i, label %then.1.i
endif.0.i: ; preds = %then.1
br i1 false, label %endif.1.i, label %then.1.i
then.1.i: ; preds = %endif.0.i, %then.0.i
br i1 false, label %getfree.exit, label %then.2.i
endif.1.i: ; preds = %endif.0.i, %then.0.i
br i1 false, label %getfree.exit, label %then.2.i
then.2.i: ; preds = %endif.1.i, %then.1.i
ret void
getfree.exit: ; preds = %endif.1.i, %then.1.i
ret void
endif.1: ; preds = %read_min.exit
%tmp.27.i = getelementptr i32, i32* null, i32 0 ; <i32*> [#uses=0]
br i1 false, label %loopexit.0.i15, label %no_exit.0.i14
no_exit.0.i14: ; preds = %endif.1
ret void
loopexit.0.i15: ; preds = %endif.1
br i1 false, label %primal_start_artificial.exit, label %no_exit.1.i16
no_exit.1.i16: ; preds = %no_exit.1.i16, %loopexit.0.i15
br i1 false, label %primal_start_artificial.exit, label %no_exit.1.i16
primal_start_artificial.exit: ; preds = %no_exit.1.i16, %loopexit.0.i15
ret void
}

View File

@ -1,18 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
define i1 @foo() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
%X = invoke i1 @foo( )
to label %N unwind label %F ; <i1> [#uses=1]
F: ; preds = %0
%val = landingpad { i8*, i32 }
catch i8* null
ret i1 false
N: ; preds = %0
br i1 %X, label %A, label %B
A: ; preds = %N
ret i1 true
B: ; preds = %N
ret i1 true
}
declare i32 @__gxx_personality_v0(...)

View File

@ -1,123 +0,0 @@
; Make sure this doesn't turn into an infinite loop
; RUN: opt < %s -simplifycfg -constprop -simplifycfg | llvm-dis | FileCheck %s
%struct.anon = type { i32, i32, i32, i32, [1024 x i8] }
@_zero_ = external global %struct.anon* ; <%struct.anon**> [#uses=2]
@_one_ = external global %struct.anon* ; <%struct.anon**> [#uses=4]
@str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=0]
declare i32 @bc_compare(%struct.anon*, %struct.anon*)
declare void @free_num(%struct.anon**)
declare %struct.anon* @copy_num(%struct.anon*)
declare void @init_num(%struct.anon**)
declare %struct.anon* @new_num(i32, i32)
declare void @int2num(%struct.anon**, i32)
declare void @bc_multiply(%struct.anon*, %struct.anon*, %struct.anon**, i32)
declare void @bc_raise(%struct.anon*, %struct.anon*, %struct.anon**, i32)
declare i32 @bc_divide(%struct.anon*, %struct.anon*, %struct.anon**, i32)
declare void @bc_add(%struct.anon*, %struct.anon*, %struct.anon**)
declare i32 @_do_compare(%struct.anon*, %struct.anon*, i32, i32)
declare i32 @printf(i8*, ...)
define i32 @bc_sqrt(%struct.anon** %num, i32 %scale) {
entry:
%guess = alloca %struct.anon* ; <%struct.anon**> [#uses=7]
%guess1 = alloca %struct.anon* ; <%struct.anon**> [#uses=7]
%point5 = alloca %struct.anon* ; <%struct.anon**> [#uses=3]
%tmp = load %struct.anon*, %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp1 = load %struct.anon*, %struct.anon** @_zero_ ; <%struct.anon*> [#uses=1]
%tmp.upgrd.1 = call i32 @bc_compare( %struct.anon* %tmp, %struct.anon* %tmp1 ) ; <i32> [#uses=2]
%tmp.upgrd.2 = icmp slt i32 %tmp.upgrd.1, 0 ; <i1> [#uses=1]
br i1 %tmp.upgrd.2, label %cond_true, label %cond_false
cond_true: ; preds = %entry
ret i32 0
cond_false: ; preds = %entry
%tmp5 = icmp eq i32 %tmp.upgrd.1, 0 ; <i1> [#uses=1]
br i1 %tmp5, label %cond_true6, label %cond_next13
cond_true6: ; preds = %cond_false
call void @free_num( %struct.anon** %num )
%tmp8 = load %struct.anon*, %struct.anon** @_zero_ ; <%struct.anon*> [#uses=1]
%tmp9 = call %struct.anon* @copy_num( %struct.anon* %tmp8 ) ; <%struct.anon*> [#uses=1]
store %struct.anon* %tmp9, %struct.anon** %num
ret i32 1
cond_next13: ; preds = %cond_false
%tmp15 = load %struct.anon*, %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp16 = load %struct.anon*, %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp17 = call i32 @bc_compare( %struct.anon* %tmp15, %struct.anon* %tmp16 ) ; <i32> [#uses=2]
%tmp19 = icmp eq i32 %tmp17, 0 ; <i1> [#uses=1]
br i1 %tmp19, label %cond_true20, label %cond_next27
cond_true20: ; preds = %cond_next13
call void @free_num( %struct.anon** %num )
%tmp22 = load %struct.anon*, %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp23 = call %struct.anon* @copy_num( %struct.anon* %tmp22 ) ; <%struct.anon*> [#uses=1]
store %struct.anon* %tmp23, %struct.anon** %num
ret i32 1
cond_next27: ; preds = %cond_next13
%tmp29 = load %struct.anon*, %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp30 = getelementptr %struct.anon, %struct.anon* %tmp29, i32 0, i32 2 ; <i32*> [#uses=1]
%tmp31 = load i32, i32* %tmp30 ; <i32> [#uses=2]
%tmp33 = icmp sge i32 %tmp31, %scale ; <i1> [#uses=1]
%max = select i1 %tmp33, i32 %tmp31, i32 %scale ; <i32> [#uses=4]
%tmp35 = add i32 %max, 2 ; <i32> [#uses=0]
call void @init_num( %struct.anon** %guess )
call void @init_num( %struct.anon** %guess1 )
%tmp36 = call %struct.anon* @new_num( i32 1, i32 1 ) ; <%struct.anon*> [#uses=2]
store %struct.anon* %tmp36, %struct.anon** %point5
%tmp.upgrd.3 = getelementptr %struct.anon, %struct.anon* %tmp36, i32 0, i32 4, i32 1 ; <i8*> [#uses=1]
store i8 5, i8* %tmp.upgrd.3
%tmp39 = icmp slt i32 %tmp17, 0 ; <i1> [#uses=1]
br i1 %tmp39, label %cond_true40, label %cond_false43
cond_true40: ; preds = %cond_next27
%tmp41 = load %struct.anon*, %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp42 = call %struct.anon* @copy_num( %struct.anon* %tmp41 ) ; <%struct.anon*> [#uses=1]
store %struct.anon* %tmp42, %struct.anon** %guess
br label %bb80.outer
cond_false43: ; preds = %cond_next27
call void @int2num( %struct.anon** %guess, i32 10 )
%tmp45 = load %struct.anon*, %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp46 = getelementptr %struct.anon, %struct.anon* %tmp45, i32 0, i32 1 ; <i32*> [#uses=1]
%tmp47 = load i32, i32* %tmp46 ; <i32> [#uses=1]
call void @int2num( %struct.anon** %guess1, i32 %tmp47 )
%tmp48 = load %struct.anon*, %struct.anon** %guess1 ; <%struct.anon*> [#uses=1]
%tmp49 = load %struct.anon*, %struct.anon** %point5 ; <%struct.anon*> [#uses=1]
call void @bc_multiply( %struct.anon* %tmp48, %struct.anon* %tmp49, %struct.anon** %guess1, i32 %max )
%tmp51 = load %struct.anon*, %struct.anon** %guess1 ; <%struct.anon*> [#uses=1]
%tmp52 = getelementptr %struct.anon, %struct.anon* %tmp51, i32 0, i32 2 ; <i32*> [#uses=1]
store i32 0, i32* %tmp52
%tmp53 = load %struct.anon*, %struct.anon** %guess ; <%struct.anon*> [#uses=1]
%tmp54 = load %struct.anon*, %struct.anon** %guess1 ; <%struct.anon*> [#uses=1]
call void @bc_raise( %struct.anon* %tmp53, %struct.anon* %tmp54, %struct.anon** %guess, i32 %max )
br label %bb80.outer
bb80.outer: ; preds = %cond_true83, %cond_false43, %cond_true40
%done.1.ph = phi i32 [ 1, %cond_true83 ], [ 0, %cond_true40 ], [ 0, %cond_false43 ] ; <i32> [#uses=1]
br label %bb80
bb80: ; preds = %cond_true83, %bb80.outer
%tmp82 = icmp eq i32 %done.1.ph, 0 ; <i1> [#uses=1]
br i1 %tmp82, label %cond_true83, label %bb86
cond_true83: ; preds = %bb80
%tmp71 = call i32 @_do_compare( %struct.anon* null, %struct.anon* null, i32 0, i32 1 ) ; <i32> [#uses=1]
%tmp76 = icmp eq i32 %tmp71, 0 ; <i1> [#uses=1]
br i1 %tmp76, label %bb80.outer, label %bb80
; CHECK: bb86
bb86: ; preds = %bb80
call void @free_num( %struct.anon** %num )
%tmp88 = load %struct.anon*, %struct.anon** %guess ; <%struct.anon*> [#uses=1]
%tmp89 = load %struct.anon*, %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp92 = call i32 @bc_divide( %struct.anon* %tmp88, %struct.anon* %tmp89, %struct.anon** %num, i32 %max ) ; <i32> [#uses=0]
call void @free_num( %struct.anon** %guess )
call void @free_num( %struct.anon** %guess1 )
call void @free_num( %struct.anon** %point5 )
ret i32 1
}

View File

@ -1,27 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
define void @polnel_() {
entry:
%tmp595 = icmp slt i32 0, 0 ; <i1> [#uses=4]
br i1 %tmp595, label %bb148.critedge, label %cond_true40
bb36: ; preds = %bb43
br i1 %tmp595, label %bb43, label %cond_true40
cond_true40: ; preds = %bb46, %cond_true40, %bb36, %entry
%tmp397 = icmp sgt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp397, label %bb43, label %cond_true40
bb43: ; preds = %cond_true40, %bb36
br i1 false, label %bb53, label %bb36
bb46: ; preds = %bb53
br i1 %tmp595, label %bb53, label %cond_true40
bb53: ; preds = %bb46, %bb43
br i1 false, label %bb102, label %bb46
bb92.preheader: ; preds = %bb102
ret void
bb102: ; preds = %bb53
br i1 %tmp595, label %bb148, label %bb92.preheader
bb148.critedge: ; preds = %entry
ret void
bb148: ; preds = %bb102
ret void
}

View File

@ -1,413 +0,0 @@
; RUN: opt < %s -simplifycfg -disable-output
; END.
define void @main(i32 %c) {
entry:
%tmp.9 = icmp eq i32 %c, 2 ; <i1> [#uses=1]
br i1 %tmp.9, label %endif.0, label %then.0
then.0: ; preds = %entry
ret void
endif.0: ; preds = %entry
br i1 false, label %then.1, label %endif.1
then.1: ; preds = %endif.0
ret void
endif.1: ; preds = %endif.0
br i1 false, label %then.2, label %endif.2
then.2: ; preds = %endif.1
ret void
endif.2: ; preds = %endif.1
br i1 false, label %then.3, label %loopentry.0
then.3: ; preds = %endif.2
ret void
loopentry.0: ; preds = %endif.2
br i1 false, label %no_exit.0.preheader, label %loopexit.0
no_exit.0.preheader: ; preds = %loopentry.0
br label %no_exit.0
no_exit.0: ; preds = %endif.4, %no_exit.0.preheader
br i1 false, label %then.4, label %endif.4
then.4: ; preds = %no_exit.0
ret void
endif.4: ; preds = %no_exit.0
br i1 false, label %no_exit.0, label %loopexit.0.loopexit
loopexit.0.loopexit: ; preds = %endif.4
br label %loopexit.0
loopexit.0: ; preds = %loopexit.0.loopexit, %loopentry.0
br i1 false, label %then.5, label %loopentry.1
then.5: ; preds = %loopexit.0
ret void
loopentry.1: ; preds = %loopexit.0
%tmp.143 = icmp sgt i32 0, 0 ; <i1> [#uses=4]
br i1 %tmp.143, label %no_exit.1.preheader, label %loopexit.1
no_exit.1.preheader: ; preds = %loopentry.1
br label %no_exit.1
no_exit.1: ; preds = %endif.6, %no_exit.1.preheader
br i1 false, label %then.6, label %shortcirc_next.3
shortcirc_next.3: ; preds = %no_exit.1
br i1 false, label %then.6, label %shortcirc_next.4
shortcirc_next.4: ; preds = %shortcirc_next.3
br i1 false, label %then.6, label %endif.6
then.6: ; preds = %shortcirc_next.4, %shortcirc_next.3, %no_exit.1
ret void
endif.6: ; preds = %shortcirc_next.4
br i1 false, label %no_exit.1, label %loopexit.1.loopexit
loopexit.1.loopexit: ; preds = %endif.6
br label %loopexit.1
loopexit.1: ; preds = %loopexit.1.loopexit, %loopentry.1
br i1 false, label %then.i, label %loopentry.0.i
then.i: ; preds = %loopexit.1
ret void
loopentry.0.i: ; preds = %loopexit.1
br i1 %tmp.143, label %no_exit.0.i.preheader, label %readvector.exit
no_exit.0.i.preheader: ; preds = %loopentry.0.i
br label %no_exit.0.i
no_exit.0.i: ; preds = %loopexit.1.i, %no_exit.0.i.preheader
br i1 false, label %no_exit.1.i.preheader, label %loopexit.1.i
no_exit.1.i.preheader: ; preds = %no_exit.0.i
br label %no_exit.1.i
no_exit.1.i: ; preds = %loopexit.2.i, %no_exit.1.i.preheader
br i1 false, label %no_exit.2.i.preheader, label %loopexit.2.i
no_exit.2.i.preheader: ; preds = %no_exit.1.i
br label %no_exit.2.i
no_exit.2.i: ; preds = %no_exit.2.i, %no_exit.2.i.preheader
br i1 false, label %no_exit.2.i, label %loopexit.2.i.loopexit
loopexit.2.i.loopexit: ; preds = %no_exit.2.i
br label %loopexit.2.i
loopexit.2.i: ; preds = %loopexit.2.i.loopexit, %no_exit.1.i
br i1 false, label %no_exit.1.i, label %loopexit.1.i.loopexit
loopexit.1.i.loopexit: ; preds = %loopexit.2.i
br label %loopexit.1.i
loopexit.1.i: ; preds = %loopexit.1.i.loopexit, %no_exit.0.i
br i1 false, label %no_exit.0.i, label %readvector.exit.loopexit
readvector.exit.loopexit: ; preds = %loopexit.1.i
br label %readvector.exit
readvector.exit: ; preds = %readvector.exit.loopexit, %loopentry.0.i
br i1 %tmp.143, label %loopentry.1.preheader.i, label %loopexit.0.i
loopentry.1.preheader.i: ; preds = %readvector.exit
br label %loopentry.1.outer.i
loopentry.1.outer.i: ; preds = %loopexit.1.i110, %loopentry.1.preheader.i
br label %loopentry.1.i85
loopentry.1.i85.loopexit: ; preds = %hamming.exit16.i
br label %loopentry.1.i85
loopentry.1.i85: ; preds = %loopentry.1.i85.loopexit, %loopentry.1.outer.i
br i1 false, label %no_exit.1.preheader.i, label %loopexit.1.i110.loopexit1
no_exit.1.preheader.i: ; preds = %loopentry.1.i85
br label %no_exit.1.i87
no_exit.1.i87: ; preds = %then.1.i107, %no_exit.1.preheader.i
br i1 false, label %no_exit.i.i101.preheader, label %hamming.exit.i104
no_exit.i.i101.preheader: ; preds = %no_exit.1.i87
br label %no_exit.i.i101
no_exit.i.i101: ; preds = %no_exit.i.i101, %no_exit.i.i101.preheader
br i1 false, label %no_exit.i.i101, label %hamming.exit.i104.loopexit
hamming.exit.i104.loopexit: ; preds = %no_exit.i.i101
br label %hamming.exit.i104
hamming.exit.i104: ; preds = %hamming.exit.i104.loopexit, %no_exit.1.i87
br i1 false, label %no_exit.i15.i.preheader, label %hamming.exit16.i
no_exit.i15.i.preheader: ; preds = %hamming.exit.i104
br label %no_exit.i15.i
no_exit.i15.i: ; preds = %no_exit.i15.i, %no_exit.i15.i.preheader
br i1 false, label %no_exit.i15.i, label %hamming.exit16.i.loopexit
hamming.exit16.i.loopexit: ; preds = %no_exit.i15.i
br label %hamming.exit16.i
hamming.exit16.i: ; preds = %hamming.exit16.i.loopexit, %hamming.exit.i104
br i1 false, label %loopentry.1.i85.loopexit, label %then.1.i107
then.1.i107: ; preds = %hamming.exit16.i
br i1 false, label %no_exit.1.i87, label %loopexit.1.i110.loopexit
loopexit.1.i110.loopexit: ; preds = %then.1.i107
br label %loopexit.1.i110
loopexit.1.i110.loopexit1: ; preds = %loopentry.1.i85
br label %loopexit.1.i110
loopexit.1.i110: ; preds = %loopexit.1.i110.loopexit1, %loopexit.1.i110.loopexit
br i1 false, label %loopentry.1.outer.i, label %loopexit.0.i.loopexit
loopexit.0.i.loopexit: ; preds = %loopexit.1.i110
br label %loopexit.0.i
loopexit.0.i: ; preds = %loopexit.0.i.loopexit, %readvector.exit
br i1 false, label %UnifiedReturnBlock.i113, label %then.2.i112
then.2.i112: ; preds = %loopexit.0.i
br label %checkham.exit
UnifiedReturnBlock.i113: ; preds = %loopexit.0.i
br label %checkham.exit
checkham.exit: ; preds = %UnifiedReturnBlock.i113, %then.2.i112
br i1 false, label %loopentry.1.i14.preheader, label %loopentry.3.i.preheader
loopentry.1.i14.preheader: ; preds = %checkham.exit
br label %loopentry.1.i14
loopentry.1.i14: ; preds = %loopexit.1.i18, %loopentry.1.i14.preheader
br i1 false, label %no_exit.1.i16.preheader, label %loopexit.1.i18
no_exit.1.i16.preheader: ; preds = %loopentry.1.i14
br label %no_exit.1.i16
no_exit.1.i16: ; preds = %no_exit.1.i16, %no_exit.1.i16.preheader
br i1 false, label %no_exit.1.i16, label %loopexit.1.i18.loopexit
loopexit.1.i18.loopexit: ; preds = %no_exit.1.i16
br label %loopexit.1.i18
loopexit.1.i18: ; preds = %loopexit.1.i18.loopexit, %loopentry.1.i14
br i1 false, label %loopentry.1.i14, label %loopentry.3.i.loopexit
loopentry.3.i.loopexit: ; preds = %loopexit.1.i18
br label %loopentry.3.i.preheader
loopentry.3.i.preheader: ; preds = %loopentry.3.i.loopexit, %checkham.exit
br label %loopentry.3.i
loopentry.3.i: ; preds = %endif.1.i, %loopentry.3.i.preheader
br i1 false, label %loopentry.4.i.preheader, label %endif.1.i
loopentry.4.i.preheader: ; preds = %loopentry.3.i
br label %loopentry.4.i
loopentry.4.i: ; preds = %loopexit.4.i, %loopentry.4.i.preheader
br i1 false, label %no_exit.4.i.preheader, label %loopexit.4.i
no_exit.4.i.preheader: ; preds = %loopentry.4.i
br label %no_exit.4.i
no_exit.4.i: ; preds = %no_exit.4.i.backedge, %no_exit.4.i.preheader
br i1 false, label %endif.0.i, label %else.i
else.i: ; preds = %no_exit.4.i
br i1 false, label %no_exit.4.i.backedge, label %loopexit.4.i.loopexit
no_exit.4.i.backedge: ; preds = %endif.0.i, %else.i
br label %no_exit.4.i
endif.0.i: ; preds = %no_exit.4.i
br i1 false, label %no_exit.4.i.backedge, label %loopexit.4.i.loopexit
loopexit.4.i.loopexit: ; preds = %endif.0.i, %else.i
br label %loopexit.4.i
loopexit.4.i: ; preds = %loopexit.4.i.loopexit, %loopentry.4.i
br i1 false, label %loopentry.4.i, label %endif.1.i.loopexit
endif.1.i.loopexit: ; preds = %loopexit.4.i
br label %endif.1.i
endif.1.i: ; preds = %endif.1.i.loopexit, %loopentry.3.i
%exitcond = icmp eq i32 0, 10 ; <i1> [#uses=1]
br i1 %exitcond, label %generateT.exit, label %loopentry.3.i
generateT.exit: ; preds = %endif.1.i
br i1 false, label %then.0.i, label %loopentry.1.i30.preheader
then.0.i: ; preds = %generateT.exit
ret void
loopentry.1.i30.loopexit: ; preds = %loopexit.3.i
br label %loopentry.1.i30.backedge
loopentry.1.i30.preheader: ; preds = %generateT.exit
br label %loopentry.1.i30
loopentry.1.i30: ; preds = %loopentry.1.i30.backedge, %loopentry.1.i30.preheader
br i1 %tmp.143, label %no_exit.0.i31.preheader, label %loopentry.1.i30.backedge
loopentry.1.i30.backedge: ; preds = %loopentry.1.i30, %loopentry.1.i30.loopexit
br label %loopentry.1.i30
no_exit.0.i31.preheader: ; preds = %loopentry.1.i30
br label %no_exit.0.i31
no_exit.0.i31: ; preds = %loopexit.3.i, %no_exit.0.i31.preheader
br i1 false, label %then.1.i, label %else.0.i
then.1.i: ; preds = %no_exit.0.i31
br i1 undef, label %then.0.i29, label %loopentry.0.i31
then.0.i29: ; preds = %then.1.i
unreachable
loopentry.0.i31: ; preds = %then.1.i
br i1 false, label %no_exit.0.i38.preheader, label %loopentry.1.i.preheader
no_exit.0.i38.preheader: ; preds = %loopentry.0.i31
br label %no_exit.0.i38
no_exit.0.i38: ; preds = %no_exit.0.i38, %no_exit.0.i38.preheader
br i1 undef, label %no_exit.0.i38, label %loopentry.1.i.preheader.loopexit
loopentry.1.i.preheader.loopexit: ; preds = %no_exit.0.i38
br label %loopentry.1.i.preheader
loopentry.1.i.preheader: ; preds = %loopentry.1.i.preheader.loopexit, %loopentry.0.i31
br label %loopentry.1.i
loopentry.1.i: ; preds = %endif.2.i, %loopentry.1.i.preheader
br i1 undef, label %loopentry.2.i39.preheader, label %loopexit.1.i79.loopexit2
loopentry.2.i39.preheader: ; preds = %loopentry.1.i
br label %loopentry.2.i39
loopentry.2.i39: ; preds = %loopexit.5.i77, %loopentry.2.i39.preheader
br i1 false, label %loopentry.3.i40.preheader, label %hamming.exit.i71
loopentry.3.i40.preheader: ; preds = %loopentry.2.i39
br label %loopentry.3.i40
loopentry.3.i40: ; preds = %loopexit.3.i51, %loopentry.3.i40.preheader
br i1 false, label %no_exit.3.preheader.i42, label %loopexit.3.i51
no_exit.3.preheader.i42: ; preds = %loopentry.3.i40
br label %no_exit.3.i49
no_exit.3.i49: ; preds = %no_exit.3.i49, %no_exit.3.preheader.i42
br i1 undef, label %no_exit.3.i49, label %loopexit.3.i51.loopexit
loopexit.3.i51.loopexit: ; preds = %no_exit.3.i49
br label %loopexit.3.i51
loopexit.3.i51: ; preds = %loopexit.3.i51.loopexit, %loopentry.3.i40
br i1 undef, label %loopentry.3.i40, label %loopentry.4.i52
loopentry.4.i52: ; preds = %loopexit.3.i51
br i1 false, label %no_exit.4.i54.preheader, label %hamming.exit.i71
no_exit.4.i54.preheader: ; preds = %loopentry.4.i52
br label %no_exit.4.i54
no_exit.4.i54: ; preds = %no_exit.4.backedge.i, %no_exit.4.i54.preheader
br i1 undef, label %then.1.i55, label %endif.1.i56
then.1.i55: ; preds = %no_exit.4.i54
br i1 undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
no_exit.4.backedge.i: ; preds = %endif.1.i56, %then.1.i55
br label %no_exit.4.i54
endif.1.i56: ; preds = %no_exit.4.i54
br i1 undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
loopexit.4.i57: ; preds = %endif.1.i56, %then.1.i55
br i1 false, label %no_exit.i.i69.preheader, label %hamming.exit.i71
no_exit.i.i69.preheader: ; preds = %loopexit.4.i57
br label %no_exit.i.i69
no_exit.i.i69: ; preds = %no_exit.i.i69, %no_exit.i.i69.preheader
br i1 undef, label %no_exit.i.i69, label %hamming.exit.i71.loopexit
hamming.exit.i71.loopexit: ; preds = %no_exit.i.i69
br label %hamming.exit.i71
hamming.exit.i71: ; preds = %hamming.exit.i71.loopexit, %loopexit.4.i57, %loopentry.4.i52, %loopentry.2.i39
br i1 undef, label %endif.2.i, label %loopentry.5.i72
loopentry.5.i72: ; preds = %hamming.exit.i71
br i1 false, label %shortcirc_next.i74.preheader, label %loopexit.5.i77
shortcirc_next.i74.preheader: ; preds = %loopentry.5.i72
br label %shortcirc_next.i74
shortcirc_next.i74: ; preds = %no_exit.5.i76, %shortcirc_next.i74.preheader
br i1 undef, label %no_exit.5.i76, label %loopexit.5.i77.loopexit
no_exit.5.i76: ; preds = %shortcirc_next.i74
br i1 undef, label %shortcirc_next.i74, label %loopexit.5.i77.loopexit
loopexit.5.i77.loopexit: ; preds = %no_exit.5.i76, %shortcirc_next.i74
br label %loopexit.5.i77
loopexit.5.i77: ; preds = %loopexit.5.i77.loopexit, %loopentry.5.i72
br i1 undef, label %loopentry.2.i39, label %loopexit.1.i79.loopexit
endif.2.i: ; preds = %hamming.exit.i71
br label %loopentry.1.i
loopexit.1.i79.loopexit: ; preds = %loopexit.5.i77
br label %loopexit.1.i79
loopexit.1.i79.loopexit2: ; preds = %loopentry.1.i
br label %loopexit.1.i79
loopexit.1.i79: ; preds = %loopexit.1.i79.loopexit2, %loopexit.1.i79.loopexit
br i1 undef, label %then.3.i, label %loopentry.6.i80
then.3.i: ; preds = %loopexit.1.i79
br i1 false, label %no_exit.6.i82.preheader, label %run.exit
loopentry.6.i80: ; preds = %loopexit.1.i79
br i1 false, label %no_exit.6.i82.preheader, label %run.exit
no_exit.6.i82.preheader: ; preds = %loopentry.6.i80, %then.3.i
br label %no_exit.6.i82
no_exit.6.i82: ; preds = %no_exit.6.i82, %no_exit.6.i82.preheader
br i1 undef, label %no_exit.6.i82, label %run.exit.loopexit
run.exit.loopexit: ; preds = %no_exit.6.i82
br label %run.exit
run.exit: ; preds = %run.exit.loopexit, %loopentry.6.i80, %then.3.i
br i1 false, label %no_exit.1.i36.preheader, label %loopentry.3.i37
else.0.i: ; preds = %no_exit.0.i31
br i1 false, label %then.0.i4, label %loopentry.0.i6
then.0.i4: ; preds = %else.0.i
unreachable
loopentry.0.i6: ; preds = %else.0.i
br i1 false, label %no_exit.0.i8.preheader, label %loopentry.2.i.preheader
no_exit.0.i8.preheader: ; preds = %loopentry.0.i6
br label %no_exit.0.i8
no_exit.0.i8: ; preds = %no_exit.0.i8, %no_exit.0.i8.preheader
br i1 false, label %no_exit.0.i8, label %loopentry.2.i.preheader.loopexit
loopentry.2.i.preheader.loopexit: ; preds = %no_exit.0.i8
br label %loopentry.2.i.preheader
loopentry.2.i.preheader: ; preds = %loopentry.2.i.preheader.loopexit, %loopentry.0.i6
br label %loopentry.2.i
loopentry.2.i: ; preds = %endif.3.i19, %loopentry.2.i.preheader
br i1 false, label %loopentry.3.i10.preheader, label %loopentry.4.i15
loopentry.3.i10.preheader: ; preds = %loopentry.2.i
br label %loopentry.3.i10
loopentry.3.i10: ; preds = %loopexit.3.i14, %loopentry.3.i10.preheader
br i1 false, label %no_exit.3.preheader.i, label %loopexit.3.i14
no_exit.3.preheader.i: ; preds = %loopentry.3.i10
br label %no_exit.3.i12
no_exit.3.i12: ; preds = %no_exit.3.i12, %no_exit.3.preheader.i
br i1 false, label %no_exit.3.i12, label %loopexit.3.i14.loopexit
loopexit.3.i14.loopexit: ; preds = %no_exit.3.i12
br label %loopexit.3.i14
loopexit.3.i14: ; preds = %loopexit.3.i14.loopexit, %loopentry.3.i10
br i1 false, label %loopentry.3.i10, label %loopentry.4.i15.loopexit
loopentry.4.i15.loopexit: ; preds = %loopexit.3.i14
br label %loopentry.4.i15
loopentry.4.i15: ; preds = %loopentry.4.i15.loopexit, %loopentry.2.i
br i1 false, label %loopentry.5.outer.i.preheader, label %loopentry.7.i
loopentry.5.outer.i.preheader: ; preds = %loopentry.4.i15
br label %loopentry.5.outer.i
loopentry.5.outer.i: ; preds = %loopexit.5.i, %loopentry.5.outer.i.preheader
br label %loopentry.5.i
loopentry.5.i: ; preds = %endif.1.i18, %loopentry.5.outer.i
br i1 false, label %no_exit.5.i.preheader, label %loopexit.5.i.loopexit3
no_exit.5.i.preheader: ; preds = %loopentry.5.i
br label %no_exit.5.i
no_exit.5.i: ; preds = %then.2.i, %no_exit.5.i.preheader
br i1 false, label %loopentry.6.i, label %endif.1.i18
loopentry.6.i: ; preds = %no_exit.5.i
br i1 false, label %no_exit.6.preheader.i, label %loopexit.6.i
no_exit.6.preheader.i: ; preds = %loopentry.6.i
br label %no_exit.6.i
no_exit.6.i: ; preds = %no_exit.6.i, %no_exit.6.preheader.i
br i1 false, label %no_exit.6.i, label %loopexit.6.i.loopexit
loopexit.6.i.loopexit: ; preds = %no_exit.6.i
br label %loopexit.6.i
loopexit.6.i: ; preds = %loopexit.6.i.loopexit, %loopentry.6.i
br i1 false, label %then.2.i, label %endif.1.i18
then.2.i: ; preds = %loopexit.6.i
br i1 false, label %no_exit.5.i, label %loopexit.5.i.loopexit
endif.1.i18: ; preds = %loopexit.6.i, %no_exit.5.i
br label %loopentry.5.i
loopexit.5.i.loopexit: ; preds = %then.2.i
br label %loopexit.5.i
loopexit.5.i.loopexit3: ; preds = %loopentry.5.i
br label %loopexit.5.i
loopexit.5.i: ; preds = %loopexit.5.i.loopexit3, %loopexit.5.i.loopexit
br i1 false, label %loopentry.5.outer.i, label %loopentry.7.i.loopexit
loopentry.7.i.loopexit: ; preds = %loopexit.5.i
br label %loopentry.7.i
loopentry.7.i: ; preds = %loopentry.7.i.loopexit, %loopentry.4.i15
br i1 false, label %no_exit.7.i.preheader, label %hamming.exit.i
no_exit.7.i.preheader: ; preds = %loopentry.7.i
br label %no_exit.7.i
no_exit.7.i: ; preds = %no_exit.7.i, %no_exit.7.i.preheader
br i1 false, label %no_exit.7.i, label %loopexit.7.i
loopexit.7.i: ; preds = %no_exit.7.i
br i1 false, label %no_exit.i.i.preheader, label %hamming.exit.i
no_exit.i.i.preheader: ; preds = %loopexit.7.i
br label %no_exit.i.i
no_exit.i.i: ; preds = %no_exit.i.i, %no_exit.i.i.preheader
br i1 false, label %no_exit.i.i, label %hamming.exit.i.loopexit
hamming.exit.i.loopexit: ; preds = %no_exit.i.i
br label %hamming.exit.i
hamming.exit.i: ; preds = %hamming.exit.i.loopexit, %loopexit.7.i, %loopentry.7.i
br i1 false, label %endif.3.i19, label %loopentry.8.i
loopentry.8.i: ; preds = %hamming.exit.i
br i1 false, label %shortcirc_next.i.preheader, label %loopexit.8.i
shortcirc_next.i.preheader: ; preds = %loopentry.8.i
br label %shortcirc_next.i
shortcirc_next.i: ; preds = %no_exit.8.i, %shortcirc_next.i.preheader
br i1 false, label %no_exit.8.i, label %loopexit.8.i.loopexit
no_exit.8.i: ; preds = %shortcirc_next.i
br i1 false, label %shortcirc_next.i, label %loopexit.8.i.loopexit
loopexit.8.i.loopexit: ; preds = %no_exit.8.i, %shortcirc_next.i
br label %loopexit.8.i
loopexit.8.i: ; preds = %loopexit.8.i.loopexit, %loopentry.8.i
br i1 false, label %no_exit.9.i.preheader, label %endif.3.i19
no_exit.9.i.preheader: ; preds = %loopexit.8.i
br label %no_exit.9.i
no_exit.9.i: ; preds = %no_exit.9.i, %no_exit.9.i.preheader
br i1 false, label %no_exit.9.i, label %endif.3.i19.loopexit
endif.3.i19.loopexit: ; preds = %no_exit.9.i
br label %endif.3.i19
endif.3.i19: ; preds = %endif.3.i19.loopexit, %loopexit.8.i, %hamming.exit.i
br i1 false, label %loopentry.2.i, label %loopexit.1.i20
loopexit.1.i20: ; preds = %endif.3.i19
br i1 false, label %then.4.i, label %UnifiedReturnBlock.i
then.4.i: ; preds = %loopexit.1.i20
br label %runcont.exit
UnifiedReturnBlock.i: ; preds = %loopexit.1.i20
br label %runcont.exit
runcont.exit: ; preds = %UnifiedReturnBlock.i, %then.4.i
br i1 false, label %no_exit.1.i36.preheader, label %loopentry.3.i37
no_exit.1.i36.preheader: ; preds = %runcont.exit, %run.exit
br label %no_exit.1.i36
no_exit.1.i36: ; preds = %no_exit.1.i36, %no_exit.1.i36.preheader
br i1 false, label %no_exit.1.i36, label %loopentry.3.i37.loopexit
loopentry.3.i37.loopexit: ; preds = %no_exit.1.i36
br label %loopentry.3.i37
loopentry.3.i37: ; preds = %loopentry.3.i37.loopexit, %runcont.exit, %run.exit
br i1 false, label %loopentry.4.i38.preheader, label %loopexit.3.i
loopentry.4.i38.preheader: ; preds = %loopentry.3.i37
br label %loopentry.4.i38
loopentry.4.i38: ; preds = %loopexit.4.i42, %loopentry.4.i38.preheader
br i1 false, label %no_exit.3.i.preheader, label %loopexit.4.i42
no_exit.3.i.preheader: ; preds = %loopentry.4.i38
br label %no_exit.3.i
no_exit.3.i: ; preds = %no_exit.3.i.backedge, %no_exit.3.i.preheader
br i1 false, label %endif.3.i, label %else.1.i
else.1.i: ; preds = %no_exit.3.i
br i1 false, label %no_exit.3.i.backedge, label %loopexit.4.i42.loopexit
no_exit.3.i.backedge: ; preds = %endif.3.i, %else.1.i
br label %no_exit.3.i
endif.3.i: ; preds = %no_exit.3.i
br i1 false, label %no_exit.3.i.backedge, label %loopexit.4.i42.loopexit
loopexit.4.i42.loopexit: ; preds = %endif.3.i, %else.1.i
br label %loopexit.4.i42
loopexit.4.i42: ; preds = %loopexit.4.i42.loopexit, %loopentry.4.i38
br i1 false, label %loopentry.4.i38, label %loopexit.3.i.loopexit
loopexit.3.i.loopexit: ; preds = %loopexit.4.i42
br label %loopexit.3.i
loopexit.3.i: ; preds = %loopexit.3.i.loopexit, %loopentry.3.i37
%tmp.13.i155 = icmp slt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.13.i155, label %no_exit.0.i31, label %loopentry.1.i30.loopexit
}

View File

@ -1,96 +0,0 @@
; RUN: opt < %s -gvn -simplifycfg -disable-output
; PR867
target datalayout = "E-p:32:32"
target triple = "powerpc-apple-darwin8"
%struct.CUMULATIVE_ARGS = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.eh_status = type opaque
%struct.emit_status = type { i32, i32, %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack*, i32, %struct.location_t, i32, i8*, %struct.rtx_def** }
%struct.expr_status = type { i32, i32, i32, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def* }
%struct.function = type { %struct.eh_status*, %struct.expr_status*, %struct.emit_status*, %struct.varasm_status*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.function*, i32, i32, i32, i32, %struct.rtx_def*, %struct.CUMULATIVE_ARGS, %struct.rtx_def*, %struct.rtx_def*, %struct.initial_value_struct*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, i8, i32, i64, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.varray_head_tag*, %struct.temp_slot*, i32, %struct.var_refs_queue*, i32, i32, %struct.rtvec_def*, %struct.tree_node*, i32, i32, i32, %struct.machine_function*, i32, i32, i8, i8, %struct.language_function*, %struct.rtx_def*, i32, i32, i32, i32, %struct.location_t, %struct.varray_head_tag*, %struct.tree_node*, i8, i8, i8 }
%struct.initial_value_struct = type opaque
%struct.lang_decl = type opaque
%struct.lang_type = type opaque
%struct.language_function = type opaque
%struct.location_t = type { i8*, i32 }
%struct.machine_function = type { i32, i32, i8*, i32, i32 }
%struct.rtunion = type { i32 }
%struct.rtvec_def = type { i32, [1 x %struct.rtx_def*] }
%struct.rtx_def = type { i16, i8, i8, %struct.u }
%struct.sequence_stack = type { %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack* }
%struct.temp_slot = type opaque
%struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, %union.tree_ann_d*, i8, i8, i8, i8, i8 }
%struct.tree_decl = type { %struct.tree_common, %struct.location_t, i32, %struct.tree_node*, i8, i8, i8, i8, i8, i8, i8, i8, i32, %struct.tree_decl_u1, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.tree_decl_u2, %struct.tree_node*, %struct.tree_node*, i64, %struct.lang_decl* }
%struct.tree_decl_u1 = type { i64 }
%struct.tree_decl_u2 = type { %struct.function* }
%struct.tree_node = type { %struct.tree_decl }
%struct.tree_type = type { %struct.tree_common, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, i32, i16, i8, i8, i32, %struct.tree_node*, %struct.tree_node*, %struct.rtunion, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, i64, %struct.lang_type* }
%struct.u = type { [1 x i64] }
%struct.var_refs_queue = type { %struct.rtx_def*, i32, i32, %struct.var_refs_queue* }
%struct.varasm_status = type opaque
%struct.varray_head_tag = type { i32, i32, i32, i8*, %struct.u }
%union.tree_ann_d = type opaque
@mode_class = external global [35 x i8] ; <[35 x i8]*> [#uses=3]
define void @fold_builtin_classify() {
entry:
%tmp63 = load i32, i32* null ; <i32> [#uses=1]
switch i32 %tmp63, label %bb276 [
i32 414, label %bb145
i32 417, label %bb
]
bb: ; preds = %entry
ret void
bb145: ; preds = %entry
%tmp146 = load %struct.tree_node*, %struct.tree_node** null ; <%struct.tree_node*> [#uses=1]
%tmp148 = getelementptr %struct.tree_node, %struct.tree_node* %tmp146, i32 0, i32 0, i32 0, i32 1 ; <%struct.tree_node**> [#uses=1]
%tmp149 = load %struct.tree_node*, %struct.tree_node** %tmp148 ; <%struct.tree_node*> [#uses=1]
%tmp150 = bitcast %struct.tree_node* %tmp149 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp151 = getelementptr %struct.tree_type, %struct.tree_type* %tmp150, i32 0, i32 6 ; <i16*> [#uses=1]
%tmp151.upgrd.1 = bitcast i16* %tmp151 to i32* ; <i32*> [#uses=1]
%tmp152 = load i32, i32* %tmp151.upgrd.1 ; <i32> [#uses=1]
%tmp154 = lshr i32 %tmp152, 16 ; <i32> [#uses=1]
%tmp154.mask = and i32 %tmp154, 127 ; <i32> [#uses=1]
%gep.upgrd.2 = zext i32 %tmp154.mask to i64 ; <i64> [#uses=1]
%tmp155 = getelementptr [35 x i8], [35 x i8]* @mode_class, i32 0, i64 %gep.upgrd.2 ; <i8*> [#uses=1]
%tmp156 = load i8, i8* %tmp155 ; <i8> [#uses=1]
%tmp157 = icmp eq i8 %tmp156, 4 ; <i1> [#uses=1]
br i1 %tmp157, label %cond_next241, label %cond_true158
cond_true158: ; preds = %bb145
%tmp172 = load %struct.tree_node*, %struct.tree_node** null ; <%struct.tree_node*> [#uses=1]
%tmp174 = getelementptr %struct.tree_node, %struct.tree_node* %tmp172, i32 0, i32 0, i32 0, i32 1 ; <%struct.tree_node**> [#uses=1]
%tmp175 = load %struct.tree_node*, %struct.tree_node** %tmp174 ; <%struct.tree_node*> [#uses=1]
%tmp176 = bitcast %struct.tree_node* %tmp175 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp177 = getelementptr %struct.tree_type, %struct.tree_type* %tmp176, i32 0, i32 6 ; <i16*> [#uses=1]
%tmp177.upgrd.3 = bitcast i16* %tmp177 to i32* ; <i32*> [#uses=1]
%tmp178 = load i32, i32* %tmp177.upgrd.3 ; <i32> [#uses=1]
%tmp180 = lshr i32 %tmp178, 16 ; <i32> [#uses=1]
%tmp180.mask = and i32 %tmp180, 127 ; <i32> [#uses=1]
%gep.upgrd.4 = zext i32 %tmp180.mask to i64 ; <i64> [#uses=1]
%tmp181 = getelementptr [35 x i8], [35 x i8]* @mode_class, i32 0, i64 %gep.upgrd.4 ; <i8*> [#uses=1]
%tmp182 = load i8, i8* %tmp181 ; <i8> [#uses=1]
%tmp183 = icmp eq i8 %tmp182, 8 ; <i1> [#uses=1]
br i1 %tmp183, label %cond_next241, label %cond_true184
cond_true184: ; preds = %cond_true158
%tmp185 = load %struct.tree_node*, %struct.tree_node** null ; <%struct.tree_node*> [#uses=1]
%tmp187 = getelementptr %struct.tree_node, %struct.tree_node* %tmp185, i32 0, i32 0, i32 0, i32 1 ; <%struct.tree_node**> [#uses=1]
%tmp188 = load %struct.tree_node*, %struct.tree_node** %tmp187 ; <%struct.tree_node*> [#uses=1]
%tmp189 = bitcast %struct.tree_node* %tmp188 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp190 = getelementptr %struct.tree_type, %struct.tree_type* %tmp189, i32 0, i32 6 ; <i16*> [#uses=1]
%tmp190.upgrd.5 = bitcast i16* %tmp190 to i32* ; <i32*> [#uses=1]
%tmp191 = load i32, i32* %tmp190.upgrd.5 ; <i32> [#uses=1]
%tmp193 = lshr i32 %tmp191, 16 ; <i32> [#uses=1]
%tmp193.mask = and i32 %tmp193, 127 ; <i32> [#uses=1]
%gep.upgrd.6 = zext i32 %tmp193.mask to i64 ; <i64> [#uses=1]
%tmp194 = getelementptr [35 x i8], [35 x i8]* @mode_class, i32 0, i64 %gep.upgrd.6 ; <i8*> [#uses=1]
%tmp195 = load i8, i8* %tmp194 ; <i8> [#uses=1]
%tmp196 = icmp eq i8 %tmp195, 4 ; <i1> [#uses=1]
br i1 %tmp196, label %cond_next241, label %cond_true197
cond_true197: ; preds = %cond_true184
ret void
cond_next241: ; preds = %cond_true184, %cond_true158, %bb145
%tmp245 = load i32, i32* null ; <i32> [#uses=0]
ret void
bb276: ; preds = %entry
ret void
}

View File

@ -1,29 +0,0 @@
; PR957
; RUN: opt < %s -simplifycfg -S | FileCheck %s
; CHECK-NOT: select
@G = extern_weak global i32
define i32 @test(i32 %tmp) {
cond_false179:
%tmp181 = icmp eq i32 %tmp, 0 ; <i1> [#uses=1]
br i1 %tmp181, label %cond_true182, label %cond_next185
cond_true182: ; preds = %cond_false179
br label %cond_next185
cond_next185: ; preds = %cond_true182, %cond_false179
%d0.3 = phi i32 [ udiv (i32 1, i32 ptrtoint (i32* @G to i32)), %cond_true182 ], [ %tmp, %cond_false179 ] ; <i32> [#uses=1]
ret i32 %d0.3
}
define i32 @test2(i32 %tmp) {
cond_false179:
%tmp181 = icmp eq i32 %tmp, 0 ; <i1> [#uses=1]
br i1 %tmp181, label %cond_true182, label %cond_next185
cond_true182: ; preds = %cond_false179
br label %cond_next185
cond_next185: ; preds = %cond_true182, %cond_false179
%d0.3 = phi i32 [ udiv (i32 1, i32 ptrtoint (i32* @G to i32)), %cond_true182 ], [ %tmp, %cond_false179 ] ; <i32> [#uses=1]
call i32 @test( i32 4 ) ; <i32>:0 [#uses=0]
ret i32 %d0.3
}

View File

@ -1,131 +0,0 @@
; RUN: opt < %s -simplifycfg | llvm-dis
; END.
; ModuleID = '2006-12-08-Ptr-ICmp-Branch.ll'
target datalayout = "e-p:32:32"
target triple = "i686-pc-linux-gnu"
%struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] }
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 }
%struct.charsequence = type { i8*, i32, i32 }
%struct.trie_s = type { [26 x %struct.trie_s*], i32 }
@str = external global [14 x i8] ; <[14 x i8]*> [#uses=0]
@str.upgrd.1 = external global [32 x i8] ; <[32 x i8]*> [#uses=0]
@str.upgrd.2 = external global [12 x i8] ; <[12 x i8]*> [#uses=0]
@C.0.2294 = external global %struct.charsequence ; <%struct.charsequence*> [#uses=3]
@t = external global %struct.trie_s* ; <%struct.trie_s**> [#uses=0]
@str.upgrd.3 = external global [3 x i8] ; <[3 x i8]*> [#uses=0]
@str.upgrd.4 = external global [26 x i8] ; <[26 x i8]*> [#uses=0]
declare void @charsequence_reset(%struct.charsequence*)
declare void @free(i8*)
declare void @charsequence_push(%struct.charsequence*, i8)
declare i8* @charsequence_val(%struct.charsequence*)
declare i32 @_IO_getc(%struct.FILE*)
declare i32 @tolower(i32)
declare %struct.trie_s* @trie_insert(%struct.trie_s*, i8*)
declare i32 @feof(%struct.FILE*)
define void @addfile(%struct.trie_s* %t, %struct.FILE* %f) {
entry:
%t_addr = alloca %struct.trie_s* ; <%struct.trie_s**> [#uses=2]
%f_addr = alloca %struct.FILE* ; <%struct.FILE**> [#uses=3]
%c = alloca i8, align 1 ; <i8*> [#uses=7]
%wstate = alloca i32, align 4 ; <i32*> [#uses=4]
%cs = alloca %struct.charsequence, align 16 ; <%struct.charsequence*> [#uses=7]
%str = alloca i8*, align 4 ; <i8**> [#uses=3]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store %struct.trie_s* %t, %struct.trie_s** %t_addr
store %struct.FILE* %f, %struct.FILE** %f_addr
store i32 0, i32* %wstate
%tmp = getelementptr %struct.charsequence, %struct.charsequence* %cs, i64 0, i32 0 ; <i8**> [#uses=1]
%tmp1 = getelementptr %struct.charsequence, %struct.charsequence* @C.0.2294, i64 0, i32 0 ; <i8**> [#uses=1]
%tmp.upgrd.5 = load i8*, i8** %tmp1 ; <i8*> [#uses=1]
store i8* %tmp.upgrd.5, i8** %tmp
%tmp.upgrd.6 = getelementptr %struct.charsequence, %struct.charsequence* %cs, i64 0, i32 1 ; <i32*> [#uses=1]
%tmp2 = getelementptr %struct.charsequence, %struct.charsequence* @C.0.2294, i64 0, i32 1 ; <i32*> [#uses=1]
%tmp.upgrd.7 = load i32, i32* %tmp2 ; <i32> [#uses=1]
store i32 %tmp.upgrd.7, i32* %tmp.upgrd.6
%tmp3 = getelementptr %struct.charsequence, %struct.charsequence* %cs, i64 0, i32 2 ; <i32*> [#uses=1]
%tmp4 = getelementptr %struct.charsequence, %struct.charsequence* @C.0.2294, i64 0, i32 2 ; <i32*> [#uses=1]
%tmp5 = load i32, i32* %tmp4 ; <i32> [#uses=1]
store i32 %tmp5, i32* %tmp3
br label %bb33
bb: ; preds = %bb33
%tmp.upgrd.8 = load %struct.FILE*, %struct.FILE** %f_addr ; <%struct.FILE*> [#uses=1]
%tmp.upgrd.9 = call i32 @_IO_getc( %struct.FILE* %tmp.upgrd.8 ) ; <i32> [#uses=1]
%tmp6 = call i32 @tolower( i32 %tmp.upgrd.9 ) ; <i32> [#uses=1]
%tmp6.upgrd.10 = trunc i32 %tmp6 to i8 ; <i8> [#uses=1]
store i8 %tmp6.upgrd.10, i8* %c
%tmp7 = load i32, i32* %wstate ; <i32> [#uses=1]
%tmp.upgrd.11 = icmp ne i32 %tmp7, 0 ; <i1> [#uses=1]
br i1 %tmp.upgrd.11, label %cond_true, label %cond_false
cond_true: ; preds = %bb
%tmp.upgrd.12 = load i8, i8* %c ; <i8> [#uses=1]
%tmp8 = icmp sle i8 %tmp.upgrd.12, 96 ; <i1> [#uses=1]
br i1 %tmp8, label %cond_true9, label %cond_next
cond_true9: ; preds = %cond_true
br label %bb16
cond_next: ; preds = %cond_true
%tmp10 = load i8, i8* %c ; <i8> [#uses=1]
%tmp11 = icmp sgt i8 %tmp10, 122 ; <i1> [#uses=1]
br i1 %tmp11, label %cond_true12, label %cond_next13
cond_true12: ; preds = %cond_next
br label %bb16
cond_next13: ; preds = %cond_next
%tmp14 = load i8, i8* %c ; <i8> [#uses=1]
%tmp14.upgrd.13 = sext i8 %tmp14 to i32 ; <i32> [#uses=1]
%tmp1415 = trunc i32 %tmp14.upgrd.13 to i8 ; <i8> [#uses=1]
call void @charsequence_push( %struct.charsequence* %cs, i8 %tmp1415 )
br label %bb21
bb16: ; preds = %cond_true12, %cond_true9
%tmp17 = call i8* @charsequence_val( %struct.charsequence* %cs ) ; <i8*> [#uses=1]
store i8* %tmp17, i8** %str
%tmp.upgrd.14 = load %struct.trie_s*, %struct.trie_s** %t_addr ; <%struct.trie_s*> [#uses=1]
%tmp18 = load i8*, i8** %str ; <i8*> [#uses=1]
%tmp19 = call %struct.trie_s* @trie_insert( %struct.trie_s* %tmp.upgrd.14, i8* %tmp18 ) ; <%struct.trie_s*> [#uses=0]
%tmp20 = load i8*, i8** %str ; <i8*> [#uses=1]
call void @free( i8* %tmp20 )
store i32 0, i32* %wstate
br label %bb21
bb21: ; preds = %bb16, %cond_next13
br label %cond_next32
cond_false: ; preds = %bb
%tmp22 = load i8, i8* %c ; <i8> [#uses=1]
%tmp23 = icmp sgt i8 %tmp22, 96 ; <i1> [#uses=1]
br i1 %tmp23, label %cond_true24, label %cond_next31
cond_true24: ; preds = %cond_false
%tmp25 = load i8, i8* %c ; <i8> [#uses=1]
%tmp26 = icmp sle i8 %tmp25, 122 ; <i1> [#uses=1]
br i1 %tmp26, label %cond_true27, label %cond_next30
cond_true27: ; preds = %cond_true24
call void @charsequence_reset( %struct.charsequence* %cs )
%tmp28 = load i8, i8* %c ; <i8> [#uses=1]
%tmp28.upgrd.15 = sext i8 %tmp28 to i32 ; <i32> [#uses=1]
%tmp2829 = trunc i32 %tmp28.upgrd.15 to i8 ; <i8> [#uses=1]
call void @charsequence_push( %struct.charsequence* %cs, i8 %tmp2829 )
store i32 1, i32* %wstate
br label %cond_next30
cond_next30: ; preds = %cond_true27, %cond_true24
br label %cond_next31
cond_next31: ; preds = %cond_next30, %cond_false
br label %cond_next32
cond_next32: ; preds = %cond_next31, %bb21
br label %bb33
bb33: ; preds = %cond_next32, %entry
%tmp34 = load %struct.FILE*, %struct.FILE** %f_addr ; <%struct.FILE*> [#uses=1]
%tmp35 = call i32 @feof( %struct.FILE* %tmp34 ) ; <i32> [#uses=1]
%tmp36 = icmp eq i32 %tmp35, 0 ; <i1> [#uses=1]
br i1 %tmp36, label %bb, label %bb37
bb37: ; preds = %bb33
br label %return
return: ; preds = %bb37
ret void
}

View File

@ -1,20 +0,0 @@
; RUN: opt < %s -simplifycfg -S | FileCheck %s
; CHECK-NOT: invoke
declare i32 @func(i8*) nounwind
define i32 @test() personality i32 (...)* @__gxx_personality_v0 {
invoke i32 @func( i8* null )
to label %Cont unwind label %Other ; <i32>:1 [#uses=0]
Cont: ; preds = %0
ret i32 0
Other: ; preds = %0
landingpad { i8*, i32 }
catch i8* null
ret i32 1
}
declare i32 @__gxx_personality_v0(...)

View File

@ -1,37 +0,0 @@
;RUN: opt < %s -simplifycfg -disable-output
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"
define i32 @bork() nounwind {
entry:
br label %bb5.outer
bb5.outer.loopexit: ; preds = %bb5
br label %bb5.outer
bb5.outer: ; preds = %bb5.outer.loopexit, %entry
%undo.0.ph = phi i32 [ 0, %entry ], [ 1, %bb5.outer.loopexit ] ; <i32> [#uses=1]
br label %bb5
bb5: ; preds = %bb5, %bb5.outer
%tmp6 = tail call i32 (...) @foo( ) nounwind ; <i32> [#uses=1]
switch i32 %tmp6, label %bb13 [
i32 -1, label %bb10
i32 102, label %bb5
i32 110, label %bb5.outer.loopexit
]
bb10: ; preds = %bb5
%tmp12 = tail call i32 (...) @bar( i32 %undo.0.ph ) nounwind ; <i32> [#uses=0]
br label %UnifiedReturnBlock
bb13: ; preds = %bb5
br label %UnifiedReturnBlock
UnifiedReturnBlock: ; preds = %bb13, %bb10
%UnifiedRetVal = phi i32 [ 1, %bb10 ], [ 258, %bb13 ] ; <i32> [#uses=1]
ret i32 %UnifiedRetVal
}
declare i32 @foo(...)
declare i32 @bar(...)

Some files were not shown because too many files have changed in this diff Show More