11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2- ; RUN: opt < %s -passes=simplifycfg -S | FileCheck %s -check-prefix=SIMPLIFY-CFG
3- ; RUN: opt < %s -O3 -S | FileCheck %s -check-prefix=O3
2+ ; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S \
3+ ; RUN: | FileCheck %s -check-prefix=SIMPLIFY-CFG
44
55define i32 @switch_all_duplicate_arms (i32 %0 , i32 %1 , i32 %2 , i32 %3 ) {
66; SIMPLIFY-CFG-LABEL: define i32 @switch_all_duplicate_arms(
@@ -14,12 +14,6 @@ define i32 @switch_all_duplicate_arms(i32 %0, i32 %1, i32 %2, i32 %3) {
1414; SIMPLIFY-CFG: [[BB6]]:
1515; SIMPLIFY-CFG-NEXT: [[TMP8:%.*]] = phi i32 [ [[TMP3]], [[TMP4:%.*]] ], [ [[TMP2]], %[[BB5]] ]
1616; SIMPLIFY-CFG-NEXT: ret i32 [[TMP8]]
17- ;
18- ; O3-LABEL: define i32 @switch_all_duplicate_arms(
19- ; O3-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
20- ; O3-NEXT: [[SWITCH:%.*]] = icmp ult i32 [[TMP1]], 2
21- ; O3-NEXT: [[TMP8:%.*]] = select i1 [[SWITCH]], i32 [[TMP2]], i32 [[TMP3]]
22- ; O3-NEXT: ret i32 [[TMP8]]
2317;
2418 switch i32 %1 , label %7 [
2519 i32 0 , label %5
@@ -52,21 +46,6 @@ define i32 @switch_some_duplicate_arms(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4) {
5246; SIMPLIFY-CFG: [[BB8]]:
5347; SIMPLIFY-CFG-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP3]], [[TMP5:%.*]] ], [ [[TMP4]], %[[BB7]] ], [ [[TMP2]], %[[BB6]] ]
5448; SIMPLIFY-CFG-NEXT: ret i32 [[TMP10]]
55- ;
56- ; O3-LABEL: define i32 @switch_some_duplicate_arms(
57- ; O3-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]]) local_unnamed_addr #[[ATTR0]] {
58- ; O3-NEXT: switch i32 [[TMP1]], label %[[BB8:.*]] [
59- ; O3-NEXT: i32 0, label %[[BB6:.*]]
60- ; O3-NEXT: i32 1, label %[[BB6]]
61- ; O3-NEXT: i32 2, label %[[BB7:.*]]
62- ; O3-NEXT: ]
63- ; O3: [[BB6]]:
64- ; O3-NEXT: br label %[[BB8]]
65- ; O3: [[BB7]]:
66- ; O3-NEXT: br label %[[BB8]]
67- ; O3: [[BB8]]:
68- ; O3-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP3]], [[TMP5:%.*]] ], [ [[TMP4]], %[[BB7]] ], [ [[TMP2]], %[[BB6]] ]
69- ; O3-NEXT: ret i32 [[TMP10]]
7049;
7150 switch i32 %1 , label %9 [
7251 i32 0 , label %6
@@ -104,22 +83,6 @@ define i32 @switch_duplicate_arms_multipred(i1 %0, i32 %1, i32 %2, i32 %3, i32 %
10483; SIMPLIFY-CFG: [[BB9]]:
10584; SIMPLIFY-CFG-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP4]], %[[BB6]] ], [ [[TMP3]], %[[BB8]] ], [ [[TMP3]], %[[BB7]] ]
10685; SIMPLIFY-CFG-NEXT: ret i32 [[TMP10]]
107- ;
108- ; O3-LABEL: define i32 @switch_duplicate_arms_multipred(
109- ; O3-SAME: i1 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]]) local_unnamed_addr #[[ATTR0]] {
110- ; O3-NEXT: br i1 [[TMP0]], label %[[BB6:.*]], label %[[BB7:.*]]
111- ; O3: [[BB6]]:
112- ; O3-NEXT: switch i32 [[TMP2]], label %[[BB9:.*]] [
113- ; O3-NEXT: i32 0, label %[[BB7]]
114- ; O3-NEXT: i32 1, label %[[BB8:.*]]
115- ; O3-NEXT: ]
116- ; O3: [[BB7]]:
117- ; O3-NEXT: br label %[[BB9]]
118- ; O3: [[BB8]]:
119- ; O3-NEXT: br label %[[BB9]]
120- ; O3: [[BB9]]:
121- ; O3-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP4]], %[[BB6]] ], [ [[TMP3]], %[[BB8]] ], [ [[TMP3]], %[[BB7]] ]
122- ; O3-NEXT: ret i32 [[TMP10]]
12386;
12487 br i1 %0 , label %6 , label %7
125886 :
@@ -145,12 +108,6 @@ define i32 @switch_dup_default(i32 %0, i32 %1, i32 %2, i32 %3) {
145108; SIMPLIFY-CFG-NEXT: [[COND:%.*]] = icmp eq i32 [[TMP1]], 0
146109; SIMPLIFY-CFG-NEXT: [[TMP8:%.*]] = select i1 [[COND]], i32 [[TMP3]], i32 [[TMP2]]
147110; SIMPLIFY-CFG-NEXT: ret i32 [[TMP8]]
148- ;
149- ; O3-LABEL: define i32 @switch_dup_default(
150- ; O3-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR0]] {
151- ; O3-NEXT: [[COND:%.*]] = icmp eq i32 [[TMP1]], 0
152- ; O3-NEXT: [[TMP8:%.*]] = select i1 [[COND]], i32 [[TMP3]], i32 [[TMP2]]
153- ; O3-NEXT: ret i32 [[TMP8]]
154111;
155112 switch i32 %1 , label %7 [
156113 i32 0 , label %5
0 commit comments