1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
12; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
23
34define void @ifconvertstore (i32* %A , i32 %B , i32 %C , i32 %D ) {
45; CHECK-LABEL: @ifconvertstore(
5- ; CHECK: store i32 %B, i32* %A
6- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 %D, 42
7- ; CHECK-NEXT: [[C_B:%.*]] = select i1 [[CMP]], i32 %C, i32 %B, !prof !0
8- ; CHECK-NEXT: store i32 [[C_B]], i32* %A
6+ ; CHECK-NEXT: entry:
7+ ; CHECK-NEXT: store i32 [[B:%.*]], i32* [[A:%.*]], align 4
8+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[D:%.*]], 42
9+ ; CHECK-NEXT: [[SPEC_STORE_SELECT:%.*]] = select i1 [[CMP]], i32 [[C:%.*]], i32 [[B]], !prof [[PROF0:![0-9]+]]
10+ ; CHECK-NEXT: store i32 [[SPEC_STORE_SELECT]], i32* [[A]], align 4
911; CHECK-NEXT: ret void
1012;
1113entry:
@@ -28,7 +30,15 @@ ret.end:
2830
2931define void @noifconvertstore1 (i32* %A1 , i32* %A2 , i32 %B , i32 %C , i32 %D ) {
3032; CHECK-LABEL: @noifconvertstore1(
31- ; CHECK-NOT: select
33+ ; CHECK-NEXT: entry:
34+ ; CHECK-NEXT: store i32 [[B:%.*]], i32* [[A1:%.*]], align 4
35+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[D:%.*]], 42
36+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[RET_END:%.*]]
37+ ; CHECK: if.then:
38+ ; CHECK-NEXT: store i32 [[C:%.*]], i32* [[A2:%.*]], align 4
39+ ; CHECK-NEXT: br label [[RET_END]]
40+ ; CHECK: ret.end:
41+ ; CHECK-NEXT: ret void
3242;
3343entry:
3444 store i32 %B , i32* %A1
@@ -48,7 +58,16 @@ declare void @unknown_fun()
4858
4959define void @noifconvertstore2 (i32* %A , i32 %B , i32 %C , i32 %D ) {
5060; CHECK-LABEL: @noifconvertstore2(
51- ; CHECK-NOT: select
61+ ; CHECK-NEXT: entry:
62+ ; CHECK-NEXT: store i32 [[B:%.*]], i32* [[A:%.*]], align 4
63+ ; CHECK-NEXT: call void @unknown_fun()
64+ ; CHECK-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[D:%.*]], 42
65+ ; CHECK-NEXT: br i1 [[CMP6]], label [[IF_THEN:%.*]], label [[RET_END:%.*]]
66+ ; CHECK: if.then:
67+ ; CHECK-NEXT: store i32 [[C:%.*]], i32* [[A]], align 4
68+ ; CHECK-NEXT: br label [[RET_END]]
69+ ; CHECK: ret.end:
70+ ; CHECK-NEXT: ret void
5271;
5372entry:
5473; First store to the location.
@@ -69,7 +88,15 @@ ret.end:
6988
7089define void @noifconvertstore_volatile (i32* %A , i32 %B , i32 %C , i32 %D ) {
7190; CHECK-LABEL: @noifconvertstore_volatile(
72- ; CHECK-NOT: select
91+ ; CHECK-NEXT: entry:
92+ ; CHECK-NEXT: store i32 [[B:%.*]], i32* [[A:%.*]], align 4
93+ ; CHECK-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[D:%.*]], 42
94+ ; CHECK-NEXT: br i1 [[CMP6]], label [[IF_THEN:%.*]], label [[RET_END:%.*]]
95+ ; CHECK: if.then:
96+ ; CHECK-NEXT: store volatile i32 [[C:%.*]], i32* [[A]], align 4
97+ ; CHECK-NEXT: br label [[RET_END]]
98+ ; CHECK: ret.end:
99+ ; CHECK-NEXT: ret void
73100;
74101entry:
75102; First store to the location.
0 commit comments