266 lines
5.2 KiB
LLVM
266 lines
5.2 KiB
LLVM
; RUN: opt < %s -jump-threading -disable-output
|
|
|
|
%struct.ham = type { i8, i8, i16, i32 }
|
|
%struct.zot = type { i32 (...)** }
|
|
%struct.quux.0 = type { %struct.wombat }
|
|
%struct.wombat = type { %struct.zot }
|
|
|
|
@global = external global %struct.ham*, align 8
|
|
@global.1 = external constant i8*
|
|
|
|
declare i32 @wombat.2()
|
|
|
|
define void @blam() {
|
|
bb:
|
|
%tmp = load i32, i32* undef
|
|
%tmp1 = icmp eq i32 %tmp, 0
|
|
br i1 %tmp1, label %bb11, label %bb2
|
|
|
|
bb2:
|
|
%tmp3 = tail call i32 @wombat.2()
|
|
switch i32 %tmp3, label %bb4 [
|
|
i32 0, label %bb5
|
|
i32 1, label %bb7
|
|
i32 2, label %bb7
|
|
i32 3, label %bb11
|
|
]
|
|
|
|
bb4:
|
|
br label %bb7
|
|
|
|
bb5:
|
|
%tmp6 = tail call i32 @wombat.2()
|
|
br label %bb7
|
|
|
|
bb7:
|
|
%tmp8 = phi i32 [ 0, %bb5 ], [ 1, %bb4 ], [ 2, %bb2 ], [ 2, %bb2 ]
|
|
%tmp9 = icmp eq i32 %tmp8, 0
|
|
br i1 %tmp9, label %bb11, label %bb10
|
|
|
|
bb10:
|
|
ret void
|
|
|
|
bb11:
|
|
ret void
|
|
}
|
|
|
|
define void @spam(%struct.ham* %arg) {
|
|
bb:
|
|
%tmp = load i8, i8* undef, align 8
|
|
switch i8 %tmp, label %bb11 [
|
|
i8 1, label %bb11
|
|
i8 2, label %bb11
|
|
i8 3, label %bb1
|
|
i8 4, label %bb1
|
|
]
|
|
|
|
bb1:
|
|
br label %bb2
|
|
|
|
bb2:
|
|
%tmp3 = phi i32 [ 0, %bb1 ], [ %tmp3, %bb8 ]
|
|
br label %bb4
|
|
|
|
bb4:
|
|
%tmp5 = load i8, i8* undef, align 8
|
|
switch i8 %tmp5, label %bb11 [
|
|
i8 0, label %bb11
|
|
i8 1, label %bb10
|
|
i8 2, label %bb10
|
|
i8 3, label %bb6
|
|
i8 4, label %bb6
|
|
]
|
|
|
|
bb6:
|
|
br label %bb7
|
|
|
|
bb7:
|
|
br i1 undef, label %bb8, label %bb10
|
|
|
|
bb8:
|
|
%tmp9 = icmp eq %struct.ham* undef, %arg
|
|
br i1 %tmp9, label %bb10, label %bb2
|
|
|
|
bb10:
|
|
switch i32 %tmp3, label %bb4 [
|
|
i32 0, label %bb14
|
|
i32 1, label %bb11
|
|
i32 2, label %bb12
|
|
]
|
|
|
|
bb11:
|
|
unreachable
|
|
|
|
bb12:
|
|
%tmp13 = load %struct.ham*, %struct.ham** undef
|
|
br label %bb14
|
|
|
|
bb14:
|
|
%tmp15 = phi %struct.ham* [ %tmp13, %bb12 ], [ null, %bb10 ]
|
|
br label %bb16
|
|
|
|
bb16:
|
|
%tmp17 = load i8, i8* undef, align 8
|
|
switch i8 %tmp17, label %bb11 [
|
|
i8 0, label %bb11
|
|
i8 11, label %bb18
|
|
i8 12, label %bb18
|
|
]
|
|
|
|
bb18:
|
|
br label %bb19
|
|
|
|
bb19:
|
|
br label %bb20
|
|
|
|
bb20:
|
|
%tmp21 = load %struct.ham*, %struct.ham** undef
|
|
switch i8 undef, label %bb22 [
|
|
i8 0, label %bb4
|
|
i8 11, label %bb10
|
|
i8 12, label %bb10
|
|
]
|
|
|
|
bb22:
|
|
br label %bb23
|
|
|
|
bb23:
|
|
%tmp24 = icmp eq %struct.ham* %tmp21, null
|
|
br i1 %tmp24, label %bb35, label %bb25
|
|
|
|
bb25:
|
|
%tmp26 = icmp eq %struct.ham* %tmp15, null
|
|
br i1 %tmp26, label %bb34, label %bb27
|
|
|
|
bb27:
|
|
%tmp28 = load %struct.ham*, %struct.ham** undef
|
|
%tmp29 = icmp eq %struct.ham* %tmp28, %tmp21
|
|
br i1 %tmp29, label %bb35, label %bb30
|
|
|
|
bb30:
|
|
br label %bb31
|
|
|
|
bb31:
|
|
%tmp32 = load i8, i8* undef, align 8
|
|
%tmp33 = icmp eq i8 %tmp32, 0
|
|
br i1 %tmp33, label %bb31, label %bb34
|
|
|
|
bb34:
|
|
br label %bb35
|
|
|
|
bb35:
|
|
%tmp36 = phi i1 [ true, %bb34 ], [ false, %bb23 ], [ true, %bb27 ]
|
|
br label %bb37
|
|
|
|
bb37:
|
|
%tmp38 = icmp eq %struct.ham* %tmp15, null
|
|
br i1 %tmp38, label %bb39, label %bb41
|
|
|
|
bb39:
|
|
%tmp40 = load %struct.ham*, %struct.ham** @global
|
|
br label %bb41
|
|
|
|
bb41:
|
|
%tmp42 = select i1 %tmp36, %struct.ham* undef, %struct.ham* undef
|
|
ret void
|
|
}
|
|
|
|
declare i32 @foo(...)
|
|
|
|
define void @zot() align 2 personality i8* bitcast (i32 (...)* @foo to i8*) {
|
|
bb:
|
|
invoke void @bar()
|
|
to label %bb1 unwind label %bb3
|
|
|
|
bb1:
|
|
invoke void @bar()
|
|
to label %bb2 unwind label %bb4
|
|
|
|
bb2:
|
|
invoke void @bar()
|
|
to label %bb6 unwind label %bb17
|
|
|
|
bb3:
|
|
%tmp = landingpad { i8*, i32 }
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
unreachable
|
|
|
|
bb4:
|
|
%tmp5 = landingpad { i8*, i32 }
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
unreachable
|
|
|
|
bb6:
|
|
invoke void @bar()
|
|
to label %bb7 unwind label %bb19
|
|
|
|
bb7:
|
|
invoke void @bar()
|
|
to label %bb10 unwind label %bb8
|
|
|
|
bb8:
|
|
%tmp9 = landingpad { i8*, i32 }
|
|
cleanup
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
unreachable
|
|
|
|
bb10:
|
|
%tmp11 = load i32 (%struct.zot*)*, i32 (%struct.zot*)** undef, align 8
|
|
%tmp12 = invoke i32 %tmp11(%struct.zot* nonnull undef)
|
|
to label %bb13 unwind label %bb21
|
|
|
|
bb13:
|
|
invoke void @bar()
|
|
to label %bb14 unwind label %bb23
|
|
|
|
bb14:
|
|
%tmp15 = load i32 (%struct.zot*)*, i32 (%struct.zot*)** undef, align 8
|
|
%tmp16 = invoke i32 %tmp15(%struct.zot* nonnull undef)
|
|
to label %bb26 unwind label %bb23
|
|
|
|
bb17:
|
|
%tmp18 = landingpad { i8*, i32 }
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
unreachable
|
|
|
|
bb19:
|
|
%tmp20 = landingpad { i8*, i32 }
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
unreachable
|
|
|
|
bb21:
|
|
%tmp22 = landingpad { i8*, i32 }
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
unreachable
|
|
|
|
bb23:
|
|
%tmp24 = phi %struct.quux.0* [ null, %bb26 ], [ null, %bb14 ], [ undef, %bb13 ]
|
|
%tmp25 = landingpad { i8*, i32 }
|
|
catch i8* bitcast (i8** @global.1 to i8*)
|
|
catch i8* null
|
|
br label %bb30
|
|
|
|
bb26:
|
|
%tmp27 = load i32 (%struct.zot*)*, i32 (%struct.zot*)** undef, align 8
|
|
%tmp28 = invoke i32 %tmp27(%struct.zot* nonnull undef)
|
|
to label %bb29 unwind label %bb23
|
|
|
|
bb29:
|
|
unreachable
|
|
|
|
bb30:
|
|
%tmp31 = icmp eq %struct.quux.0* %tmp24, null
|
|
br i1 %tmp31, label %bb32, label %bb29
|
|
|
|
bb32:
|
|
unreachable
|
|
}
|
|
|
|
declare void @bar()
|