|
4 | 4 |
|
5 | 5 | define <16 x i8> @scmp_i8i8(<16 x i8> %a, <16 x i8> %b) {
|
6 | 6 | ; CHECK-LABEL: scmp_i8i8:
|
7 |
| -; CHECK: # %bb.0: # %entry |
| 7 | +; CHECK: # %bb.0: |
8 | 8 | ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
|
9 | 9 | ; CHECK-NEXT: vmslt.vv v0, v9, v8
|
10 | 10 | ; CHECK-NEXT: vmv.v.i v10, 0
|
11 | 11 | ; CHECK-NEXT: vmerge.vim v10, v10, 1, v0
|
12 | 12 | ; CHECK-NEXT: vmslt.vv v0, v8, v9
|
13 | 13 | ; CHECK-NEXT: vmerge.vim v8, v10, -1, v0
|
14 | 14 | ; CHECK-NEXT: ret
|
15 |
| -entry: |
16 | 15 | %c = call <16 x i8> @llvm.scmp(<16 x i8> %a, <16 x i8> %b)
|
17 | 16 | ret <16 x i8> %c
|
18 | 17 | }
|
19 | 18 |
|
20 | 19 | define <16 x i8> @scmp_z8i8(<16 x i8> %a) {
|
21 | 20 | ; CHECK-LABEL: scmp_z8i8:
|
22 |
| -; CHECK: # %bb.0: # %entry |
23 |
| -; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma |
24 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
25 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
26 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
27 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
28 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
| 21 | +; CHECK: # %bb.0: |
| 22 | +; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, mu |
| 23 | +; CHECK-NEXT: vmsle.vi v0, v8, 0 |
| 24 | +; CHECK-NEXT: vmv.v.i v9, -1 |
| 25 | +; CHECK-NEXT: vsrl.vi v9, v8, 7, v0.t |
| 26 | +; CHECK-NEXT: vmv.v.v v8, v9 |
29 | 27 | ; CHECK-NEXT: ret
|
30 |
| -entry: |
31 | 28 | %c = call <16 x i8> @llvm.scmp(<16 x i8> zeroinitializer, <16 x i8> %a)
|
32 | 29 | ret <16 x i8> %c
|
33 | 30 | }
|
34 | 31 |
|
35 | 32 | define <16 x i8> @scmp_i8z8(<16 x i8> %a) {
|
36 | 33 | ; CHECK-LABEL: scmp_i8z8:
|
37 |
| -; CHECK: # %bb.0: # %entry |
| 34 | +; CHECK: # %bb.0: |
| 35 | +; CHECK-NEXT: li a0, 1 |
38 | 36 | ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
|
39 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
40 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
41 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
42 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
43 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
| 37 | +; CHECK-NEXT: vmin.vx v9, v8, a0 |
| 38 | +; CHECK-NEXT: vsra.vi v8, v8, 7 |
| 39 | +; CHECK-NEXT: vor.vv v8, v8, v9 |
44 | 40 | ; CHECK-NEXT: ret
|
45 |
| -entry: |
46 | 41 | %c = call <16 x i8> @llvm.scmp(<16 x i8> %a, <16 x i8> zeroinitializer)
|
47 | 42 | ret <16 x i8> %c
|
48 | 43 | }
|
49 | 44 |
|
50 | 45 |
|
51 | 46 | define <8 x i16> @scmp_i16i16(<8 x i16> %a, <8 x i16> %b) {
|
52 | 47 | ; CHECK-LABEL: scmp_i16i16:
|
53 |
| -; CHECK: # %bb.0: # %entry |
| 48 | +; CHECK: # %bb.0: |
54 | 49 | ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
|
55 | 50 | ; CHECK-NEXT: vmslt.vv v0, v9, v8
|
56 | 51 | ; CHECK-NEXT: vmv.v.i v10, 0
|
57 | 52 | ; CHECK-NEXT: vmerge.vim v10, v10, 1, v0
|
58 | 53 | ; CHECK-NEXT: vmslt.vv v0, v8, v9
|
59 | 54 | ; CHECK-NEXT: vmerge.vim v8, v10, -1, v0
|
60 | 55 | ; CHECK-NEXT: ret
|
61 |
| -entry: |
62 | 56 | %c = call <8 x i16> @llvm.scmp(<8 x i16> %a, <8 x i16> %b)
|
63 | 57 | ret <8 x i16> %c
|
64 | 58 | }
|
65 | 59 |
|
66 | 60 | define <8 x i16> @scmp_z16i16(<8 x i16> %a) {
|
67 | 61 | ; CHECK-LABEL: scmp_z16i16:
|
68 |
| -; CHECK: # %bb.0: # %entry |
69 |
| -; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma |
70 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
71 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
72 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
73 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
74 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
| 62 | +; CHECK: # %bb.0: |
| 63 | +; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu |
| 64 | +; CHECK-NEXT: vmsle.vi v0, v8, 0 |
| 65 | +; CHECK-NEXT: vmv.v.i v9, -1 |
| 66 | +; CHECK-NEXT: vsrl.vi v9, v8, 15, v0.t |
| 67 | +; CHECK-NEXT: vmv.v.v v8, v9 |
75 | 68 | ; CHECK-NEXT: ret
|
76 |
| -entry: |
77 | 69 | %c = call <8 x i16> @llvm.scmp(<8 x i16> zeroinitializer, <8 x i16> %a)
|
78 | 70 | ret <8 x i16> %c
|
79 | 71 | }
|
80 | 72 |
|
81 | 73 | define <8 x i16> @scmp_i16z16(<8 x i16> %a) {
|
82 | 74 | ; CHECK-LABEL: scmp_i16z16:
|
83 |
| -; CHECK: # %bb.0: # %entry |
| 75 | +; CHECK: # %bb.0: |
| 76 | +; CHECK-NEXT: li a0, 1 |
84 | 77 | ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
|
85 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
86 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
87 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
88 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
89 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
| 78 | +; CHECK-NEXT: vmin.vx v9, v8, a0 |
| 79 | +; CHECK-NEXT: vsra.vi v8, v8, 15 |
| 80 | +; CHECK-NEXT: vor.vv v8, v8, v9 |
90 | 81 | ; CHECK-NEXT: ret
|
91 |
| -entry: |
92 | 82 | %c = call <8 x i16> @llvm.scmp(<8 x i16> %a, <8 x i16> zeroinitializer)
|
93 | 83 | ret <8 x i16> %c
|
94 | 84 | }
|
95 | 85 |
|
96 | 86 |
|
97 | 87 | define <4 x i32> @scmp_i32i32(<4 x i32> %a, <4 x i32> %b) {
|
98 | 88 | ; CHECK-LABEL: scmp_i32i32:
|
99 |
| -; CHECK: # %bb.0: # %entry |
| 89 | +; CHECK: # %bb.0: |
100 | 90 | ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
|
101 | 91 | ; CHECK-NEXT: vmslt.vv v0, v9, v8
|
102 | 92 | ; CHECK-NEXT: vmv.v.i v10, 0
|
103 | 93 | ; CHECK-NEXT: vmerge.vim v10, v10, 1, v0
|
104 | 94 | ; CHECK-NEXT: vmslt.vv v0, v8, v9
|
105 | 95 | ; CHECK-NEXT: vmerge.vim v8, v10, -1, v0
|
106 | 96 | ; CHECK-NEXT: ret
|
107 |
| -entry: |
108 | 97 | %c = call <4 x i32> @llvm.scmp(<4 x i32> %a, <4 x i32> %b)
|
109 | 98 | ret <4 x i32> %c
|
110 | 99 | }
|
111 | 100 |
|
112 | 101 | define <4 x i32> @scmp_z32i32(<4 x i32> %a) {
|
113 | 102 | ; CHECK-LABEL: scmp_z32i32:
|
114 |
| -; CHECK: # %bb.0: # %entry |
115 |
| -; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma |
116 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
117 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
118 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
119 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
120 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
| 103 | +; CHECK: # %bb.0: |
| 104 | +; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu |
| 105 | +; CHECK-NEXT: vmsle.vi v0, v8, 0 |
| 106 | +; CHECK-NEXT: vmv.v.i v9, -1 |
| 107 | +; CHECK-NEXT: vsrl.vi v9, v8, 31, v0.t |
| 108 | +; CHECK-NEXT: vmv.v.v v8, v9 |
121 | 109 | ; CHECK-NEXT: ret
|
122 |
| -entry: |
123 | 110 | %c = call <4 x i32> @llvm.scmp(<4 x i32> zeroinitializer, <4 x i32> %a)
|
124 | 111 | ret <4 x i32> %c
|
125 | 112 | }
|
126 | 113 |
|
127 | 114 | define <4 x i32> @scmp_i32z32(<4 x i32> %a) {
|
128 | 115 | ; CHECK-LABEL: scmp_i32z32:
|
129 |
| -; CHECK: # %bb.0: # %entry |
| 116 | +; CHECK: # %bb.0: |
| 117 | +; CHECK-NEXT: li a0, 1 |
130 | 118 | ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
|
131 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
132 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
133 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
134 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
135 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
| 119 | +; CHECK-NEXT: vmin.vx v9, v8, a0 |
| 120 | +; CHECK-NEXT: vsra.vi v8, v8, 31 |
| 121 | +; CHECK-NEXT: vor.vv v8, v8, v9 |
136 | 122 | ; CHECK-NEXT: ret
|
137 |
| -entry: |
138 | 123 | %c = call <4 x i32> @llvm.scmp(<4 x i32> %a, <4 x i32> zeroinitializer)
|
139 | 124 | ret <4 x i32> %c
|
140 | 125 | }
|
141 | 126 |
|
142 | 127 |
|
143 | 128 | define <2 x i64> @scmp_i64i64(<2 x i64> %a, <2 x i64> %b) {
|
144 | 129 | ; CHECK-LABEL: scmp_i64i64:
|
145 |
| -; CHECK: # %bb.0: # %entry |
| 130 | +; CHECK: # %bb.0: |
146 | 131 | ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
|
147 | 132 | ; CHECK-NEXT: vmslt.vv v0, v9, v8
|
148 | 133 | ; CHECK-NEXT: vmv.v.i v10, 0
|
149 | 134 | ; CHECK-NEXT: vmerge.vim v10, v10, 1, v0
|
150 | 135 | ; CHECK-NEXT: vmslt.vv v0, v8, v9
|
151 | 136 | ; CHECK-NEXT: vmerge.vim v8, v10, -1, v0
|
152 | 137 | ; CHECK-NEXT: ret
|
153 |
| -entry: |
154 | 138 | %c = call <2 x i64> @llvm.scmp(<2 x i64> %a, <2 x i64> %b)
|
155 | 139 | ret <2 x i64> %c
|
156 | 140 | }
|
157 | 141 |
|
158 | 142 | define <2 x i64> @scmp_z64i64(<2 x i64> %a) {
|
159 |
| -; CHECK-LABEL: scmp_z64i64: |
160 |
| -; CHECK: # %bb.0: # %entry |
161 |
| -; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma |
162 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
163 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
164 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
165 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
166 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
167 |
| -; CHECK-NEXT: ret |
168 |
| -entry: |
| 143 | +; RV32-LABEL: scmp_z64i64: |
| 144 | +; RV32: # %bb.0: |
| 145 | +; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma |
| 146 | +; RV32-NEXT: vmsle.vi v0, v8, -1 |
| 147 | +; RV32-NEXT: vmv.v.i v9, 0 |
| 148 | +; RV32-NEXT: vmerge.vim v9, v9, 1, v0 |
| 149 | +; RV32-NEXT: vmsgt.vi v0, v8, 0 |
| 150 | +; RV32-NEXT: vmerge.vim v8, v9, -1, v0 |
| 151 | +; RV32-NEXT: ret |
| 152 | +; |
| 153 | +; RV64-LABEL: scmp_z64i64: |
| 154 | +; RV64: # %bb.0: |
| 155 | +; RV64-NEXT: li a0, 63 |
| 156 | +; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu |
| 157 | +; RV64-NEXT: vmsle.vi v0, v8, 0 |
| 158 | +; RV64-NEXT: vmv.v.i v9, -1 |
| 159 | +; RV64-NEXT: vsrl.vx v9, v8, a0, v0.t |
| 160 | +; RV64-NEXT: vmv.v.v v8, v9 |
| 161 | +; RV64-NEXT: ret |
169 | 162 | %c = call <2 x i64> @llvm.scmp(<2 x i64> zeroinitializer, <2 x i64> %a)
|
170 | 163 | ret <2 x i64> %c
|
171 | 164 | }
|
172 | 165 |
|
173 | 166 | define <2 x i64> @scmp_i64z64(<2 x i64> %a) {
|
174 |
| -; CHECK-LABEL: scmp_i64z64: |
175 |
| -; CHECK: # %bb.0: # %entry |
176 |
| -; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma |
177 |
| -; CHECK-NEXT: vmsgt.vi v0, v8, 0 |
178 |
| -; CHECK-NEXT: vmv.v.i v9, 0 |
179 |
| -; CHECK-NEXT: vmerge.vim v9, v9, 1, v0 |
180 |
| -; CHECK-NEXT: vmsle.vi v0, v8, -1 |
181 |
| -; CHECK-NEXT: vmerge.vim v8, v9, -1, v0 |
182 |
| -; CHECK-NEXT: ret |
183 |
| -entry: |
| 167 | +; RV32-LABEL: scmp_i64z64: |
| 168 | +; RV32: # %bb.0: |
| 169 | +; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma |
| 170 | +; RV32-NEXT: vmsgt.vi v0, v8, 0 |
| 171 | +; RV32-NEXT: vmv.v.i v9, 0 |
| 172 | +; RV32-NEXT: vmerge.vim v9, v9, 1, v0 |
| 173 | +; RV32-NEXT: vmsle.vi v0, v8, -1 |
| 174 | +; RV32-NEXT: vmerge.vim v8, v9, -1, v0 |
| 175 | +; RV32-NEXT: ret |
| 176 | +; |
| 177 | +; RV64-LABEL: scmp_i64z64: |
| 178 | +; RV64: # %bb.0: |
| 179 | +; RV64-NEXT: li a0, 1 |
| 180 | +; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma |
| 181 | +; RV64-NEXT: vmin.vx v9, v8, a0 |
| 182 | +; RV64-NEXT: li a0, 63 |
| 183 | +; RV64-NEXT: vsra.vx v8, v8, a0 |
| 184 | +; RV64-NEXT: vor.vv v8, v8, v9 |
| 185 | +; RV64-NEXT: ret |
184 | 186 | %c = call <2 x i64> @llvm.scmp(<2 x i64> %a, <2 x i64> zeroinitializer)
|
185 | 187 | ret <2 x i64> %c
|
186 | 188 | }
|
187 |
| -;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
188 |
| -; RV32: {{.*}} |
189 |
| -; RV64: {{.*}} |
0 commit comments