44; (select (icmp x, 0, eq), 0, (umin x, y)) -> (umin x, y)
55define i64 @umin_select (i64 %a , i64 %b ) {
66; CHECK-LABEL: @umin_select(
7- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
8- ; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[A]], i64 [[B_FR:%.*]])
9- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[UMIN]]
10- ; CHECK-NEXT: ret i64 [[SELECT]]
7+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
8+ ; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[A:%.*]], i64 [[B_FR]])
9+ ; CHECK-NEXT: ret i64 [[UMIN]]
1110;
1211 %cond = icmp eq i64 %a , 0
1312 %umin = call i64 @llvm.umin.i64 (i64 %a , i64 %b )
@@ -31,10 +30,9 @@ define i64 @mul_select(i64 %a, i64 %b) {
3130; (select (icmp x, 0, eq), 0, (shl x, y)) -> (shl x, y)
3231define i64 @shl_select (i64 %a , i64 %b ) {
3332; CHECK-LABEL: @shl_select(
34- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
35- ; CHECK-NEXT: [[SHL:%.*]] = shl i64 [[A]], [[B_FR:%.*]]
36- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[SHL]]
37- ; CHECK-NEXT: ret i64 [[SELECT]]
33+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
34+ ; CHECK-NEXT: [[SHL:%.*]] = shl i64 [[A:%.*]], [[B_FR]]
35+ ; CHECK-NEXT: ret i64 [[SHL]]
3836;
3937 %cond = icmp eq i64 %a , 0
4038 %shl = shl i64 %a , %b
@@ -45,10 +43,9 @@ define i64 @shl_select(i64 %a, i64 %b) {
4543; (select (icmp x, 0, eq), 0, (and x, y)) -> (and x, y)
4644define i64 @and_select (i64 %a , i64 %b ) {
4745; CHECK-LABEL: @and_select(
48- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
49- ; CHECK-NEXT: [[AND:%.*]] = and i64 [[A]], [[B_FR:%.*]]
50- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[AND]]
51- ; CHECK-NEXT: ret i64 [[SELECT]]
46+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
47+ ; CHECK-NEXT: [[AND:%.*]] = and i64 [[A:%.*]], [[B_FR]]
48+ ; CHECK-NEXT: ret i64 [[AND]]
5249;
5350 %cond = icmp eq i64 %a , 0
5451 %and = and i64 %a , %b
@@ -59,10 +56,9 @@ define i64 @and_select(i64 %a, i64 %b) {
5956; (select (icmp x, 0, ne), (ashr x, y), 0) -> (ashr x, y)
6057define i64 @ashr_select (i64 %a , i64 %b ) {
6158; CHECK-LABEL: @ashr_select(
62- ; CHECK-NEXT: [[COND_NOT:%.*]] = icmp eq i64 [[A:%.*]], 0
63- ; CHECK-NEXT: [[ASHR:%.*]] = ashr i64 [[A]], [[B_FR:%.*]]
64- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND_NOT]], i64 0, i64 [[ASHR]]
65- ; CHECK-NEXT: ret i64 [[SELECT]]
59+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
60+ ; CHECK-NEXT: [[ASHR:%.*]] = ashr i64 [[A:%.*]], [[B_FR]]
61+ ; CHECK-NEXT: ret i64 [[ASHR]]
6662;
6763 %cond = icmp ne i64 0 , %a
6864 %ashr = ashr i64 %a , %b
@@ -73,10 +69,9 @@ define i64 @ashr_select(i64 %a, i64 %b) {
7369; (select (icmp x, 0, ne), (lshr x, y), 0) -> (lshr x, y)
7470define i64 @lshr_select (i64 %a , i64 %b ) {
7571; CHECK-LABEL: @lshr_select(
76- ; CHECK-NEXT: [[COND_NOT:%.*]] = icmp eq i64 [[A:%.*]], 0
77- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i64 [[A]], [[B_FR:%.*]]
78- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND_NOT]], i64 0, i64 [[LSHR]]
79- ; CHECK-NEXT: ret i64 [[SELECT]]
72+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
73+ ; CHECK-NEXT: [[LSHR:%.*]] = lshr i64 [[A:%.*]], [[B_FR]]
74+ ; CHECK-NEXT: ret i64 [[LSHR]]
8075;
8176 %cond = icmp ne i64 0 , %a
8277 %lshr = lshr i64 %a , %b
@@ -87,10 +82,9 @@ define i64 @lshr_select(i64 %a, i64 %b) {
8782; (select (icmp x, 0, eq), 0, fshr(x, x, y)) -> fshr(x, x, y)
8883define i64 @fshr_select (i64 %a , i64 %b ) {
8984; CHECK-LABEL: @fshr_select(
90- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
91- ; CHECK-NEXT: [[FSHR:%.*]] = call i64 @llvm.fshr.i64(i64 [[A]], i64 [[A]], i64 [[B_FR:%.*]])
92- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[FSHR]]
93- ; CHECK-NEXT: ret i64 [[SELECT]]
85+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
86+ ; CHECK-NEXT: [[FSHR:%.*]] = call i64 @llvm.fshr.i64(i64 [[A:%.*]], i64 [[A]], i64 [[B_FR]])
87+ ; CHECK-NEXT: ret i64 [[FSHR]]
9488;
9589 %cond = icmp eq i64 %a , 0
9690 %fshr = call i64 @llvm.fshr.i64 (i64 %a , i64 %a , i64 %b )
@@ -101,10 +95,9 @@ define i64 @fshr_select(i64 %a, i64 %b) {
10195; (select (icmp x, 0, eq), 0, (fshl x, x, y)) -> (fshl x, x, y)
10296define i64 @fshl_select (i64 %a , i64 %b ) {
10397; CHECK-LABEL: @fshl_select(
104- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
105- ; CHECK-NEXT: [[FSHL:%.*]] = call i64 @llvm.fshl.i64(i64 [[A]], i64 [[A]], i64 [[B_FR:%.*]])
106- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[FSHL]]
107- ; CHECK-NEXT: ret i64 [[SELECT]]
98+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
99+ ; CHECK-NEXT: [[FSHL:%.*]] = call i64 @llvm.fshl.i64(i64 [[A:%.*]], i64 [[A]], i64 [[B_FR]])
100+ ; CHECK-NEXT: ret i64 [[FSHL]]
108101;
109102 %cond = icmp eq i64 %a , 0
110103 %fshl = call i64 @llvm.fshl.i64 (i64 %a , i64 %a , i64 %b )
@@ -129,10 +122,9 @@ define i64 @fshr_select_no_combine(i64 %a, i64 %b, i64 %c) {
129122; (select (icmp x, 0, eq), 0, (sdiv x, y)) -> (sdiv x, y)
130123define i64 @sdiv_select (i64 %a , i64 %b ) {
131124; CHECK-LABEL: @sdiv_select(
132- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
133- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[A]], [[B_FR:%.*]]
134- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[DIV]]
135- ; CHECK-NEXT: ret i64 [[SELECT]]
125+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
126+ ; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 [[A:%.*]], [[B_FR]]
127+ ; CHECK-NEXT: ret i64 [[DIV]]
136128;
137129 %cond = icmp eq i64 %a , 0
138130 %div = sdiv i64 %a , %b
@@ -143,10 +135,9 @@ define i64 @sdiv_select(i64 %a, i64 %b) {
143135; (select (icmp x, 0, eq), 0, (udiv x, y)) -> (udiv x, y)
144136define i64 @udiv_select (i64 %a , i64 %b ) {
145137; CHECK-LABEL: @udiv_select(
146- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
147- ; CHECK-NEXT: [[DIV:%.*]] = udiv i64 [[A]], [[B_FR:%.*]]
148- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[DIV]]
149- ; CHECK-NEXT: ret i64 [[SELECT]]
138+ ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
139+ ; CHECK-NEXT: [[DIV:%.*]] = udiv i64 [[A:%.*]], [[B_FR]]
140+ ; CHECK-NEXT: ret i64 [[DIV]]
150141;
151142 %cond = icmp eq i64 %a , 0
152143 %div = udiv i64 %a , %b
0 commit comments