@@ -88,12 +88,18 @@ define i32 @dead_block_test_branch_loop(i32 %end) {
88
88
; CHECK-NEXT: preheader:
89
89
; CHECK-NEXT: br label [[HEADER:%.*]]
90
90
; CHECK: header:
91
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
92
- ; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
91
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
92
+ ; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[DEAD:%.*]]
93
+ ; CHECK: dead:
94
+ ; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
95
+ ; CHECK-NEXT: br label [[BACKEDGE]]
96
+ ; CHECK: backedge:
97
+ ; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
98
+ ; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
93
99
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
94
100
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
95
101
; CHECK: exit:
96
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER ]] ]
102
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
97
103
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
98
104
;
99
105
preheader:
@@ -123,12 +129,22 @@ define i32 @dead_block_test_switch_loop(i32 %end) {
123
129
; CHECK-NEXT: preheader:
124
130
; CHECK-NEXT: br label [[HEADER:%.*]]
125
131
; CHECK: header:
126
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
127
- ; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
132
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
133
+ ; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
134
+ ; CHECK-NEXT: i32 0, label [[DEAD]]
135
+ ; CHECK-NEXT: i32 1, label [[BACKEDGE]]
136
+ ; CHECK-NEXT: i32 2, label [[DEAD]]
137
+ ; CHECK-NEXT: ]
138
+ ; CHECK: dead:
139
+ ; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
140
+ ; CHECK-NEXT: br label [[BACKEDGE]]
141
+ ; CHECK: backedge:
142
+ ; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
143
+ ; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
128
144
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
129
145
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
130
146
; CHECK: exit:
131
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER ]] ]
147
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
132
148
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
133
149
;
134
150
preheader:
@@ -159,12 +175,18 @@ define i32 @dead_block_propogate_test_branch_loop(i32 %end) {
159
175
; CHECK-NEXT: preheader:
160
176
; CHECK-NEXT: br label [[HEADER:%.*]]
161
177
; CHECK: header:
162
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
163
- ; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
178
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
179
+ ; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[DEAD:%.*]]
180
+ ; CHECK: dead:
181
+ ; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
182
+ ; CHECK-NEXT: br label [[BACKEDGE]]
183
+ ; CHECK: backedge:
184
+ ; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
185
+ ; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
164
186
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
165
187
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
166
188
; CHECK: exit:
167
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER ]] ]
189
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
168
190
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
169
191
;
170
192
preheader:
@@ -197,12 +219,22 @@ define i32 @dead_block_propogate_test_switch_loop(i32 %end) {
197
219
; CHECK-NEXT: preheader:
198
220
; CHECK-NEXT: br label [[HEADER:%.*]]
199
221
; CHECK: header:
200
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
201
- ; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
222
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
223
+ ; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
224
+ ; CHECK-NEXT: i32 0, label [[DEAD]]
225
+ ; CHECK-NEXT: i32 1, label [[BACKEDGE]]
226
+ ; CHECK-NEXT: i32 2, label [[DEAD]]
227
+ ; CHECK-NEXT: ]
228
+ ; CHECK: dead:
229
+ ; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
230
+ ; CHECK-NEXT: br label [[BACKEDGE]]
231
+ ; CHECK: backedge:
232
+ ; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
233
+ ; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
202
234
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
203
235
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
204
236
; CHECK: exit:
205
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER ]] ]
237
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
206
238
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
207
239
;
208
240
preheader:
@@ -431,19 +463,32 @@ define i32 @dead_sub_loop_test_branch_loop(i32 %end) {
431
463
; CHECK-NEXT: preheader:
432
464
; CHECK-NEXT: br label [[HEADER:%.*]]
433
465
; CHECK: header:
434
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[EXIT_A:%.*]] ]
466
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
467
+ ; CHECK-NEXT: br i1 true, label [[LIVE_PREHEADER:%.*]], label [[DEAD_PREHEADER:%.*]]
468
+ ; CHECK: live_preheader:
435
469
; CHECK-NEXT: br label [[LIVE_LOOP:%.*]]
436
470
; CHECK: live_loop:
437
- ; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[HEADER ]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
471
+ ; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[LIVE_PREHEADER ]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
438
472
; CHECK-NEXT: [[A_INC]] = add i32 [[A]], 1
439
473
; CHECK-NEXT: [[CMP_A:%.*]] = icmp slt i32 [[A_INC]], [[END:%.*]]
440
- ; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A]]
474
+ ; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A:%.* ]]
441
475
; CHECK: exit.a:
476
+ ; CHECK-NEXT: br label [[BACKEDGE]]
477
+ ; CHECK: dead_preheader:
478
+ ; CHECK-NEXT: br label [[DEAD_LOOP:%.*]]
479
+ ; CHECK: dead_loop:
480
+ ; CHECK-NEXT: [[B:%.*]] = phi i32 [ 0, [[DEAD_PREHEADER]] ], [ [[B_INC:%.*]], [[DEAD_LOOP]] ]
481
+ ; CHECK-NEXT: [[B_INC]] = add i32 [[B]], 1
482
+ ; CHECK-NEXT: [[CMP_B:%.*]] = icmp slt i32 [[B_INC]], [[END]]
483
+ ; CHECK-NEXT: br i1 [[CMP_B]], label [[DEAD_LOOP]], label [[EXIT_B:%.*]]
484
+ ; CHECK: exit.b:
485
+ ; CHECK-NEXT: br label [[BACKEDGE]]
486
+ ; CHECK: backedge:
442
487
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
443
488
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END]]
444
489
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
445
490
; CHECK: exit:
446
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[EXIT_A ]] ]
491
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
447
492
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
448
493
;
449
494
preheader:
@@ -491,19 +536,36 @@ define i32 @dead_sub_loop_test_switch_loop(i32 %end) {
491
536
; CHECK-NEXT: preheader:
492
537
; CHECK-NEXT: br label [[HEADER:%.*]]
493
538
; CHECK: header:
494
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[EXIT_A:%.*]] ]
539
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
540
+ ; CHECK-NEXT: switch i32 1, label [[DEAD_PREHEADER:%.*]] [
541
+ ; CHECK-NEXT: i32 0, label [[DEAD_PREHEADER]]
542
+ ; CHECK-NEXT: i32 1, label [[LIVE_PREHEADER:%.*]]
543
+ ; CHECK-NEXT: i32 2, label [[DEAD_PREHEADER]]
544
+ ; CHECK-NEXT: ]
545
+ ; CHECK: live_preheader:
495
546
; CHECK-NEXT: br label [[LIVE_LOOP:%.*]]
496
547
; CHECK: live_loop:
497
- ; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[HEADER ]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
548
+ ; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[LIVE_PREHEADER ]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
498
549
; CHECK-NEXT: [[A_INC]] = add i32 [[A]], 1
499
550
; CHECK-NEXT: [[CMP_A:%.*]] = icmp slt i32 [[A_INC]], [[END:%.*]]
500
- ; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A]]
551
+ ; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A:%.* ]]
501
552
; CHECK: exit.a:
553
+ ; CHECK-NEXT: br label [[BACKEDGE]]
554
+ ; CHECK: dead_preheader:
555
+ ; CHECK-NEXT: br label [[DEAD_LOOP:%.*]]
556
+ ; CHECK: dead_loop:
557
+ ; CHECK-NEXT: [[B:%.*]] = phi i32 [ 0, [[DEAD_PREHEADER]] ], [ [[B_INC:%.*]], [[DEAD_LOOP]] ]
558
+ ; CHECK-NEXT: [[B_INC]] = add i32 [[B]], 1
559
+ ; CHECK-NEXT: [[CMP_B:%.*]] = icmp slt i32 [[B_INC]], [[END]]
560
+ ; CHECK-NEXT: br i1 [[CMP_B]], label [[DEAD_LOOP]], label [[EXIT_B:%.*]]
561
+ ; CHECK: exit.b:
562
+ ; CHECK-NEXT: br label [[BACKEDGE]]
563
+ ; CHECK: backedge:
502
564
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
503
565
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END]]
504
566
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
505
567
; CHECK: exit:
506
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[EXIT_A ]] ]
568
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
507
569
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
508
570
;
509
571
preheader:
@@ -836,12 +898,18 @@ define i32 @partial_sub_loop_test_branch_loop(i32 %end) {
836
898
; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
837
899
; CHECK-NEXT: br label [[HEADER:%.*]]
838
900
; CHECK: header:
839
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[HEADER]] ]
840
- ; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
901
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
902
+ ; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[DEAD:%.*]]
903
+ ; CHECK: dead:
904
+ ; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
905
+ ; CHECK-NEXT: br label [[BACKEDGE]]
906
+ ; CHECK: backedge:
907
+ ; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
908
+ ; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
841
909
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
842
910
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[OUTER_BACKEDGE]]
843
911
; CHECK: outer_backedge:
844
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER ]] ]
912
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
845
913
; CHECK-NEXT: [[J_INC]] = add i32 [[J]], 1
846
914
; CHECK-NEXT: [[CMP_J:%.*]] = icmp slt i32 [[J_INC]], [[END]]
847
915
; CHECK-NEXT: br i1 [[CMP_J]], label [[OUTER_HEADER]], label [[EXIT:%.*]]
@@ -890,12 +958,22 @@ define i32 @partial_sub_loop_test_switch_loop(i32 %end) {
890
958
; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
891
959
; CHECK-NEXT: br label [[HEADER:%.*]]
892
960
; CHECK: header:
893
- ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[HEADER]] ]
894
- ; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
961
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
962
+ ; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
963
+ ; CHECK-NEXT: i32 0, label [[DEAD]]
964
+ ; CHECK-NEXT: i32 1, label [[BACKEDGE]]
965
+ ; CHECK-NEXT: i32 2, label [[DEAD]]
966
+ ; CHECK-NEXT: ]
967
+ ; CHECK: dead:
968
+ ; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
969
+ ; CHECK-NEXT: br label [[BACKEDGE]]
970
+ ; CHECK: backedge:
971
+ ; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
972
+ ; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
895
973
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
896
974
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[OUTER_BACKEDGE]]
897
975
; CHECK: outer_backedge:
898
- ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER ]] ]
976
+ ; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE ]] ]
899
977
; CHECK-NEXT: [[J_INC]] = add i32 [[J]], 1
900
978
; CHECK-NEXT: [[CMP_J:%.*]] = icmp slt i32 [[J_INC]], [[END]]
901
979
; CHECK-NEXT: br i1 [[CMP_J]], label [[OUTER_HEADER]], label [[EXIT:%.*]]
0 commit comments