Skip to content

Commit 5704223

Browse files
committed
[LSCFG][profcheck] Add dummy branch weights for the dummy switch to dead exits
1 parent 23cbeab commit 5704223

File tree

2 files changed

+66
-50
lines changed

2 files changed

+66
-50
lines changed

llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "llvm/Analysis/ScalarEvolution.h"
2525
#include "llvm/IR/Dominators.h"
2626
#include "llvm/IR/IRBuilder.h"
27+
#include "llvm/IR/ProfDataUtils.h"
2728
#include "llvm/Support/CommandLine.h"
2829
#include "llvm/Transforms/Scalar.h"
2930
#include "llvm/Transforms/Scalar/LoopPassManager.h"
@@ -393,6 +394,17 @@ class ConstantTerminatorFoldingImpl {
393394
DTUpdates.push_back({DominatorTree::Insert, Preheader, BB});
394395
++NumLoopExitsDeleted;
395396
}
397+
// We don't really need to add branch weights to DummySwitch, because all
398+
// but one branches are just a temporary artifact - see the comment on top
399+
// of this function. But, it's easy to estimate the weights, and it helps
400+
// maintain a property of the overall compiler - that the branch weights
401+
// don't "just get dropped" accidentally (i.e. profcheck)
402+
if (DummySwitch->getParent()->getParent()->hasProfileData()) {
403+
SmallVector<uint32_t> DummyBranchWeights(1 + DummySwitch->getNumCases());
404+
// default. 100% probability, the rest are dead.
405+
DummyBranchWeights[0] = 1;
406+
setBranchWeights(*DummySwitch, DummyBranchWeights, /*IsExpected=*/false);
407+
}
396408

397409
assert(L.getLoopPreheader() == NewPreheader && "Malformed CFG?");
398410
if (Loop *OuterLoop = LI.getLoopFor(Preheader)) {

llvm/test/Transforms/LoopSimplifyCFG/constant-fold-branch.ll

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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

263263
header:
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

267267
dead:
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
27722772
bb29: ; 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

Comments
 (0)