@@ -30,9 +30,10 @@ define i64 @mul_select(i64 %a, i64 %b) {
30
30
; (select (icmp x, 0, eq), 0, (shl x, y)) -> (shl x, y)
31
31
define i64 @shl_select (i64 %a , i64 %b ) {
32
32
; CHECK-LABEL: @shl_select(
33
- ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
34
- ; CHECK-NEXT: [[SHL:%.*]] = shl i64 [[A:%.*]], [[B_FR]]
35
- ; CHECK-NEXT: ret i64 [[SHL]]
33
+ ; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[A:%.*]], 0
34
+ ; CHECK-NEXT: [[SHL:%.*]] = shl i64 [[A]], [[B_FR:%.*]]
35
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i64 0, i64 [[SHL]]
36
+ ; CHECK-NEXT: ret i64 [[SELECT]]
36
37
;
37
38
%cond = icmp eq i64 %a , 0
38
39
%shl = shl i64 %a , %b
@@ -56,9 +57,10 @@ define i64 @and_select(i64 %a, i64 %b) {
56
57
; (select (icmp x, 0, ne), (ashr x, y), 0) -> (ashr x, y)
57
58
define i64 @ashr_select (i64 %a , i64 %b ) {
58
59
; CHECK-LABEL: @ashr_select(
59
- ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
60
- ; CHECK-NEXT: [[ASHR:%.*]] = ashr i64 [[A:%.*]], [[B_FR]]
61
- ; CHECK-NEXT: ret i64 [[ASHR]]
60
+ ; CHECK-NEXT: [[COND_NOT:%.*]] = icmp eq i64 [[A:%.*]], 0
61
+ ; CHECK-NEXT: [[ASHR:%.*]] = ashr i64 [[A]], [[B_FR:%.*]]
62
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND_NOT]], i64 0, i64 [[ASHR]]
63
+ ; CHECK-NEXT: ret i64 [[SELECT]]
62
64
;
63
65
%cond = icmp ne i64 0 , %a
64
66
%ashr = ashr i64 %a , %b
@@ -69,9 +71,10 @@ define i64 @ashr_select(i64 %a, i64 %b) {
69
71
; (select (icmp x, 0, ne), (lshr x, y), 0) -> (lshr x, y)
70
72
define i64 @lshr_select (i64 %a , i64 %b ) {
71
73
; CHECK-LABEL: @lshr_select(
72
- ; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
73
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i64 [[A:%.*]], [[B_FR]]
74
- ; CHECK-NEXT: ret i64 [[LSHR]]
74
+ ; CHECK-NEXT: [[COND_NOT:%.*]] = icmp eq i64 [[A:%.*]], 0
75
+ ; CHECK-NEXT: [[LSHR:%.*]] = lshr i64 [[A]], [[B_FR:%.*]]
76
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND_NOT]], i64 0, i64 [[LSHR]]
77
+ ; CHECK-NEXT: ret i64 [[SELECT]]
75
78
;
76
79
%cond = icmp ne i64 0 , %a
77
80
%lshr = lshr i64 %a , %b
0 commit comments