Stop using tests with grep, or no output checks at all. Just use FileCheck and generate checks. Also remove unnecessary requires asserts.
443 lines
12 KiB
LLVM
443 lines
12 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -S -passes=jump-threading < %s | FileCheck %s
|
|
|
|
%struct.ham = type { i8, i8, i16, i32 }
|
|
%struct.zot = type { ptr }
|
|
%struct.quux.0 = type { %struct.wombat }
|
|
%struct.wombat = type { %struct.zot }
|
|
|
|
@global = external global ptr, align 8
|
|
@global.1 = external constant ptr
|
|
|
|
declare i32 @wombat.2()
|
|
|
|
define void @blam() {
|
|
; CHECK-LABEL: @blam(
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: [[TMP:%.*]] = load i32, ptr undef, align 4
|
|
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP]], 0
|
|
; CHECK-NEXT: br i1 [[TMP1]], label [[BB11:%.*]], label [[BB2:%.*]]
|
|
; CHECK: bb2:
|
|
; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @wombat.2()
|
|
; CHECK-NEXT: switch i32 [[TMP3]], label [[BB10:%.*]] [
|
|
; CHECK-NEXT: i32 0, label [[BB7:%.*]]
|
|
; CHECK-NEXT: i32 1, label [[BB10]]
|
|
; CHECK-NEXT: i32 2, label [[BB10]]
|
|
; CHECK-NEXT: i32 3, label [[BB11]]
|
|
; CHECK-NEXT: ]
|
|
; CHECK: bb7:
|
|
; CHECK-NEXT: [[TMP6:%.*]] = tail call i32 @wombat.2()
|
|
; CHECK-NEXT: br label [[BB11]]
|
|
; CHECK: bb10:
|
|
; CHECK-NEXT: ret void
|
|
; CHECK: bb11:
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
bb:
|
|
%tmp = load i32, ptr 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(ptr %arg) {
|
|
; CHECK-LABEL: @spam(
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: [[TMP:%.*]] = load i8, ptr undef, align 8
|
|
; CHECK-NEXT: switch i8 [[TMP]], label [[BB11:%.*]] [
|
|
; CHECK-NEXT: i8 1, label [[BB11]]
|
|
; CHECK-NEXT: i8 2, label [[BB11]]
|
|
; CHECK-NEXT: i8 3, label [[BB1:%.*]]
|
|
; CHECK-NEXT: i8 4, label [[BB1]]
|
|
; CHECK-NEXT: ]
|
|
; CHECK: bb1:
|
|
; CHECK-NEXT: br label [[BB2:%.*]]
|
|
; CHECK: bb2:
|
|
; CHECK-NEXT: [[TMP3:%.*]] = phi i32 [ 0, [[BB1]] ], [ [[TMP3]], [[BB8:%.*]] ]
|
|
; CHECK-NEXT: br label [[BB4:%.*]]
|
|
; CHECK: bb4:
|
|
; CHECK-NEXT: [[TMP5:%.*]] = load i8, ptr undef, align 8
|
|
; CHECK-NEXT: switch i8 [[TMP5]], label [[BB11]] [
|
|
; CHECK-NEXT: i8 0, label [[BB11]]
|
|
; CHECK-NEXT: i8 1, label [[BB10:%.*]]
|
|
; CHECK-NEXT: i8 2, label [[BB10]]
|
|
; CHECK-NEXT: i8 3, label [[BB8]]
|
|
; CHECK-NEXT: i8 4, label [[BB8]]
|
|
; CHECK-NEXT: ]
|
|
; CHECK: bb8:
|
|
; CHECK-NEXT: [[TMP9:%.*]] = icmp eq ptr undef, [[ARG:%.*]]
|
|
; CHECK-NEXT: br i1 [[TMP9]], label [[BB10]], label [[BB2]]
|
|
; CHECK: bb10:
|
|
; CHECK-NEXT: switch i32 [[TMP3]], label [[BB4]] [
|
|
; CHECK-NEXT: i32 0, label [[BB16:%.*]]
|
|
; CHECK-NEXT: i32 1, label [[BB11]]
|
|
; CHECK-NEXT: i32 2, label [[BB12:%.*]]
|
|
; CHECK-NEXT: ]
|
|
; CHECK: bb11:
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb12:
|
|
; CHECK-NEXT: [[TMP13:%.*]] = load ptr, ptr undef, align 8
|
|
; CHECK-NEXT: br label [[BB16]]
|
|
; CHECK: bb16:
|
|
; CHECK-NEXT: [[TMP15:%.*]] = phi ptr [ [[TMP13]], [[BB12]] ], [ null, [[BB10]] ]
|
|
; CHECK-NEXT: [[TMP17:%.*]] = load i8, ptr undef, align 8
|
|
; CHECK-NEXT: switch i8 [[TMP17]], label [[BB11]] [
|
|
; CHECK-NEXT: i8 0, label [[BB11]]
|
|
; CHECK-NEXT: i8 11, label [[BB23:%.*]]
|
|
; CHECK-NEXT: i8 12, label [[BB23]]
|
|
; CHECK-NEXT: ]
|
|
; CHECK: bb23:
|
|
; CHECK-NEXT: [[TMP21:%.*]] = load ptr, ptr undef, align 8
|
|
; CHECK-NEXT: [[TMP24:%.*]] = icmp eq ptr [[TMP21]], null
|
|
; CHECK-NEXT: br i1 [[TMP24]], label [[BB37:%.*]], label [[BB25:%.*]]
|
|
; CHECK: bb25:
|
|
; CHECK-NEXT: [[TMP26:%.*]] = icmp eq ptr [[TMP15]], null
|
|
; CHECK-NEXT: br i1 [[TMP26]], label [[BB41_THREAD:%.*]], label [[BB27:%.*]]
|
|
; CHECK: bb27:
|
|
; CHECK-NEXT: [[TMP28:%.*]] = load ptr, ptr undef, align 8
|
|
; CHECK-NEXT: [[TMP29:%.*]] = icmp eq ptr [[TMP28]], [[TMP21]]
|
|
; CHECK-NEXT: br i1 [[TMP29]], label [[BB41_THREAD]], label [[BB30:%.*]]
|
|
; CHECK: bb30:
|
|
; CHECK-NEXT: [[TMP32_PR:%.*]] = load i8, ptr undef, align 8
|
|
; CHECK-NEXT: br label [[BB31:%.*]]
|
|
; CHECK: bb31:
|
|
; CHECK-NEXT: [[TMP32:%.*]] = phi i8 [ [[TMP32]], [[BB31]] ], [ [[TMP32_PR]], [[BB30]] ]
|
|
; CHECK-NEXT: [[TMP33:%.*]] = icmp eq i8 [[TMP32]], 0
|
|
; CHECK-NEXT: br i1 [[TMP33]], label [[BB31]], label [[BB37]]
|
|
; CHECK: bb37:
|
|
; CHECK-NEXT: [[TMP36:%.*]] = phi i1 [ false, [[BB23]] ], [ true, [[BB31]] ]
|
|
; CHECK-NEXT: [[TMP38:%.*]] = icmp eq ptr [[TMP15]], null
|
|
; CHECK-NEXT: br i1 [[TMP38]], label [[BB39:%.*]], label [[BB41:%.*]]
|
|
; CHECK: bb39:
|
|
; CHECK-NEXT: [[TMP364:%.*]] = phi i1 [ [[TMP36]], [[BB37]] ]
|
|
; CHECK-NEXT: [[TMP40:%.*]] = load ptr, ptr @global, align 8
|
|
; CHECK-NEXT: br i1 [[TMP364]], label [[BB41_THREAD]], label [[BB41_THREAD]]
|
|
; CHECK: bb41:
|
|
; CHECK-NEXT: [[TMP363:%.*]] = phi i1 [ [[TMP36]], [[BB37]] ]
|
|
; CHECK-NEXT: br i1 [[TMP363]], label [[BB41_THREAD]], label [[BB41_THREAD]]
|
|
; CHECK: bb41.thread:
|
|
; CHECK-NEXT: [[TMP0:%.*]] = phi ptr [ undef, [[BB41]] ], [ undef, [[BB39]] ], [ undef, [[BB39]] ], [ undef, [[BB41]] ], [ undef, [[BB27]] ], [ undef, [[BB25]] ]
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
bb:
|
|
%tmp = load i8, ptr 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, ptr 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 ptr 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 ptr, ptr undef
|
|
br label %bb14
|
|
|
|
bb14:
|
|
%tmp15 = phi ptr [ %tmp13, %bb12 ], [ null, %bb10 ]
|
|
br label %bb16
|
|
|
|
bb16:
|
|
%tmp17 = load i8, ptr 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 ptr, ptr 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 ptr %tmp21, null
|
|
br i1 %tmp24, label %bb35, label %bb25
|
|
|
|
bb25:
|
|
%tmp26 = icmp eq ptr %tmp15, null
|
|
br i1 %tmp26, label %bb34, label %bb27
|
|
|
|
bb27:
|
|
%tmp28 = load ptr, ptr undef
|
|
%tmp29 = icmp eq ptr %tmp28, %tmp21
|
|
br i1 %tmp29, label %bb35, label %bb30
|
|
|
|
bb30:
|
|
br label %bb31
|
|
|
|
bb31:
|
|
%tmp32 = load i8, ptr 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 ptr %tmp15, null
|
|
br i1 %tmp38, label %bb39, label %bb41
|
|
|
|
bb39:
|
|
%tmp40 = load ptr, ptr @global
|
|
br label %bb41
|
|
|
|
bb41:
|
|
%tmp42 = select i1 %tmp36, ptr undef, ptr undef
|
|
ret void
|
|
}
|
|
|
|
declare i32 @foo(...)
|
|
|
|
define void @zot() align 2 personality ptr @foo {
|
|
; CHECK-LABEL: @zot(
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: invoke void @bar()
|
|
; CHECK-NEXT: to label [[BB1:%.*]] unwind label [[BB3:%.*]]
|
|
; CHECK: bb1:
|
|
; CHECK-NEXT: invoke void @bar()
|
|
; CHECK-NEXT: to label [[BB2:%.*]] unwind label [[BB4:%.*]]
|
|
; CHECK: bb2:
|
|
; CHECK-NEXT: invoke void @bar()
|
|
; CHECK-NEXT: to label [[BB6:%.*]] unwind label [[BB17:%.*]]
|
|
; CHECK: bb3:
|
|
; CHECK-NEXT: [[TMP:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb4:
|
|
; CHECK-NEXT: [[TMP5:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb6:
|
|
; CHECK-NEXT: invoke void @bar()
|
|
; CHECK-NEXT: to label [[BB7:%.*]] unwind label [[BB19:%.*]]
|
|
; CHECK: bb7:
|
|
; CHECK-NEXT: invoke void @bar()
|
|
; CHECK-NEXT: to label [[BB10:%.*]] unwind label [[BB8:%.*]]
|
|
; CHECK: bb8:
|
|
; CHECK-NEXT: [[TMP9:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: cleanup
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb10:
|
|
; CHECK-NEXT: [[TMP11:%.*]] = load ptr, ptr undef, align 8
|
|
; CHECK-NEXT: [[TMP12:%.*]] = invoke i32 [[TMP11]](ptr nonnull undef)
|
|
; CHECK-NEXT: to label [[BB13:%.*]] unwind label [[BB21:%.*]]
|
|
; CHECK: bb13:
|
|
; CHECK-NEXT: invoke void @bar()
|
|
; CHECK-NEXT: to label [[BB14:%.*]] unwind label [[BB30:%.*]]
|
|
; CHECK: bb14:
|
|
; CHECK-NEXT: [[TMP15:%.*]] = load ptr, ptr undef, align 8
|
|
; CHECK-NEXT: [[TMP16:%.*]] = invoke i32 [[TMP15]](ptr nonnull undef)
|
|
; CHECK-NEXT: to label [[BB26:%.*]] unwind label [[BB30_THREAD:%.*]]
|
|
; CHECK: bb17:
|
|
; CHECK-NEXT: [[TMP18:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb19:
|
|
; CHECK-NEXT: [[TMP20:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb21:
|
|
; CHECK-NEXT: [[TMP22:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb26:
|
|
; CHECK-NEXT: [[TMP27:%.*]] = load ptr, ptr undef, align 8
|
|
; CHECK-NEXT: [[TMP28:%.*]] = invoke i32 [[TMP27]](ptr nonnull undef)
|
|
; CHECK-NEXT: to label [[BB29:%.*]] unwind label [[BB30_THREAD]]
|
|
; CHECK: bb29:
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb30.thread:
|
|
; CHECK-NEXT: [[LPAD_THR_COMM:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: br label [[BB32:%.*]]
|
|
; CHECK: bb30:
|
|
; CHECK-NEXT: [[LPAD_THR_COMM_SPLIT_LP:%.*]] = landingpad { ptr, i32 }
|
|
; CHECK-NEXT: catch ptr @global.1
|
|
; CHECK-NEXT: catch ptr null
|
|
; CHECK-NEXT: br label [[BB32]]
|
|
; CHECK: bb32:
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
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 { ptr, i32 }
|
|
catch ptr @global.1
|
|
catch ptr null
|
|
unreachable
|
|
|
|
bb4:
|
|
%tmp5 = landingpad { ptr, i32 }
|
|
catch ptr @global.1
|
|
catch ptr 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 { ptr, i32 }
|
|
cleanup
|
|
catch ptr @global.1
|
|
catch ptr null
|
|
unreachable
|
|
|
|
bb10:
|
|
%tmp11 = load ptr, ptr undef, align 8
|
|
%tmp12 = invoke i32 %tmp11(ptr nonnull undef)
|
|
to label %bb13 unwind label %bb21
|
|
|
|
bb13:
|
|
invoke void @bar()
|
|
to label %bb14 unwind label %bb23
|
|
|
|
bb14:
|
|
%tmp15 = load ptr, ptr undef, align 8
|
|
%tmp16 = invoke i32 %tmp15(ptr nonnull undef)
|
|
to label %bb26 unwind label %bb23
|
|
|
|
bb17:
|
|
%tmp18 = landingpad { ptr, i32 }
|
|
catch ptr @global.1
|
|
catch ptr null
|
|
unreachable
|
|
|
|
bb19:
|
|
%tmp20 = landingpad { ptr, i32 }
|
|
catch ptr @global.1
|
|
catch ptr null
|
|
unreachable
|
|
|
|
bb21:
|
|
%tmp22 = landingpad { ptr, i32 }
|
|
catch ptr @global.1
|
|
catch ptr null
|
|
unreachable
|
|
|
|
bb23:
|
|
%tmp24 = phi ptr [ null, %bb26 ], [ null, %bb14 ], [ undef, %bb13 ]
|
|
%tmp25 = landingpad { ptr, i32 }
|
|
catch ptr @global.1
|
|
catch ptr null
|
|
br label %bb30
|
|
|
|
bb26:
|
|
%tmp27 = load ptr, ptr undef, align 8
|
|
%tmp28 = invoke i32 %tmp27(ptr nonnull undef)
|
|
to label %bb29 unwind label %bb23
|
|
|
|
bb29:
|
|
unreachable
|
|
|
|
bb30:
|
|
%tmp31 = icmp eq ptr %tmp24, null
|
|
br i1 %tmp31, label %bb32, label %bb29
|
|
|
|
bb32:
|
|
unreachable
|
|
}
|
|
|
|
declare void @bar()
|