Skip to content

Commit abb5bd3

Browse files
committed
[CVP] Add vector test cases (NFC)
1 parent b146a57 commit abb5bd3

File tree

1 file changed

+182
-0
lines changed
  • llvm/test/Transforms/CorrelatedValuePropagation

1 file changed

+182
-0
lines changed
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=correlated-propagation < %s | FileCheck %s
3+
4+
define <2 x i1> @cmp1(<2 x i8> %a) {
5+
; CHECK-LABEL: define <2 x i1> @cmp1(
6+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
7+
; CHECK-NEXT: [[ADD:%.*]] = add nuw <2 x i8> [[A]], <i8 1, i8 1>
8+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i8> [[ADD]], zeroinitializer
9+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
10+
;
11+
%add = add nuw <2 x i8> %a, splat (i8 1)
12+
%cmp = icmp ne <2 x i8> %add, zeroinitializer
13+
ret <2 x i1> %cmp
14+
}
15+
16+
define <2 x i1> @cmp2(<2 x i8> %a) {
17+
; CHECK-LABEL: define <2 x i1> @cmp2(
18+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
19+
; CHECK-NEXT: [[ADD:%.*]] = add nuw <2 x i8> [[A]], <i8 5, i8 5>
20+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt <2 x i8> [[ADD]], <i8 2, i8 2>
21+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
22+
;
23+
%add = add nuw <2 x i8> %a, splat (i8 5)
24+
%cmp = icmp ugt <2 x i8> %add, splat (i8 2)
25+
ret <2 x i1> %cmp
26+
}
27+
28+
define <2 x i1> @cmp_signedness(<2 x i8> %a) {
29+
; CHECK-LABEL: define <2 x i1> @cmp_signedness(
30+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
31+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
32+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i16> [[ZEXT]], <i16 5, i16 5>
33+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
34+
;
35+
%zext = zext <2 x i8> %a to <2 x i16>
36+
%cmp = icmp slt <2 x i16> %zext, splat (i16 5)
37+
ret <2 x i1> %cmp
38+
}
39+
40+
define <2 x i16> @infer_nowrap(<2 x i8> %a) {
41+
; CHECK-LABEL: define <2 x i16> @infer_nowrap(
42+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
43+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
44+
; CHECK-NEXT: [[RES:%.*]] = add <2 x i16> [[ZEXT]], <i16 1, i16 1>
45+
; CHECK-NEXT: ret <2 x i16> [[RES]]
46+
;
47+
%zext = zext <2 x i8> %a to <2 x i16>
48+
%res = add <2 x i16> %zext, splat (i16 1)
49+
ret <2 x i16> %res
50+
}
51+
52+
define <2 x i16> @infer_nowrap_nonsplat(<2 x i8> %a) {
53+
; CHECK-LABEL: define <2 x i16> @infer_nowrap_nonsplat(
54+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
55+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
56+
; CHECK-NEXT: [[RES:%.*]] = add <2 x i16> [[ZEXT]], <i16 1, i16 2>
57+
; CHECK-NEXT: ret <2 x i16> [[RES]]
58+
;
59+
%zext = zext <2 x i8> %a to <2 x i16>
60+
%res = add <2 x i16> %zext, <i16 1, i16 2>
61+
ret <2 x i16> %res
62+
}
63+
64+
define <2 x i16> @infer_nowrap_nonsplat_nsw_only(<2 x i8> %a) {
65+
; CHECK-LABEL: define <2 x i16> @infer_nowrap_nonsplat_nsw_only(
66+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
67+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
68+
; CHECK-NEXT: [[RES:%.*]] = add <2 x i16> [[ZEXT]], <i16 1, i16 -1>
69+
; CHECK-NEXT: ret <2 x i16> [[RES]]
70+
;
71+
%zext = zext <2 x i8> %a to <2 x i16>
72+
%res = add <2 x i16> %zext, <i16 1, i16 -1>
73+
ret <2 x i16> %res
74+
}
75+
76+
define <2 x i16> @abs(<2 x i8> %a) {
77+
; CHECK-LABEL: define <2 x i16> @abs(
78+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
79+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
80+
; CHECK-NEXT: [[RES:%.*]] = call <2 x i16> @llvm.abs.v2i16(<2 x i16> [[ZEXT]], i1 false)
81+
; CHECK-NEXT: ret <2 x i16> [[RES]]
82+
;
83+
%zext = zext <2 x i8> %a to <2 x i16>
84+
%res = call <2 x i16> @llvm.abs(<2 x i16> %zext, i1 false)
85+
ret <2 x i16> %res
86+
}
87+
88+
define <2 x i16> @saturating(<2 x i8> %a) {
89+
; CHECK-LABEL: define <2 x i16> @saturating(
90+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
91+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
92+
; CHECK-NEXT: [[RES:%.*]] = call <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16> [[ZEXT]], <2 x i16> <i16 1, i16 1>)
93+
; CHECK-NEXT: ret <2 x i16> [[RES]]
94+
;
95+
%zext = zext <2 x i8> %a to <2 x i16>
96+
%res = call <2 x i16> @llvm.uadd.sat(<2 x i16> %zext, <2 x i16> splat (i16 1))
97+
ret <2 x i16> %res
98+
}
99+
100+
define {<2 x i16>, <2 x i1>} @with_overflow(<2 x i8> %a) {
101+
; CHECK-LABEL: define { <2 x i16>, <2 x i1> } @with_overflow(
102+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
103+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
104+
; CHECK-NEXT: [[RES:%.*]] = call { <2 x i16>, <2 x i1> } @llvm.uadd.with.overflow.v2i16(<2 x i16> [[ZEXT]], <2 x i16> <i16 1, i16 1>)
105+
; CHECK-NEXT: ret { <2 x i16>, <2 x i1> } [[RES]]
106+
;
107+
%zext = zext <2 x i8> %a to <2 x i16>
108+
%res = call {<2 x i16>, <2 x i1>} @llvm.uadd.with.overflow(<2 x i16> %zext, <2 x i16> splat (i16 1))
109+
ret {<2 x i16>, <2 x i1>} %res
110+
}
111+
112+
define <2 x i16> @srem1(<2 x i8> %a) {
113+
; CHECK-LABEL: define <2 x i16> @srem1(
114+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
115+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
116+
; CHECK-NEXT: [[RES:%.*]] = srem <2 x i16> [[ZEXT]], <i16 42, i16 42>
117+
; CHECK-NEXT: ret <2 x i16> [[RES]]
118+
;
119+
%zext = zext <2 x i8> %a to <2 x i16>
120+
%res = srem <2 x i16> %zext, splat (i16 42)
121+
ret <2 x i16> %res
122+
}
123+
124+
define <2 x i16> @srem2(<2 x i8> %a) {
125+
; CHECK-LABEL: define <2 x i16> @srem2(
126+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
127+
; CHECK-NEXT: [[ZEXT:%.*]] = sext <2 x i8> [[A]] to <2 x i16>
128+
; CHECK-NEXT: [[RES:%.*]] = srem <2 x i16> [[ZEXT]], <i16 42, i16 42>
129+
; CHECK-NEXT: ret <2 x i16> [[RES]]
130+
;
131+
%zext = sext <2 x i8> %a to <2 x i16>
132+
%res = srem <2 x i16> %zext, splat (i16 42)
133+
ret <2 x i16> %res
134+
}
135+
136+
define <2 x i16> @ashr(<2 x i8> %a) {
137+
; CHECK-LABEL: define <2 x i16> @ashr(
138+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
139+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
140+
; CHECK-NEXT: [[RES:%.*]] = ashr <2 x i16> [[ZEXT]], <i16 1, i16 1>
141+
; CHECK-NEXT: ret <2 x i16> [[RES]]
142+
;
143+
%zext = zext <2 x i8> %a to <2 x i16>
144+
%res = ashr <2 x i16> %zext, splat (i16 1)
145+
ret <2 x i16> %res
146+
}
147+
148+
define <2 x i32> @sext(<2 x i8> %a) {
149+
; CHECK-LABEL: define <2 x i32> @sext(
150+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
151+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
152+
; CHECK-NEXT: [[RES:%.*]] = sext <2 x i16> [[ZEXT]] to <2 x i32>
153+
; CHECK-NEXT: ret <2 x i32> [[RES]]
154+
;
155+
%zext = zext <2 x i8> %a to <2 x i16>
156+
%res = sext <2 x i16> %zext to <2 x i32>
157+
ret <2 x i32> %res
158+
}
159+
160+
define <2 x float> @sitofp(<2 x i8> %a) {
161+
; CHECK-LABEL: define <2 x float> @sitofp(
162+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
163+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
164+
; CHECK-NEXT: [[RES:%.*]] = sitofp <2 x i16> [[ZEXT]] to <2 x float>
165+
; CHECK-NEXT: ret <2 x float> [[RES]]
166+
;
167+
%zext = zext <2 x i8> %a to <2 x i16>
168+
%res = sitofp <2 x i16> %zext to <2 x float>
169+
ret <2 x float> %res
170+
}
171+
172+
define <2 x i16> @and(<2 x i8> %a) {
173+
; CHECK-LABEL: define <2 x i16> @and(
174+
; CHECK-SAME: <2 x i8> [[A:%.*]]) {
175+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16>
176+
; CHECK-NEXT: [[RES:%.*]] = and <2 x i16> [[ZEXT]], <i16 255, i16 255>
177+
; CHECK-NEXT: ret <2 x i16> [[RES]]
178+
;
179+
%zext = zext <2 x i8> %a to <2 x i16>
180+
%res = and <2 x i16> %zext, splat (i16 u0xff)
181+
ret <2 x i16> %res
182+
}

0 commit comments

Comments
 (0)