1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
22; REQUIRES: asserts
33; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes=loop-simplifycfg -verify-loop-info -verify-dom-info -verify-loop-lcssa < %s | FileCheck %s
44; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes='require<domtree>,loop(loop-simplifycfg)' -verify-loop-info -verify-dom-info -verify-loop-lcssa < %s | FileCheck %s
@@ -59,7 +59,7 @@ define i32 @dead_backedge_test_switch_loop(i32 %end) {
5959; CHECK: dead_backedge:
6060; CHECK-NEXT: [[I_2]] = add i32 [[I_1]], 10
6161; CHECK-NEXT: switch i32 1, label [[EXIT:%.*]] [
62- ; CHECK-NEXT: i32 0, label [[HEADER_BACKEDGE]]
62+ ; CHECK-NEXT: i32 0, label [[HEADER_BACKEDGE]]
6363; CHECK-NEXT: ]
6464; CHECK: exit:
6565; CHECK-NEXT: [[I_2_LCSSA:%.*]] = phi i32 [ [[I_2]], [[DEAD_BACKEDGE]] ]
@@ -233,12 +233,12 @@ exit:
233233
234234; Check that we preserve static reachibility of a dead exit block while deleting
235235; a branch.
236- define i32 @dead_exit_test_branch_loop (i32 %end ) {
236+ define i32 @dead_exit_test_branch_loop (i32 %end ) !prof !{! "function_entry_count" , i32 10 } {
237237; CHECK-LABEL: @dead_exit_test_branch_loop(
238238; CHECK-NEXT: preheader:
239239; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
240- ; CHECK-NEXT: i32 1, label [[DEAD:%.*]]
241- ; CHECK-NEXT: ]
240+ ; CHECK-NEXT: i32 1, label [[DEAD:%.*]]
241+ ; CHECK-NEXT: ], !prof [[PROF1:![0-9]+]]
242242; CHECK: preheader.split:
243243; CHECK-NEXT: br label [[HEADER:%.*]]
244244; CHECK: header:
@@ -262,7 +262,7 @@ preheader:
262262
263263header:
264264 %i = phi i32 [0 , %preheader ], [%i.inc , %backedge ]
265- br i1 true , label %backedge , label %dead
265+ br i1 true , label %backedge , label %dead , !prof !{! "branch_weights" , i32 10 , i32 1 }
266266
267267dead:
268268 br label %dummy
@@ -286,7 +286,7 @@ define i32 @dead_exit_test_switch_loop(i32 %end) {
286286; CHECK-LABEL: @dead_exit_test_switch_loop(
287287; CHECK-NEXT: preheader:
288288; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
289- ; CHECK-NEXT: i32 1, label [[DEAD:%.*]]
289+ ; CHECK-NEXT: i32 1, label [[DEAD:%.*]]
290290; CHECK-NEXT: ]
291291; CHECK: preheader.split:
292292; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -383,9 +383,9 @@ define i32 @dead_loop_test_switch_loop(i32 %end) {
383383; CHECK: header:
384384; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
385385; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
386- ; CHECK-NEXT: i32 0, label [[DEAD]]
387- ; CHECK-NEXT: i32 1, label [[BACKEDGE]]
388- ; CHECK-NEXT: i32 2, label [[DEAD]]
386+ ; CHECK-NEXT: i32 0, label [[DEAD]]
387+ ; CHECK-NEXT: i32 1, label [[BACKEDGE]]
388+ ; CHECK-NEXT: i32 2, label [[DEAD]]
389389; CHECK-NEXT: ]
390390; CHECK: dead:
391391; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
@@ -552,7 +552,7 @@ define i32 @inf_loop_test_branch_loop(i32 %end) {
552552; CHECK-LABEL: @inf_loop_test_branch_loop(
553553; CHECK-NEXT: preheader:
554554; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
555- ; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
555+ ; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
556556; CHECK-NEXT: ]
557557; CHECK: preheader.split:
558558; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -592,7 +592,7 @@ define i32 @inf_loop_test_switch_loop(i32 %end) {
592592; CHECK-LABEL: @inf_loop_test_switch_loop(
593593; CHECK-NEXT: preheader:
594594; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
595- ; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
595+ ; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
596596; CHECK-NEXT: ]
597597; CHECK: preheader.split:
598598; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -1001,7 +1001,7 @@ define i32 @full_sub_loop_test_switch_loop(i32 %end) {
10011001; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
10021002; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[I]], [[I]]
10031003; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
1004- ; CHECK-NEXT: i32 0, label [[BACKEDGE]]
1004+ ; CHECK-NEXT: i32 0, label [[BACKEDGE]]
10051005; CHECK-NEXT: ]
10061006; CHECK: dead:
10071007; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
@@ -1010,7 +1010,7 @@ define i32 @full_sub_loop_test_switch_loop(i32 %end) {
10101010; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
10111011; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
10121012; CHECK-NEXT: switch i32 1, label [[OUTER_BACKEDGE]] [
1013- ; CHECK-NEXT: i32 0, label [[HEADER]]
1013+ ; CHECK-NEXT: i32 0, label [[HEADER]]
10141014; CHECK-NEXT: ]
10151015; CHECK: outer_backedge:
10161016; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
@@ -1132,7 +1132,7 @@ define i32 @full_sub_loop_test_switch_loop_inverse_1(i32 %end) {
11321132; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
11331133; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[I]], [[I]]
11341134; CHECK-NEXT: switch i32 1, label [[BACKEDGE]] [
1135- ; CHECK-NEXT: i32 0, label [[DEAD:%.*]]
1135+ ; CHECK-NEXT: i32 0, label [[DEAD:%.*]]
11361136; CHECK-NEXT: ]
11371137; CHECK: dead:
11381138; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
@@ -1141,7 +1141,7 @@ define i32 @full_sub_loop_test_switch_loop_inverse_1(i32 %end) {
11411141; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
11421142; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
11431143; CHECK-NEXT: switch i32 1, label [[OUTER_BACKEDGE]] [
1144- ; CHECK-NEXT: i32 0, label [[HEADER]]
1144+ ; CHECK-NEXT: i32 0, label [[HEADER]]
11451145; CHECK-NEXT: ]
11461146; CHECK: outer_backedge:
11471147; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
@@ -1195,7 +1195,7 @@ define i32 @full_sub_loop_test_branch_loop_inverse_2(i32 %end) {
11951195; CHECK: outer_header:
11961196; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
11971197; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
1198- ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
1198+ ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
11991199; CHECK-NEXT: ]
12001200; CHECK: preheader.split:
12011201; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -1256,7 +1256,7 @@ define i32 @full_sub_loop_test_switch_loop_inverse_2(i32 %end) {
12561256; CHECK: outer_header:
12571257; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
12581258; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
1259- ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
1259+ ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
12601260; CHECK-NEXT: ]
12611261; CHECK: preheader.split:
12621262; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -1318,7 +1318,7 @@ define i32 @full_sub_loop_test_branch_loop_inverse_3(i32 %end) {
13181318; CHECK: outer_header:
13191319; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
13201320; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
1321- ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
1321+ ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
13221322; CHECK-NEXT: ]
13231323; CHECK: preheader.split:
13241324; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -1378,7 +1378,7 @@ define i32 @full_sub_loop_test_switch_loop_inverse_3(i32 %end) {
13781378; CHECK: outer_header:
13791379; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
13801380; CHECK-NEXT: switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
1381- ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
1381+ ; CHECK-NEXT: i32 1, label [[OUTER_BACKEDGE]]
13821382; CHECK-NEXT: ]
13831383; CHECK: preheader.split:
13841384; CHECK-NEXT: br label [[HEADER:%.*]]
@@ -1441,7 +1441,7 @@ define i32 @exit_branch_from_inner_to_grandparent(i1 %cond1, i1 %cond2, i32 %N)
14411441; CHECK: loop_2:
14421442; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[LOOP_1]] ], [ [[J_NEXT:%.*]], [[LOOP_2_BACKEDGE:%.*]] ]
14431443; CHECK-NEXT: switch i32 0, label [[LOOP_2_SPLIT:%.*]] [
1444- ; CHECK-NEXT: i32 1, label [[LOOP_2_BACKEDGE]]
1444+ ; CHECK-NEXT: i32 1, label [[LOOP_2_BACKEDGE]]
14451445; CHECK-NEXT: ]
14461446; CHECK: loop_2.split:
14471447; CHECK-NEXT: br label [[LOOP_3:%.*]]
@@ -1510,7 +1510,7 @@ define i32 @exit_switch_from_inner_to_grandparent(i1 %cond1, i1 %cond2, i32 %N)
15101510; CHECK: loop_2:
15111511; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[LOOP_1]] ], [ [[J_NEXT:%.*]], [[LOOP_2_BACKEDGE:%.*]] ]
15121512; CHECK-NEXT: switch i32 0, label [[LOOP_2_SPLIT:%.*]] [
1513- ; CHECK-NEXT: i32 1, label [[LOOP_2_BACKEDGE]]
1513+ ; CHECK-NEXT: i32 1, label [[LOOP_2_BACKEDGE]]
15141514; CHECK-NEXT: ]
15151515; CHECK: loop_2.split:
15161516; CHECK-NEXT: br label [[LOOP_3:%.*]]
@@ -1654,7 +1654,7 @@ define i32 @intermediate_switch_from_inner_to_grandparent(i1 %cond1, i1 %cond2,
16541654; CHECK-NEXT: br i1 [[COND1:%.*]], label [[LOOP_3_BACKEDGE]], label [[INTERMEDIATE:%.*]]
16551655; CHECK: intermediate:
16561656; CHECK-NEXT: switch i32 1, label [[LOOP_1_BACKEDGE_LOOPEXIT:%.*]] [
1657- ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
1657+ ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
16581658; CHECK-NEXT: ]
16591659; CHECK: loop_3_backedge:
16601660; CHECK-NEXT: [[K_NEXT]] = add i32 [[K]], 1
@@ -1792,7 +1792,7 @@ define i32 @intermediate_switch_from_inner_to_parent(i1 %cond1, i1 %cond2, i32 %
17921792; CHECK-NEXT: br i1 [[COND1:%.*]], label [[LOOP_3_BACKEDGE]], label [[INTERMEDIATE:%.*]]
17931793; CHECK: intermediate:
17941794; CHECK-NEXT: switch i32 1, label [[LOOP_2_BACKEDGE]] [
1795- ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
1795+ ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
17961796; CHECK-NEXT: ]
17971797; CHECK: loop_3_backedge:
17981798; CHECK-NEXT: [[K_NEXT]] = add i32 [[K]], 1
@@ -1944,7 +1944,7 @@ define i32 @intermediate_subloop_switch_from_inner_to_grandparent(i1 %cond1, i1
19441944; CHECK-NEXT: br i1 [[COND3:%.*]], label [[INTERMEDIATE_LOOP]], label [[INTERMEDIATE_EXIT:%.*]]
19451945; CHECK: intermediate_exit:
19461946; CHECK-NEXT: switch i32 1, label [[LOOP_1_BACKEDGE_LOOPEXIT:%.*]] [
1947- ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
1947+ ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
19481948; CHECK-NEXT: ]
19491949; CHECK: loop_3_backedge:
19501950; CHECK-NEXT: [[K_NEXT]] = add i32 [[K]], 1
@@ -2102,7 +2102,7 @@ define i32 @intermediate_subloop_switch_from_inner_to_parent(i1 %cond1, i1 %cond
21022102; CHECK-NEXT: br i1 [[COND3:%.*]], label [[INTERMEDIATE_LOOP]], label [[INTERMEDIATE_EXIT:%.*]]
21032103; CHECK: intermediate_exit:
21042104; CHECK-NEXT: switch i32 1, label [[LOOP_2_BACKEDGE]] [
2105- ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
2105+ ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
21062106; CHECK-NEXT: ]
21072107; CHECK: loop_3_backedge:
21082108; CHECK-NEXT: [[K_NEXT]] = add i32 [[K]], 1
@@ -2267,7 +2267,7 @@ define i32 @intermediate_complex_subloop_switch_from_inner_to_parent(i1 %cond1,
22672267; CHECK-NEXT: br i1 [[COND2:%.*]], label [[INTERMEDIATE_LOOP_BACKEDGE]], label [[INTERMEDIATE_EXIT:%.*]]
22682268; CHECK: intermediate_exit:
22692269; CHECK-NEXT: switch i32 1, label [[LOOP_2_BACKEDGE]] [
2270- ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
2270+ ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
22712271; CHECK-NEXT: ]
22722272; CHECK: loop_3_backedge:
22732273; CHECK-NEXT: [[K_NEXT]] = add i32 [[K]], 1
@@ -2440,7 +2440,7 @@ define i32 @intermediate_complex_subloop_switch_from_inner_to_grandparent(i1 %co
24402440; CHECK-NEXT: br i1 [[COND2:%.*]], label [[INTERMEDIATE_LOOP_BACKEDGE]], label [[INTERMEDIATE_EXIT:%.*]]
24412441; CHECK: intermediate_exit:
24422442; CHECK-NEXT: switch i32 1, label [[LOOP_1_BACKEDGE_LOOPEXIT:%.*]] [
2443- ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
2443+ ; CHECK-NEXT: i32 0, label [[LOOP_3_BACKEDGE]]
24442444; CHECK-NEXT: ]
24452445; CHECK: loop_3_backedge:
24462446; CHECK-NEXT: [[K_NEXT]] = add i32 [[K]], 1
@@ -2585,38 +2585,38 @@ define void @test_crash_01(i1 %arg, i32 %arg2) {
25852585; CHECK-NEXT: bb:
25862586; CHECK-NEXT: br label [[BB1:%.*]]
25872587; CHECK: bb1:
2588- ; CHECK-NEXT: br i1 %arg , label [[BB17:%.*]], label [[BB2:%.*]]
2588+ ; CHECK-NEXT: br i1 [[ARG:%.*]] , label [[BB17:%.*]], label [[BB2:%.*]]
25892589; CHECK: bb2:
25902590; CHECK-NEXT: switch i32 0, label [[BB2_SPLIT:%.*]] [
2591- ; CHECK-NEXT: i32 1, label [[BB19:%.*]]
2591+ ; CHECK-NEXT: i32 1, label [[BB19:%.*]]
25922592; CHECK-NEXT: ]
25932593; CHECK: bb2.split:
25942594; CHECK-NEXT: br label [[BB3:%.*]]
25952595; CHECK: bb3:
2596- ; CHECK-NEXT: switch i32 %arg2 , label [[BB16:%.*]] [
2597- ; CHECK-NEXT: i32 0, label [[BB15:%.*]]
2598- ; CHECK-NEXT: i32 1, label [[BB14:%.*]]
2599- ; CHECK-NEXT: i32 2, label [[BB13:%.*]]
2600- ; CHECK-NEXT: i32 3, label [[BB12:%.*]]
2601- ; CHECK-NEXT: i32 4, label [[BB11:%.*]]
2602- ; CHECK-NEXT: i32 5, label [[BB8:%.*]]
2603- ; CHECK-NEXT: i32 6, label [[BB10:%.*]]
2604- ; CHECK-NEXT: i32 7, label [[BB9:%.*]]
2605- ; CHECK-NEXT: i32 8, label [[BB7:%.*]]
2596+ ; CHECK-NEXT: switch i32 [[ARG2:%.*]] , label [[BB16:%.*]] [
2597+ ; CHECK-NEXT: i32 0, label [[BB15:%.*]]
2598+ ; CHECK-NEXT: i32 1, label [[BB14:%.*]]
2599+ ; CHECK-NEXT: i32 2, label [[BB13:%.*]]
2600+ ; CHECK-NEXT: i32 3, label [[BB12:%.*]]
2601+ ; CHECK-NEXT: i32 4, label [[BB11:%.*]]
2602+ ; CHECK-NEXT: i32 5, label [[BB8:%.*]]
2603+ ; CHECK-NEXT: i32 6, label [[BB10:%.*]]
2604+ ; CHECK-NEXT: i32 7, label [[BB9:%.*]]
2605+ ; CHECK-NEXT: i32 8, label [[BB7:%.*]]
26062606; CHECK-NEXT: ]
26072607; CHECK: bb7:
26082608; CHECK-NEXT: unreachable
26092609; CHECK: bb8:
2610- ; CHECK-NEXT: switch i32 %arg2 , label [[BB28:%.*]] [
2611- ; CHECK-NEXT: i32 0, label [[BB27:%.*]]
2612- ; CHECK-NEXT: i32 1, label [[BB26:%.*]]
2613- ; CHECK-NEXT: i32 2, label [[BB23:%.*]]
2614- ; CHECK-NEXT: i32 3, label [[BB24:%.*]]
2615- ; CHECK-NEXT: i32 4, label [[BB25:%.*]]
2616- ; CHECK-NEXT: i32 5, label [[BB29:%.*]]
2617- ; CHECK-NEXT: i32 6, label [[BB22:%.*]]
2618- ; CHECK-NEXT: i32 7, label [[BB20:%.*]]
2619- ; CHECK-NEXT: i32 8, label [[BB21:%.*]]
2610+ ; CHECK-NEXT: switch i32 [[ARG2]] , label [[BB28:%.*]] [
2611+ ; CHECK-NEXT: i32 0, label [[BB27:%.*]]
2612+ ; CHECK-NEXT: i32 1, label [[BB26:%.*]]
2613+ ; CHECK-NEXT: i32 2, label [[BB23:%.*]]
2614+ ; CHECK-NEXT: i32 3, label [[BB24:%.*]]
2615+ ; CHECK-NEXT: i32 4, label [[BB25:%.*]]
2616+ ; CHECK-NEXT: i32 5, label [[BB29:%.*]]
2617+ ; CHECK-NEXT: i32 6, label [[BB22:%.*]]
2618+ ; CHECK-NEXT: i32 7, label [[BB20:%.*]]
2619+ ; CHECK-NEXT: i32 8, label [[BB21:%.*]]
26202620; CHECK-NEXT: ]
26212621; CHECK: bb9:
26222622; CHECK-NEXT: unreachable
@@ -2772,3 +2772,7 @@ bb28: ; preds = %bb8
27722772bb29: ; preds = %bb8
27732773 br label %bb6
27742774}
2775+ ;.
2776+ ; CHECK: [[META0:![0-9]+]] = !{!"function_entry_count", i32 10}
2777+ ; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 0}
2778+ ;.
0 commit comments