xref: /llvm-project/llvm/test/Transforms/JumpThreading/pr63013.ll (revision 1379127481c3b26a6000d8d8f98e21fe7946e019)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2; RUN: opt -S -passes=jump-threading < %s | FileCheck %s
3
4; Make sure we don't crash while trying to calculate the object size of an
5; empty phi node.
6
7define void @test(i16 %arg) {
8; CHECK-LABEL: define void @test
9; CHECK-SAME: (i16 [[ARG:%.*]]) {
10; CHECK-NEXT:  start:
11; CHECK-NEXT:    br label [[BB8THREAD_PRE_SPLIT1:%.*]]
12; CHECK:       bb8thread-pre-split1:
13; CHECK-NEXT:    [[LOAD_PR_PR:%.*]] = load i16, ptr null, align 2
14; CHECK-NEXT:    br label [[BB8:%.*]]
15; CHECK:       bb8:
16; CHECK-NEXT:    [[LOAD_PR:%.*]] = phi i16 [ [[LOAD_PR_PR]], [[BB8THREAD_PRE_SPLIT1]] ], [ [[LOAD_PR]], [[BB8]] ]
17; CHECK-NEXT:    [[I:%.*]] = icmp eq i16 [[LOAD_PR]], 0
18; CHECK-NEXT:    br i1 [[I]], label [[BB10:%.*]], label [[BB8]]
19; CHECK:       bb10:
20; CHECK-NEXT:    [[I1:%.*]] = getelementptr { i128, i8 }, ptr null, i64 0, i32 1
21; CHECK-NEXT:    store i8 0, ptr [[I1]], align 8
22; CHECK-NEXT:    [[I2:%.*]] = load i128, ptr null, align 8
23; CHECK-NEXT:    [[I3:%.*]] = icmp eq i128 [[I2]], 0
24; CHECK-NEXT:    br i1 [[I3]], label [[BB8THREAD_PRE_SPLIT1]], label [[BB8THREAD_PRE_SPLIT1]]
25;
26start:
27  br label %bb5
28
29bb20:                                             ; preds = %bb19, %bb17, %bb17, %bb14, %bb13
30  ret void
31
32bb5:                                              ; preds = %bb16, %bb10, %bb10, %bb8, %start
33  %_11.0 = phi ptr [ %_11.5, %bb16 ], [ null, %bb10 ], [ null, %bb8 ], [ null, %bb10 ], [ null, %start ]
34  br label %bb8
35
36bb8:                                              ; preds = %bb15, %bb9, %bb5
37  %load = load i16, ptr null, align 2
38  %i = icmp eq i16 %load, 0
39  br i1 %i, label %bb9, label %bb5
40
41bb9:                                              ; preds = %bb8
42  switch i16 %load, label %bb8 [
43  i16 1, label %bb10
44  i16 0, label %bb13
45  ]
46
47bb10:                                             ; preds = %bb14, %bb13, %bb9
48  %_2.7 = phi ptr [ %_11.0, %bb14 ], [ %_11.0, %bb13 ], [ null, %bb9 ]
49  %i1 = getelementptr { i128, i8 }, ptr %_11.0, i64 0, i32 1
50  store i8 0, ptr %i1, align 8
51  %i2 = load i128, ptr %_2.7, align 8
52  %i3 = icmp eq i128 %i2, 0
53  br i1 %i3, label %bb5, label %bb5
54
55bb13:                                             ; preds = %bb14, %bb9
56  switch i128 0, label %bb20 [
57  i128 0, label %bb10
58  i128 1, label %bb14
59  ]
60
61bb14:                                             ; preds = %bb19, %bb13
62  switch i16 %arg, label %bb20 [
63  i16 0, label %bb13
64  i16 2, label %bb10
65  i16 1, label %bb15
66  ]
67
68bb15:                                             ; preds = %bb14
69  switch i16 %arg, label %bb16 [
70  i16 1, label %bb8
71  i16 0, label %bb17
72  ]
73
74bb16:                                             ; preds = %bb19, %bb15
75  %_11.5 = phi ptr [ null, %bb15 ], [ null, %bb19 ]
76  br label %bb5
77
78bb17:                                             ; preds = %bb19, %bb15
79  switch i16 %arg, label %bb20 [
80  i16 0, label %bb20
81  i16 1, label %bb19
82  ]
83
84bb19:                                             ; preds = %bb17
85  switch i16 %arg, label %bb16 [
86  i16 0, label %bb14
87  i16 1, label %bb20
88  i16 6570, label %bb17
89  ]
90}
91