Skip to content

Commit 968468a

Browse files
committed
[InstCombine] Tests for adding flags to shifts; NFC
Differential Revision: https://reviews.llvm.org/D157531
1 parent 444383e commit 968468a

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
define i8 @shl_add_nuw(i8 %amt_in, i8 %cnt_in) {
5+
; CHECK-LABEL: @shl_add_nuw(
6+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], 63
7+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
8+
; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]
9+
; CHECK-NEXT: ret i8 [[R]]
10+
;
11+
%amt = and i8 %amt_in, 63
12+
%cnt = and i8 %cnt_in, 2
13+
%r = shl i8 %amt, %cnt
14+
ret i8 %r
15+
}
16+
17+
define i8 @shl_add_nuw_fail(i8 %amt_in, i8 %cnt_in) {
18+
; CHECK-LABEL: @shl_add_nuw_fail(
19+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], 63
20+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 3
21+
; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]
22+
; CHECK-NEXT: ret i8 [[R]]
23+
;
24+
%amt = and i8 %amt_in, 63
25+
%cnt = and i8 %cnt_in, 3
26+
%r = shl i8 %amt, %cnt
27+
ret i8 %r
28+
}
29+
30+
define i8 @shl_add_nuw_and_nsw(i8 %amt_in, i8 %cnt_in) {
31+
; CHECK-LABEL: @shl_add_nuw_and_nsw(
32+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], 31
33+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
34+
; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]
35+
; CHECK-NEXT: ret i8 [[R]]
36+
;
37+
%amt = and i8 %amt_in, 31
38+
%cnt = and i8 %cnt_in, 2
39+
%r = shl i8 %amt, %cnt
40+
ret i8 %r
41+
}
42+
43+
define i8 @shl_add_nsw(i8 %amt_in, i8 %cnt_in) {
44+
; CHECK-LABEL: @shl_add_nsw(
45+
; CHECK-NEXT: [[AMT:%.*]] = or i8 [[AMT_IN:%.*]], -32
46+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
47+
; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]
48+
; CHECK-NEXT: ret i8 [[R]]
49+
;
50+
%amt = or i8 %amt_in, 224
51+
%cnt = and i8 %cnt_in, 2
52+
%r = shl i8 %amt, %cnt
53+
ret i8 %r
54+
}
55+
56+
define i8 @shl_add_nsw_fail(i8 %amt_in, i8 %cnt_in) {
57+
; CHECK-LABEL: @shl_add_nsw_fail(
58+
; CHECK-NEXT: [[AMT:%.*]] = or i8 [[AMT_IN:%.*]], -64
59+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
60+
; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]
61+
; CHECK-NEXT: ret i8 [[R]]
62+
;
63+
%amt = or i8 %amt_in, 192
64+
%cnt = and i8 %cnt_in, 2
65+
%r = shl i8 %amt, %cnt
66+
ret i8 %r
67+
}
68+
69+
define i8 @lshr_add_exact(i8 %amt_in, i8 %cnt_in) {
70+
; CHECK-LABEL: @lshr_add_exact(
71+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -4
72+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
73+
; CHECK-NEXT: [[R:%.*]] = lshr i8 [[AMT]], [[CNT]]
74+
; CHECK-NEXT: ret i8 [[R]]
75+
;
76+
%amt = and i8 %amt_in, -4
77+
%cnt = and i8 %cnt_in, 2
78+
%r = lshr i8 %amt, %cnt
79+
ret i8 %r
80+
}
81+
82+
define i8 @lshr_add_exact_fail(i8 %amt_in, i8 %cnt_in) {
83+
; CHECK-LABEL: @lshr_add_exact_fail(
84+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -7
85+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
86+
; CHECK-NEXT: [[R:%.*]] = lshr i8 [[AMT]], [[CNT]]
87+
; CHECK-NEXT: ret i8 [[R]]
88+
;
89+
%amt = and i8 %amt_in, -7
90+
%cnt = and i8 %cnt_in, 2
91+
%r = lshr i8 %amt, %cnt
92+
ret i8 %r
93+
}
94+
95+
define i8 @ashr_add_exact(i8 %amt_in, i8 %cnt_in) {
96+
; CHECK-LABEL: @ashr_add_exact(
97+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -14
98+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 1
99+
; CHECK-NEXT: [[R:%.*]] = ashr i8 [[AMT]], [[CNT]]
100+
; CHECK-NEXT: ret i8 [[R]]
101+
;
102+
%amt = and i8 %amt_in, -14
103+
%cnt = and i8 %cnt_in, 1
104+
%r = ashr i8 %amt, %cnt
105+
ret i8 %r
106+
}
107+
108+
define i8 @ashr_add_exact_fail(i8 %amt_in, i8 %cnt_in) {
109+
; CHECK-LABEL: @ashr_add_exact_fail(
110+
; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -14
111+
; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2
112+
; CHECK-NEXT: [[R:%.*]] = ashr i8 [[AMT]], [[CNT]]
113+
; CHECK-NEXT: ret i8 [[R]]
114+
;
115+
%amt = and i8 %amt_in, -14
116+
%cnt = and i8 %cnt_in, 2
117+
%r = ashr i8 %amt, %cnt
118+
ret i8 %r
119+
}

0 commit comments

Comments
 (0)