File: | build/source/build-llvm/tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc |
Warning: | line 12635, column 3 Value stored to 'DefaultPolicy' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | case RISCVVector::BI__builtin_rvv_vget_v: |
2 | DefaultPolicy = 1; |
3 | |
4 | { |
5 | ID = Intrinsic::vector_extract; |
6 | auto *VecTy = cast<ScalableVectorType>(ResultType); |
7 | auto *OpVecTy = cast<ScalableVectorType>(Ops[0]->getType()); |
8 | // Mask to only valid indices. |
9 | unsigned MaxIndex = OpVecTy->getMinNumElements() / VecTy->getMinNumElements(); |
10 | assert(isPowerOf2_32(MaxIndex))(static_cast <bool> (isPowerOf2_32(MaxIndex)) ? void (0 ) : __assert_fail ("isPowerOf2_32(MaxIndex)", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 10, __extension__ __PRETTY_FUNCTION__)); |
11 | Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty()); |
12 | Ops[1] = Builder.CreateAnd(Ops[1], MaxIndex - 1); |
13 | Ops[1] = Builder.CreateMul(Ops[1], |
14 | ConstantInt::get(Ops[1]->getType(), |
15 | VecTy->getMinNumElements())); |
16 | IntrinsicTypes = {ResultType, Ops[0]->getType()}; |
17 | return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, ""); |
18 | } |
19 | break; |
20 | case RISCVVector::BI__builtin_rvv_vset_v: |
21 | DefaultPolicy = 1; |
22 | |
23 | { |
24 | ID = Intrinsic::vector_insert; |
25 | IntrinsicTypes = {ResultType, Ops[2]->getType()}; |
26 | auto *ResVecTy = cast<ScalableVectorType>(ResultType); |
27 | auto *VecTy = cast<ScalableVectorType>(Ops[2]->getType()); |
28 | // Mask to only valid indices. |
29 | unsigned MaxIndex = ResVecTy->getMinNumElements() / VecTy->getMinNumElements(); |
30 | assert(isPowerOf2_32(MaxIndex))(static_cast <bool> (isPowerOf2_32(MaxIndex)) ? void (0 ) : __assert_fail ("isPowerOf2_32(MaxIndex)", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 30, __extension__ __PRETTY_FUNCTION__)); |
31 | Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty()); |
32 | Ops[1] = Builder.CreateAnd(Ops[1], MaxIndex - 1); |
33 | Ops[1] = Builder.CreateMul(Ops[1], |
34 | ConstantInt::get(Ops[1]->getType(), |
35 | VecTy->getMinNumElements())); |
36 | std::swap(Ops[1], Ops[2]); |
37 | return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, ""); |
38 | } |
39 | break; |
40 | case RISCVVector::BI__builtin_rvv_vlmul_ext_v: |
41 | DefaultPolicy = 1; |
42 | |
43 | ID = Intrinsic::vector_insert; |
44 | IntrinsicTypes = {ResultType, Ops[0]->getType()}; |
45 | Ops.push_back(llvm::PoisonValue::get(ResultType)); |
46 | std::swap(Ops[0], Ops[1]); |
47 | Ops.push_back(ConstantInt::get(Int64Ty, 0)); |
48 | return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, ""); |
49 | break; |
50 | case RISCVVector::BI__builtin_rvv_vlmul_trunc_v: |
51 | DefaultPolicy = 1; |
52 | { |
53 | ID = Intrinsic::vector_extract; |
54 | IntrinsicTypes = {ResultType, Ops[0]->getType()}; |
55 | Ops.push_back(ConstantInt::get(Int64Ty, 0)); |
56 | return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, ""); |
57 | } break; |
58 | case RISCVVector::BI__builtin_rvv_vreinterpret_v: |
59 | DefaultPolicy = 1; |
60 | |
61 | return Builder.CreateBitCast(Ops[0], ResultType); |
62 | break; |
63 | case RISCVVector::BI__builtin_rvv_vundefined: |
64 | DefaultPolicy = 1; |
65 | |
66 | return llvm::PoisonValue::get(ResultType); |
67 | break; |
68 | case RISCVVector::BI__builtin_rvv_vaadd_vv_tu: |
69 | case RISCVVector::BI__builtin_rvv_vaadd_vx_tu: |
70 | ID = Intrinsic::riscv_vaadd; |
71 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
72 | break; |
73 | case RISCVVector::BI__builtin_rvv_vaadd_vv_ta: |
74 | case RISCVVector::BI__builtin_rvv_vaadd_vx_ta: |
75 | ID = Intrinsic::riscv_vaadd; |
76 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
77 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
78 | break; |
79 | case RISCVVector::BI__builtin_rvv_vaadd_vv_tuma: |
80 | case RISCVVector::BI__builtin_rvv_vaadd_vx_tuma: |
81 | ID = Intrinsic::riscv_vaadd_mask; |
82 | DefaultPolicy = 2; |
83 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
84 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
85 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
86 | break; |
87 | case RISCVVector::BI__builtin_rvv_vaadd_vv_tama: |
88 | case RISCVVector::BI__builtin_rvv_vaadd_vx_tama: |
89 | ID = Intrinsic::riscv_vaadd_mask; |
90 | DefaultPolicy = 3; |
91 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
92 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
93 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
94 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
95 | break; |
96 | case RISCVVector::BI__builtin_rvv_vaadd_vv_tumu: |
97 | case RISCVVector::BI__builtin_rvv_vaadd_vx_tumu: |
98 | ID = Intrinsic::riscv_vaadd_mask; |
99 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
100 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
101 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
102 | break; |
103 | case RISCVVector::BI__builtin_rvv_vaadd_vv_tamu: |
104 | case RISCVVector::BI__builtin_rvv_vaadd_vx_tamu: |
105 | ID = Intrinsic::riscv_vaadd_mask; |
106 | DefaultPolicy = 1; |
107 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
108 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
109 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
110 | break; |
111 | case RISCVVector::BI__builtin_rvv_vaaddu_vv_tu: |
112 | case RISCVVector::BI__builtin_rvv_vaaddu_vx_tu: |
113 | ID = Intrinsic::riscv_vaaddu; |
114 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
115 | break; |
116 | case RISCVVector::BI__builtin_rvv_vaaddu_vv_ta: |
117 | case RISCVVector::BI__builtin_rvv_vaaddu_vx_ta: |
118 | ID = Intrinsic::riscv_vaaddu; |
119 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
120 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
121 | break; |
122 | case RISCVVector::BI__builtin_rvv_vaaddu_vv_tuma: |
123 | case RISCVVector::BI__builtin_rvv_vaaddu_vx_tuma: |
124 | ID = Intrinsic::riscv_vaaddu_mask; |
125 | DefaultPolicy = 2; |
126 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
127 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
128 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
129 | break; |
130 | case RISCVVector::BI__builtin_rvv_vaaddu_vv_tama: |
131 | case RISCVVector::BI__builtin_rvv_vaaddu_vx_tama: |
132 | ID = Intrinsic::riscv_vaaddu_mask; |
133 | DefaultPolicy = 3; |
134 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
135 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
136 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
137 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
138 | break; |
139 | case RISCVVector::BI__builtin_rvv_vaaddu_vv_tumu: |
140 | case RISCVVector::BI__builtin_rvv_vaaddu_vx_tumu: |
141 | ID = Intrinsic::riscv_vaaddu_mask; |
142 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
143 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
144 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
145 | break; |
146 | case RISCVVector::BI__builtin_rvv_vaaddu_vv_tamu: |
147 | case RISCVVector::BI__builtin_rvv_vaaddu_vx_tamu: |
148 | ID = Intrinsic::riscv_vaaddu_mask; |
149 | DefaultPolicy = 1; |
150 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
151 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
152 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
153 | break; |
154 | case RISCVVector::BI__builtin_rvv_vadc_vvm_tu: |
155 | case RISCVVector::BI__builtin_rvv_vadc_vxm_tu: |
156 | ID = Intrinsic::riscv_vadc; |
157 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
158 | break; |
159 | case RISCVVector::BI__builtin_rvv_vadc_vvm_ta: |
160 | case RISCVVector::BI__builtin_rvv_vadc_vxm_ta: |
161 | ID = Intrinsic::riscv_vadc; |
162 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
163 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
164 | break; |
165 | case RISCVVector::BI__builtin_rvv_vadd_vv_tu: |
166 | case RISCVVector::BI__builtin_rvv_vadd_vx_tu: |
167 | ID = Intrinsic::riscv_vadd; |
168 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
169 | break; |
170 | case RISCVVector::BI__builtin_rvv_vadd_vv_ta: |
171 | case RISCVVector::BI__builtin_rvv_vadd_vx_ta: |
172 | ID = Intrinsic::riscv_vadd; |
173 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
174 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
175 | break; |
176 | case RISCVVector::BI__builtin_rvv_vadd_vv_tuma: |
177 | case RISCVVector::BI__builtin_rvv_vadd_vx_tuma: |
178 | ID = Intrinsic::riscv_vadd_mask; |
179 | DefaultPolicy = 2; |
180 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
181 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
182 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
183 | break; |
184 | case RISCVVector::BI__builtin_rvv_vadd_vv_tama: |
185 | case RISCVVector::BI__builtin_rvv_vadd_vx_tama: |
186 | ID = Intrinsic::riscv_vadd_mask; |
187 | DefaultPolicy = 3; |
188 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
189 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
190 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
191 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
192 | break; |
193 | case RISCVVector::BI__builtin_rvv_vadd_vv_tumu: |
194 | case RISCVVector::BI__builtin_rvv_vadd_vx_tumu: |
195 | ID = Intrinsic::riscv_vadd_mask; |
196 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
197 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
198 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
199 | break; |
200 | case RISCVVector::BI__builtin_rvv_vadd_vv_tamu: |
201 | case RISCVVector::BI__builtin_rvv_vadd_vx_tamu: |
202 | ID = Intrinsic::riscv_vadd_mask; |
203 | DefaultPolicy = 1; |
204 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
205 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
206 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
207 | break; |
208 | case RISCVVector::BI__builtin_rvv_vand_vv_tu: |
209 | case RISCVVector::BI__builtin_rvv_vand_vx_tu: |
210 | ID = Intrinsic::riscv_vand; |
211 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
212 | break; |
213 | case RISCVVector::BI__builtin_rvv_vand_vv_ta: |
214 | case RISCVVector::BI__builtin_rvv_vand_vx_ta: |
215 | ID = Intrinsic::riscv_vand; |
216 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
217 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
218 | break; |
219 | case RISCVVector::BI__builtin_rvv_vand_vv_tuma: |
220 | case RISCVVector::BI__builtin_rvv_vand_vx_tuma: |
221 | ID = Intrinsic::riscv_vand_mask; |
222 | DefaultPolicy = 2; |
223 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
224 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
225 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
226 | break; |
227 | case RISCVVector::BI__builtin_rvv_vand_vv_tama: |
228 | case RISCVVector::BI__builtin_rvv_vand_vx_tama: |
229 | ID = Intrinsic::riscv_vand_mask; |
230 | DefaultPolicy = 3; |
231 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
232 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
233 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
234 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
235 | break; |
236 | case RISCVVector::BI__builtin_rvv_vand_vv_tumu: |
237 | case RISCVVector::BI__builtin_rvv_vand_vx_tumu: |
238 | ID = Intrinsic::riscv_vand_mask; |
239 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
240 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
241 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
242 | break; |
243 | case RISCVVector::BI__builtin_rvv_vand_vv_tamu: |
244 | case RISCVVector::BI__builtin_rvv_vand_vx_tamu: |
245 | ID = Intrinsic::riscv_vand_mask; |
246 | DefaultPolicy = 1; |
247 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
248 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
249 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
250 | break; |
251 | case RISCVVector::BI__builtin_rvv_vasub_vv_tu: |
252 | case RISCVVector::BI__builtin_rvv_vasub_vx_tu: |
253 | ID = Intrinsic::riscv_vasub; |
254 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
255 | break; |
256 | case RISCVVector::BI__builtin_rvv_vasub_vv_ta: |
257 | case RISCVVector::BI__builtin_rvv_vasub_vx_ta: |
258 | ID = Intrinsic::riscv_vasub; |
259 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
260 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
261 | break; |
262 | case RISCVVector::BI__builtin_rvv_vasub_vv_tuma: |
263 | case RISCVVector::BI__builtin_rvv_vasub_vx_tuma: |
264 | ID = Intrinsic::riscv_vasub_mask; |
265 | DefaultPolicy = 2; |
266 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
267 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
268 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
269 | break; |
270 | case RISCVVector::BI__builtin_rvv_vasub_vv_tama: |
271 | case RISCVVector::BI__builtin_rvv_vasub_vx_tama: |
272 | ID = Intrinsic::riscv_vasub_mask; |
273 | DefaultPolicy = 3; |
274 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
275 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
276 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
277 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
278 | break; |
279 | case RISCVVector::BI__builtin_rvv_vasub_vv_tumu: |
280 | case RISCVVector::BI__builtin_rvv_vasub_vx_tumu: |
281 | ID = Intrinsic::riscv_vasub_mask; |
282 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
283 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
284 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
285 | break; |
286 | case RISCVVector::BI__builtin_rvv_vasub_vv_tamu: |
287 | case RISCVVector::BI__builtin_rvv_vasub_vx_tamu: |
288 | ID = Intrinsic::riscv_vasub_mask; |
289 | DefaultPolicy = 1; |
290 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
291 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
292 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
293 | break; |
294 | case RISCVVector::BI__builtin_rvv_vasubu_vv_tu: |
295 | case RISCVVector::BI__builtin_rvv_vasubu_vx_tu: |
296 | ID = Intrinsic::riscv_vasubu; |
297 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
298 | break; |
299 | case RISCVVector::BI__builtin_rvv_vasubu_vv_ta: |
300 | case RISCVVector::BI__builtin_rvv_vasubu_vx_ta: |
301 | ID = Intrinsic::riscv_vasubu; |
302 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
303 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
304 | break; |
305 | case RISCVVector::BI__builtin_rvv_vasubu_vv_tuma: |
306 | case RISCVVector::BI__builtin_rvv_vasubu_vx_tuma: |
307 | ID = Intrinsic::riscv_vasubu_mask; |
308 | DefaultPolicy = 2; |
309 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
310 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
311 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
312 | break; |
313 | case RISCVVector::BI__builtin_rvv_vasubu_vv_tama: |
314 | case RISCVVector::BI__builtin_rvv_vasubu_vx_tama: |
315 | ID = Intrinsic::riscv_vasubu_mask; |
316 | DefaultPolicy = 3; |
317 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
318 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
319 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
320 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
321 | break; |
322 | case RISCVVector::BI__builtin_rvv_vasubu_vv_tumu: |
323 | case RISCVVector::BI__builtin_rvv_vasubu_vx_tumu: |
324 | ID = Intrinsic::riscv_vasubu_mask; |
325 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
326 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
327 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
328 | break; |
329 | case RISCVVector::BI__builtin_rvv_vasubu_vv_tamu: |
330 | case RISCVVector::BI__builtin_rvv_vasubu_vx_tamu: |
331 | ID = Intrinsic::riscv_vasubu_mask; |
332 | DefaultPolicy = 1; |
333 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
334 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
335 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
336 | break; |
337 | case RISCVVector::BI__builtin_rvv_vcompress_vm_tu: |
338 | ID = Intrinsic::riscv_vcompress; |
339 | DefaultPolicy = 0; |
340 | |
341 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
342 | // insert poison passthru |
343 | if (DefaultPolicy == TAIL_AGNOSTIC) |
344 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
345 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
346 | break; |
347 | case RISCVVector::BI__builtin_rvv_vcompress_vm_ta: |
348 | ID = Intrinsic::riscv_vcompress; |
349 | DefaultPolicy = 1; |
350 | |
351 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
352 | // insert poison passthru |
353 | if (DefaultPolicy == TAIL_AGNOSTIC) |
354 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
355 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
356 | break; |
357 | case RISCVVector::BI__builtin_rvv_vcpop_m: |
358 | ID = Intrinsic::riscv_vcpop; |
359 | DefaultPolicy = 1; |
360 | IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()}; |
361 | break; |
362 | case RISCVVector::BI__builtin_rvv_vcpop_m_m: |
363 | ID = Intrinsic::riscv_vcpop_mask; |
364 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
365 | IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()}; |
366 | break; |
367 | case RISCVVector::BI__builtin_rvv_vdiv_vv_tu: |
368 | case RISCVVector::BI__builtin_rvv_vdiv_vx_tu: |
369 | ID = Intrinsic::riscv_vdiv; |
370 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
371 | break; |
372 | case RISCVVector::BI__builtin_rvv_vdiv_vv_ta: |
373 | case RISCVVector::BI__builtin_rvv_vdiv_vx_ta: |
374 | ID = Intrinsic::riscv_vdiv; |
375 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
376 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
377 | break; |
378 | case RISCVVector::BI__builtin_rvv_vdiv_vv_tuma: |
379 | case RISCVVector::BI__builtin_rvv_vdiv_vx_tuma: |
380 | ID = Intrinsic::riscv_vdiv_mask; |
381 | DefaultPolicy = 2; |
382 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
383 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
384 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
385 | break; |
386 | case RISCVVector::BI__builtin_rvv_vdiv_vv_tama: |
387 | case RISCVVector::BI__builtin_rvv_vdiv_vx_tama: |
388 | ID = Intrinsic::riscv_vdiv_mask; |
389 | DefaultPolicy = 3; |
390 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
391 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
392 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
393 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
394 | break; |
395 | case RISCVVector::BI__builtin_rvv_vdiv_vv_tumu: |
396 | case RISCVVector::BI__builtin_rvv_vdiv_vx_tumu: |
397 | ID = Intrinsic::riscv_vdiv_mask; |
398 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
399 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
400 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
401 | break; |
402 | case RISCVVector::BI__builtin_rvv_vdiv_vv_tamu: |
403 | case RISCVVector::BI__builtin_rvv_vdiv_vx_tamu: |
404 | ID = Intrinsic::riscv_vdiv_mask; |
405 | DefaultPolicy = 1; |
406 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
407 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
408 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
409 | break; |
410 | case RISCVVector::BI__builtin_rvv_vdivu_vv_tu: |
411 | case RISCVVector::BI__builtin_rvv_vdivu_vx_tu: |
412 | ID = Intrinsic::riscv_vdivu; |
413 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
414 | break; |
415 | case RISCVVector::BI__builtin_rvv_vdivu_vv_ta: |
416 | case RISCVVector::BI__builtin_rvv_vdivu_vx_ta: |
417 | ID = Intrinsic::riscv_vdivu; |
418 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
419 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
420 | break; |
421 | case RISCVVector::BI__builtin_rvv_vdivu_vv_tuma: |
422 | case RISCVVector::BI__builtin_rvv_vdivu_vx_tuma: |
423 | ID = Intrinsic::riscv_vdivu_mask; |
424 | DefaultPolicy = 2; |
425 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
426 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
427 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
428 | break; |
429 | case RISCVVector::BI__builtin_rvv_vdivu_vv_tama: |
430 | case RISCVVector::BI__builtin_rvv_vdivu_vx_tama: |
431 | ID = Intrinsic::riscv_vdivu_mask; |
432 | DefaultPolicy = 3; |
433 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
434 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
435 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
436 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
437 | break; |
438 | case RISCVVector::BI__builtin_rvv_vdivu_vv_tumu: |
439 | case RISCVVector::BI__builtin_rvv_vdivu_vx_tumu: |
440 | ID = Intrinsic::riscv_vdivu_mask; |
441 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
442 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
443 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
444 | break; |
445 | case RISCVVector::BI__builtin_rvv_vdivu_vv_tamu: |
446 | case RISCVVector::BI__builtin_rvv_vdivu_vx_tamu: |
447 | ID = Intrinsic::riscv_vdivu_mask; |
448 | DefaultPolicy = 1; |
449 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
450 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
451 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
452 | break; |
453 | case RISCVVector::BI__builtin_rvv_vfadd_vv_tu: |
454 | case RISCVVector::BI__builtin_rvv_vfadd_vf_tu: |
455 | ID = Intrinsic::riscv_vfadd; |
456 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
457 | break; |
458 | case RISCVVector::BI__builtin_rvv_vfadd_vv_ta: |
459 | case RISCVVector::BI__builtin_rvv_vfadd_vf_ta: |
460 | ID = Intrinsic::riscv_vfadd; |
461 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
462 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
463 | break; |
464 | case RISCVVector::BI__builtin_rvv_vfadd_vv_tuma: |
465 | case RISCVVector::BI__builtin_rvv_vfadd_vf_tuma: |
466 | ID = Intrinsic::riscv_vfadd_mask; |
467 | DefaultPolicy = 2; |
468 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
469 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
470 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
471 | break; |
472 | case RISCVVector::BI__builtin_rvv_vfadd_vv_tama: |
473 | case RISCVVector::BI__builtin_rvv_vfadd_vf_tama: |
474 | ID = Intrinsic::riscv_vfadd_mask; |
475 | DefaultPolicy = 3; |
476 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
477 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
478 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
479 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
480 | break; |
481 | case RISCVVector::BI__builtin_rvv_vfadd_vv_tumu: |
482 | case RISCVVector::BI__builtin_rvv_vfadd_vf_tumu: |
483 | ID = Intrinsic::riscv_vfadd_mask; |
484 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
485 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
486 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
487 | break; |
488 | case RISCVVector::BI__builtin_rvv_vfadd_vv_tamu: |
489 | case RISCVVector::BI__builtin_rvv_vfadd_vf_tamu: |
490 | ID = Intrinsic::riscv_vfadd_mask; |
491 | DefaultPolicy = 1; |
492 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
493 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
494 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
495 | break; |
496 | case RISCVVector::BI__builtin_rvv_vfclass_v_tu: |
497 | ID = Intrinsic::riscv_vfclass; |
498 | IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()}; |
499 | break; |
500 | case RISCVVector::BI__builtin_rvv_vfclass_v_ta: |
501 | ID = Intrinsic::riscv_vfclass; |
502 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
503 | IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()}; |
504 | break; |
505 | case RISCVVector::BI__builtin_rvv_vfclass_v_tuma: |
506 | ID = Intrinsic::riscv_vfclass_mask; |
507 | DefaultPolicy = 2; |
508 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
509 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
510 | IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()}; |
511 | break; |
512 | case RISCVVector::BI__builtin_rvv_vfclass_v_tama: |
513 | ID = Intrinsic::riscv_vfclass_mask; |
514 | DefaultPolicy = 3; |
515 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
516 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
517 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
518 | IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()}; |
519 | break; |
520 | case RISCVVector::BI__builtin_rvv_vfclass_v_tumu: |
521 | ID = Intrinsic::riscv_vfclass_mask; |
522 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
523 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
524 | IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()}; |
525 | break; |
526 | case RISCVVector::BI__builtin_rvv_vfclass_v_tamu: |
527 | ID = Intrinsic::riscv_vfclass_mask; |
528 | DefaultPolicy = 1; |
529 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
530 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
531 | IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()}; |
532 | break; |
533 | case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tu: |
534 | ID = Intrinsic::riscv_vfcvt_f_x_v; |
535 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
536 | break; |
537 | case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_ta: |
538 | ID = Intrinsic::riscv_vfcvt_f_x_v; |
539 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
540 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
541 | break; |
542 | case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tuma: |
543 | ID = Intrinsic::riscv_vfcvt_f_x_v_mask; |
544 | DefaultPolicy = 2; |
545 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
546 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
547 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
548 | break; |
549 | case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tama: |
550 | ID = Intrinsic::riscv_vfcvt_f_x_v_mask; |
551 | DefaultPolicy = 3; |
552 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
553 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
554 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
555 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
556 | break; |
557 | case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tumu: |
558 | ID = Intrinsic::riscv_vfcvt_f_x_v_mask; |
559 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
560 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
561 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
562 | break; |
563 | case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tamu: |
564 | ID = Intrinsic::riscv_vfcvt_f_x_v_mask; |
565 | DefaultPolicy = 1; |
566 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
567 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
568 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
569 | break; |
570 | case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tu: |
571 | ID = Intrinsic::riscv_vfcvt_f_xu_v; |
572 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
573 | break; |
574 | case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_ta: |
575 | ID = Intrinsic::riscv_vfcvt_f_xu_v; |
576 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
577 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
578 | break; |
579 | case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tuma: |
580 | ID = Intrinsic::riscv_vfcvt_f_xu_v_mask; |
581 | DefaultPolicy = 2; |
582 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
583 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
584 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
585 | break; |
586 | case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tama: |
587 | ID = Intrinsic::riscv_vfcvt_f_xu_v_mask; |
588 | DefaultPolicy = 3; |
589 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
590 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
591 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
592 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
593 | break; |
594 | case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tumu: |
595 | ID = Intrinsic::riscv_vfcvt_f_xu_v_mask; |
596 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
597 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
598 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
599 | break; |
600 | case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tamu: |
601 | ID = Intrinsic::riscv_vfcvt_f_xu_v_mask; |
602 | DefaultPolicy = 1; |
603 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
604 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
605 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
606 | break; |
607 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tu: |
608 | ID = Intrinsic::riscv_vfcvt_rtz_x_f_v; |
609 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
610 | break; |
611 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_ta: |
612 | ID = Intrinsic::riscv_vfcvt_rtz_x_f_v; |
613 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
614 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
615 | break; |
616 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tuma: |
617 | ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask; |
618 | DefaultPolicy = 2; |
619 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
620 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
621 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
622 | break; |
623 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tama: |
624 | ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask; |
625 | DefaultPolicy = 3; |
626 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
627 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
628 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
629 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
630 | break; |
631 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tumu: |
632 | ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask; |
633 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
634 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
635 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
636 | break; |
637 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tamu: |
638 | ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask; |
639 | DefaultPolicy = 1; |
640 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
641 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
642 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
643 | break; |
644 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tu: |
645 | ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v; |
646 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
647 | break; |
648 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_ta: |
649 | ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v; |
650 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
651 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
652 | break; |
653 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tuma: |
654 | ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask; |
655 | DefaultPolicy = 2; |
656 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
657 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
658 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
659 | break; |
660 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tama: |
661 | ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask; |
662 | DefaultPolicy = 3; |
663 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
664 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
665 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
666 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
667 | break; |
668 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tumu: |
669 | ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask; |
670 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
671 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
672 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
673 | break; |
674 | case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tamu: |
675 | ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask; |
676 | DefaultPolicy = 1; |
677 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
678 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
679 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
680 | break; |
681 | case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tu: |
682 | ID = Intrinsic::riscv_vfcvt_x_f_v; |
683 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
684 | break; |
685 | case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_ta: |
686 | ID = Intrinsic::riscv_vfcvt_x_f_v; |
687 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
688 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
689 | break; |
690 | case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tuma: |
691 | ID = Intrinsic::riscv_vfcvt_x_f_v_mask; |
692 | DefaultPolicy = 2; |
693 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
694 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
695 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
696 | break; |
697 | case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tama: |
698 | ID = Intrinsic::riscv_vfcvt_x_f_v_mask; |
699 | DefaultPolicy = 3; |
700 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
701 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
702 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
703 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
704 | break; |
705 | case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tumu: |
706 | ID = Intrinsic::riscv_vfcvt_x_f_v_mask; |
707 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
708 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
709 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
710 | break; |
711 | case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tamu: |
712 | ID = Intrinsic::riscv_vfcvt_x_f_v_mask; |
713 | DefaultPolicy = 1; |
714 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
715 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
716 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
717 | break; |
718 | case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tu: |
719 | ID = Intrinsic::riscv_vfcvt_xu_f_v; |
720 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
721 | break; |
722 | case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_ta: |
723 | ID = Intrinsic::riscv_vfcvt_xu_f_v; |
724 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
725 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
726 | break; |
727 | case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tuma: |
728 | ID = Intrinsic::riscv_vfcvt_xu_f_v_mask; |
729 | DefaultPolicy = 2; |
730 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
731 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
732 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
733 | break; |
734 | case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tama: |
735 | ID = Intrinsic::riscv_vfcvt_xu_f_v_mask; |
736 | DefaultPolicy = 3; |
737 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
738 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
739 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
740 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
741 | break; |
742 | case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tumu: |
743 | ID = Intrinsic::riscv_vfcvt_xu_f_v_mask; |
744 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
745 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
746 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
747 | break; |
748 | case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tamu: |
749 | ID = Intrinsic::riscv_vfcvt_xu_f_v_mask; |
750 | DefaultPolicy = 1; |
751 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
752 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
753 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
754 | break; |
755 | case RISCVVector::BI__builtin_rvv_vfdiv_vv_tu: |
756 | case RISCVVector::BI__builtin_rvv_vfdiv_vf_tu: |
757 | ID = Intrinsic::riscv_vfdiv; |
758 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
759 | break; |
760 | case RISCVVector::BI__builtin_rvv_vfdiv_vv_ta: |
761 | case RISCVVector::BI__builtin_rvv_vfdiv_vf_ta: |
762 | ID = Intrinsic::riscv_vfdiv; |
763 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
764 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
765 | break; |
766 | case RISCVVector::BI__builtin_rvv_vfdiv_vv_tuma: |
767 | case RISCVVector::BI__builtin_rvv_vfdiv_vf_tuma: |
768 | ID = Intrinsic::riscv_vfdiv_mask; |
769 | DefaultPolicy = 2; |
770 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
771 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
772 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
773 | break; |
774 | case RISCVVector::BI__builtin_rvv_vfdiv_vv_tama: |
775 | case RISCVVector::BI__builtin_rvv_vfdiv_vf_tama: |
776 | ID = Intrinsic::riscv_vfdiv_mask; |
777 | DefaultPolicy = 3; |
778 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
779 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
780 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
781 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
782 | break; |
783 | case RISCVVector::BI__builtin_rvv_vfdiv_vv_tumu: |
784 | case RISCVVector::BI__builtin_rvv_vfdiv_vf_tumu: |
785 | ID = Intrinsic::riscv_vfdiv_mask; |
786 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
787 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
788 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
789 | break; |
790 | case RISCVVector::BI__builtin_rvv_vfdiv_vv_tamu: |
791 | case RISCVVector::BI__builtin_rvv_vfdiv_vf_tamu: |
792 | ID = Intrinsic::riscv_vfdiv_mask; |
793 | DefaultPolicy = 1; |
794 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
795 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
796 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
797 | break; |
798 | case RISCVVector::BI__builtin_rvv_vfirst_m: |
799 | ID = Intrinsic::riscv_vfirst; |
800 | DefaultPolicy = 1; |
801 | IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()}; |
802 | break; |
803 | case RISCVVector::BI__builtin_rvv_vfirst_m_m: |
804 | ID = Intrinsic::riscv_vfirst_mask; |
805 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
806 | IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()}; |
807 | break; |
808 | case RISCVVector::BI__builtin_rvv_vfmacc_vv_tu: |
809 | case RISCVVector::BI__builtin_rvv_vfmacc_vf_tu: |
810 | ID = Intrinsic::riscv_vfmacc; |
811 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
812 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
813 | break; |
814 | case RISCVVector::BI__builtin_rvv_vfmacc_vv_ta: |
815 | case RISCVVector::BI__builtin_rvv_vfmacc_vf_ta: |
816 | ID = Intrinsic::riscv_vfmacc; |
817 | DefaultPolicy = 1; |
818 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
819 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
820 | break; |
821 | case RISCVVector::BI__builtin_rvv_vfmacc_vv_tuma: |
822 | case RISCVVector::BI__builtin_rvv_vfmacc_vf_tuma: |
823 | ID = Intrinsic::riscv_vfmacc_mask; |
824 | DefaultPolicy = 2; |
825 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
826 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
827 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
828 | break; |
829 | case RISCVVector::BI__builtin_rvv_vfmacc_vv_tama: |
830 | case RISCVVector::BI__builtin_rvv_vfmacc_vf_tama: |
831 | ID = Intrinsic::riscv_vfmacc_mask; |
832 | DefaultPolicy = 3; |
833 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
834 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
835 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
836 | break; |
837 | case RISCVVector::BI__builtin_rvv_vfmacc_vv_tumu: |
838 | case RISCVVector::BI__builtin_rvv_vfmacc_vf_tumu: |
839 | ID = Intrinsic::riscv_vfmacc_mask; |
840 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
841 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
842 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
843 | break; |
844 | case RISCVVector::BI__builtin_rvv_vfmacc_vv_tamu: |
845 | case RISCVVector::BI__builtin_rvv_vfmacc_vf_tamu: |
846 | ID = Intrinsic::riscv_vfmacc_mask; |
847 | DefaultPolicy = 1; |
848 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
849 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
850 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
851 | break; |
852 | case RISCVVector::BI__builtin_rvv_vfmadd_vv_tu: |
853 | case RISCVVector::BI__builtin_rvv_vfmadd_vf_tu: |
854 | ID = Intrinsic::riscv_vfmadd; |
855 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
856 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
857 | break; |
858 | case RISCVVector::BI__builtin_rvv_vfmadd_vv_ta: |
859 | case RISCVVector::BI__builtin_rvv_vfmadd_vf_ta: |
860 | ID = Intrinsic::riscv_vfmadd; |
861 | DefaultPolicy = 1; |
862 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
863 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
864 | break; |
865 | case RISCVVector::BI__builtin_rvv_vfmadd_vv_tuma: |
866 | case RISCVVector::BI__builtin_rvv_vfmadd_vf_tuma: |
867 | ID = Intrinsic::riscv_vfmadd_mask; |
868 | DefaultPolicy = 2; |
869 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
870 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
871 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
872 | break; |
873 | case RISCVVector::BI__builtin_rvv_vfmadd_vv_tama: |
874 | case RISCVVector::BI__builtin_rvv_vfmadd_vf_tama: |
875 | ID = Intrinsic::riscv_vfmadd_mask; |
876 | DefaultPolicy = 3; |
877 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
878 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
879 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
880 | break; |
881 | case RISCVVector::BI__builtin_rvv_vfmadd_vv_tumu: |
882 | case RISCVVector::BI__builtin_rvv_vfmadd_vf_tumu: |
883 | ID = Intrinsic::riscv_vfmadd_mask; |
884 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
885 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
886 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
887 | break; |
888 | case RISCVVector::BI__builtin_rvv_vfmadd_vv_tamu: |
889 | case RISCVVector::BI__builtin_rvv_vfmadd_vf_tamu: |
890 | ID = Intrinsic::riscv_vfmadd_mask; |
891 | DefaultPolicy = 1; |
892 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
893 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
894 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
895 | break; |
896 | case RISCVVector::BI__builtin_rvv_vfmax_vv_tu: |
897 | case RISCVVector::BI__builtin_rvv_vfmax_vf_tu: |
898 | ID = Intrinsic::riscv_vfmax; |
899 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
900 | break; |
901 | case RISCVVector::BI__builtin_rvv_vfmax_vv_ta: |
902 | case RISCVVector::BI__builtin_rvv_vfmax_vf_ta: |
903 | ID = Intrinsic::riscv_vfmax; |
904 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
905 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
906 | break; |
907 | case RISCVVector::BI__builtin_rvv_vfmax_vv_tuma: |
908 | case RISCVVector::BI__builtin_rvv_vfmax_vf_tuma: |
909 | ID = Intrinsic::riscv_vfmax_mask; |
910 | DefaultPolicy = 2; |
911 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
912 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
913 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
914 | break; |
915 | case RISCVVector::BI__builtin_rvv_vfmax_vv_tama: |
916 | case RISCVVector::BI__builtin_rvv_vfmax_vf_tama: |
917 | ID = Intrinsic::riscv_vfmax_mask; |
918 | DefaultPolicy = 3; |
919 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
920 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
921 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
922 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
923 | break; |
924 | case RISCVVector::BI__builtin_rvv_vfmax_vv_tumu: |
925 | case RISCVVector::BI__builtin_rvv_vfmax_vf_tumu: |
926 | ID = Intrinsic::riscv_vfmax_mask; |
927 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
928 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
929 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
930 | break; |
931 | case RISCVVector::BI__builtin_rvv_vfmax_vv_tamu: |
932 | case RISCVVector::BI__builtin_rvv_vfmax_vf_tamu: |
933 | ID = Intrinsic::riscv_vfmax_mask; |
934 | DefaultPolicy = 1; |
935 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
936 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
937 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
938 | break; |
939 | case RISCVVector::BI__builtin_rvv_vfmerge_vfm_tu: |
940 | ID = Intrinsic::riscv_vfmerge; |
941 | DefaultPolicy = 0; |
942 | |
943 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
944 | // insert poison passthru |
945 | if (DefaultPolicy == TAIL_AGNOSTIC) |
946 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
947 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
948 | break; |
949 | case RISCVVector::BI__builtin_rvv_vfmerge_vfm_ta: |
950 | ID = Intrinsic::riscv_vfmerge; |
951 | DefaultPolicy = 1; |
952 | |
953 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
954 | // insert poison passthru |
955 | if (DefaultPolicy == TAIL_AGNOSTIC) |
956 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
957 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
958 | break; |
959 | case RISCVVector::BI__builtin_rvv_vfmin_vv_tu: |
960 | case RISCVVector::BI__builtin_rvv_vfmin_vf_tu: |
961 | ID = Intrinsic::riscv_vfmin; |
962 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
963 | break; |
964 | case RISCVVector::BI__builtin_rvv_vfmin_vv_ta: |
965 | case RISCVVector::BI__builtin_rvv_vfmin_vf_ta: |
966 | ID = Intrinsic::riscv_vfmin; |
967 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
968 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
969 | break; |
970 | case RISCVVector::BI__builtin_rvv_vfmin_vv_tuma: |
971 | case RISCVVector::BI__builtin_rvv_vfmin_vf_tuma: |
972 | ID = Intrinsic::riscv_vfmin_mask; |
973 | DefaultPolicy = 2; |
974 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
975 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
976 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
977 | break; |
978 | case RISCVVector::BI__builtin_rvv_vfmin_vv_tama: |
979 | case RISCVVector::BI__builtin_rvv_vfmin_vf_tama: |
980 | ID = Intrinsic::riscv_vfmin_mask; |
981 | DefaultPolicy = 3; |
982 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
983 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
984 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
985 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
986 | break; |
987 | case RISCVVector::BI__builtin_rvv_vfmin_vv_tumu: |
988 | case RISCVVector::BI__builtin_rvv_vfmin_vf_tumu: |
989 | ID = Intrinsic::riscv_vfmin_mask; |
990 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
991 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
992 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
993 | break; |
994 | case RISCVVector::BI__builtin_rvv_vfmin_vv_tamu: |
995 | case RISCVVector::BI__builtin_rvv_vfmin_vf_tamu: |
996 | ID = Intrinsic::riscv_vfmin_mask; |
997 | DefaultPolicy = 1; |
998 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
999 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1000 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1001 | break; |
1002 | case RISCVVector::BI__builtin_rvv_vfmsac_vv_tu: |
1003 | case RISCVVector::BI__builtin_rvv_vfmsac_vf_tu: |
1004 | ID = Intrinsic::riscv_vfmsac; |
1005 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1006 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1007 | break; |
1008 | case RISCVVector::BI__builtin_rvv_vfmsac_vv_ta: |
1009 | case RISCVVector::BI__builtin_rvv_vfmsac_vf_ta: |
1010 | ID = Intrinsic::riscv_vfmsac; |
1011 | DefaultPolicy = 1; |
1012 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1013 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1014 | break; |
1015 | case RISCVVector::BI__builtin_rvv_vfmsac_vv_tuma: |
1016 | case RISCVVector::BI__builtin_rvv_vfmsac_vf_tuma: |
1017 | ID = Intrinsic::riscv_vfmsac_mask; |
1018 | DefaultPolicy = 2; |
1019 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1020 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1021 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1022 | break; |
1023 | case RISCVVector::BI__builtin_rvv_vfmsac_vv_tama: |
1024 | case RISCVVector::BI__builtin_rvv_vfmsac_vf_tama: |
1025 | ID = Intrinsic::riscv_vfmsac_mask; |
1026 | DefaultPolicy = 3; |
1027 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1028 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1029 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1030 | break; |
1031 | case RISCVVector::BI__builtin_rvv_vfmsac_vv_tumu: |
1032 | case RISCVVector::BI__builtin_rvv_vfmsac_vf_tumu: |
1033 | ID = Intrinsic::riscv_vfmsac_mask; |
1034 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1035 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1036 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1037 | break; |
1038 | case RISCVVector::BI__builtin_rvv_vfmsac_vv_tamu: |
1039 | case RISCVVector::BI__builtin_rvv_vfmsac_vf_tamu: |
1040 | ID = Intrinsic::riscv_vfmsac_mask; |
1041 | DefaultPolicy = 1; |
1042 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1043 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1044 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1045 | break; |
1046 | case RISCVVector::BI__builtin_rvv_vfmsub_vv_tu: |
1047 | case RISCVVector::BI__builtin_rvv_vfmsub_vf_tu: |
1048 | ID = Intrinsic::riscv_vfmsub; |
1049 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1050 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1051 | break; |
1052 | case RISCVVector::BI__builtin_rvv_vfmsub_vv_ta: |
1053 | case RISCVVector::BI__builtin_rvv_vfmsub_vf_ta: |
1054 | ID = Intrinsic::riscv_vfmsub; |
1055 | DefaultPolicy = 1; |
1056 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1057 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1058 | break; |
1059 | case RISCVVector::BI__builtin_rvv_vfmsub_vv_tuma: |
1060 | case RISCVVector::BI__builtin_rvv_vfmsub_vf_tuma: |
1061 | ID = Intrinsic::riscv_vfmsub_mask; |
1062 | DefaultPolicy = 2; |
1063 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1064 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1065 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1066 | break; |
1067 | case RISCVVector::BI__builtin_rvv_vfmsub_vv_tama: |
1068 | case RISCVVector::BI__builtin_rvv_vfmsub_vf_tama: |
1069 | ID = Intrinsic::riscv_vfmsub_mask; |
1070 | DefaultPolicy = 3; |
1071 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1072 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1073 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1074 | break; |
1075 | case RISCVVector::BI__builtin_rvv_vfmsub_vv_tumu: |
1076 | case RISCVVector::BI__builtin_rvv_vfmsub_vf_tumu: |
1077 | ID = Intrinsic::riscv_vfmsub_mask; |
1078 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1079 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1080 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1081 | break; |
1082 | case RISCVVector::BI__builtin_rvv_vfmsub_vv_tamu: |
1083 | case RISCVVector::BI__builtin_rvv_vfmsub_vf_tamu: |
1084 | ID = Intrinsic::riscv_vfmsub_mask; |
1085 | DefaultPolicy = 1; |
1086 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1087 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1088 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1089 | break; |
1090 | case RISCVVector::BI__builtin_rvv_vfmul_vv_tu: |
1091 | case RISCVVector::BI__builtin_rvv_vfmul_vf_tu: |
1092 | ID = Intrinsic::riscv_vfmul; |
1093 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1094 | break; |
1095 | case RISCVVector::BI__builtin_rvv_vfmul_vv_ta: |
1096 | case RISCVVector::BI__builtin_rvv_vfmul_vf_ta: |
1097 | ID = Intrinsic::riscv_vfmul; |
1098 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1099 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1100 | break; |
1101 | case RISCVVector::BI__builtin_rvv_vfmul_vv_tuma: |
1102 | case RISCVVector::BI__builtin_rvv_vfmul_vf_tuma: |
1103 | ID = Intrinsic::riscv_vfmul_mask; |
1104 | DefaultPolicy = 2; |
1105 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1106 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1107 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1108 | break; |
1109 | case RISCVVector::BI__builtin_rvv_vfmul_vv_tama: |
1110 | case RISCVVector::BI__builtin_rvv_vfmul_vf_tama: |
1111 | ID = Intrinsic::riscv_vfmul_mask; |
1112 | DefaultPolicy = 3; |
1113 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1114 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1115 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1116 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1117 | break; |
1118 | case RISCVVector::BI__builtin_rvv_vfmul_vv_tumu: |
1119 | case RISCVVector::BI__builtin_rvv_vfmul_vf_tumu: |
1120 | ID = Intrinsic::riscv_vfmul_mask; |
1121 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1122 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1123 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1124 | break; |
1125 | case RISCVVector::BI__builtin_rvv_vfmul_vv_tamu: |
1126 | case RISCVVector::BI__builtin_rvv_vfmul_vf_tamu: |
1127 | ID = Intrinsic::riscv_vfmul_mask; |
1128 | DefaultPolicy = 1; |
1129 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1130 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1131 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1132 | break; |
1133 | case RISCVVector::BI__builtin_rvv_vfmv_f_s: |
1134 | ID = Intrinsic::riscv_vfmv_f_s; |
1135 | IntrinsicTypes = {Ops[0]->getType()}; |
1136 | break; |
1137 | case RISCVVector::BI__builtin_rvv_vfmv_s_f_tu: |
1138 | case RISCVVector::BI__builtin_rvv_vfmv_s_x_tu: |
1139 | ID = Intrinsic::riscv_vfmv_s_f; |
1140 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1141 | break; |
1142 | case RISCVVector::BI__builtin_rvv_vfmv_s_f_ta: |
1143 | case RISCVVector::BI__builtin_rvv_vfmv_s_x_ta: |
1144 | ID = Intrinsic::riscv_vfmv_s_f; |
1145 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1146 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1147 | break; |
1148 | case RISCVVector::BI__builtin_rvv_vfmv_v_f_tu: |
1149 | ID = Intrinsic::riscv_vfmv_v_f; |
1150 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1151 | break; |
1152 | case RISCVVector::BI__builtin_rvv_vfmv_v_f_ta: |
1153 | ID = Intrinsic::riscv_vfmv_v_f; |
1154 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1155 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1156 | break; |
1157 | case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tu: |
1158 | ID = Intrinsic::riscv_vfncvt_f_f_w; |
1159 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1160 | break; |
1161 | case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_ta: |
1162 | ID = Intrinsic::riscv_vfncvt_f_f_w; |
1163 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1164 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1165 | break; |
1166 | case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tuma: |
1167 | ID = Intrinsic::riscv_vfncvt_f_f_w_mask; |
1168 | DefaultPolicy = 2; |
1169 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1170 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1171 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1172 | break; |
1173 | case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tama: |
1174 | ID = Intrinsic::riscv_vfncvt_f_f_w_mask; |
1175 | DefaultPolicy = 3; |
1176 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1177 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1178 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1179 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1180 | break; |
1181 | case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tumu: |
1182 | ID = Intrinsic::riscv_vfncvt_f_f_w_mask; |
1183 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1184 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1185 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1186 | break; |
1187 | case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tamu: |
1188 | ID = Intrinsic::riscv_vfncvt_f_f_w_mask; |
1189 | DefaultPolicy = 1; |
1190 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1191 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1192 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1193 | break; |
1194 | case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tu: |
1195 | ID = Intrinsic::riscv_vfncvt_f_x_w; |
1196 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1197 | break; |
1198 | case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_ta: |
1199 | ID = Intrinsic::riscv_vfncvt_f_x_w; |
1200 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1201 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1202 | break; |
1203 | case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tuma: |
1204 | ID = Intrinsic::riscv_vfncvt_f_x_w_mask; |
1205 | DefaultPolicy = 2; |
1206 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1207 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1208 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1209 | break; |
1210 | case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tama: |
1211 | ID = Intrinsic::riscv_vfncvt_f_x_w_mask; |
1212 | DefaultPolicy = 3; |
1213 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1214 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1215 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1216 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1217 | break; |
1218 | case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tumu: |
1219 | ID = Intrinsic::riscv_vfncvt_f_x_w_mask; |
1220 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1221 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1222 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1223 | break; |
1224 | case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tamu: |
1225 | ID = Intrinsic::riscv_vfncvt_f_x_w_mask; |
1226 | DefaultPolicy = 1; |
1227 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1228 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1229 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1230 | break; |
1231 | case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tu: |
1232 | ID = Intrinsic::riscv_vfncvt_f_xu_w; |
1233 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1234 | break; |
1235 | case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_ta: |
1236 | ID = Intrinsic::riscv_vfncvt_f_xu_w; |
1237 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1238 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1239 | break; |
1240 | case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tuma: |
1241 | ID = Intrinsic::riscv_vfncvt_f_xu_w_mask; |
1242 | DefaultPolicy = 2; |
1243 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1244 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1245 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1246 | break; |
1247 | case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tama: |
1248 | ID = Intrinsic::riscv_vfncvt_f_xu_w_mask; |
1249 | DefaultPolicy = 3; |
1250 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1251 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1252 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1253 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1254 | break; |
1255 | case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tumu: |
1256 | ID = Intrinsic::riscv_vfncvt_f_xu_w_mask; |
1257 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1258 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1259 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1260 | break; |
1261 | case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tamu: |
1262 | ID = Intrinsic::riscv_vfncvt_f_xu_w_mask; |
1263 | DefaultPolicy = 1; |
1264 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1265 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1266 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1267 | break; |
1268 | case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tu: |
1269 | ID = Intrinsic::riscv_vfncvt_rod_f_f_w; |
1270 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1271 | break; |
1272 | case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_ta: |
1273 | ID = Intrinsic::riscv_vfncvt_rod_f_f_w; |
1274 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1275 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1276 | break; |
1277 | case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tuma: |
1278 | ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask; |
1279 | DefaultPolicy = 2; |
1280 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1281 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1282 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1283 | break; |
1284 | case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tama: |
1285 | ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask; |
1286 | DefaultPolicy = 3; |
1287 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1288 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1289 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1290 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1291 | break; |
1292 | case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tumu: |
1293 | ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask; |
1294 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1295 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1296 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1297 | break; |
1298 | case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tamu: |
1299 | ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask; |
1300 | DefaultPolicy = 1; |
1301 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1302 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1303 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1304 | break; |
1305 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tu: |
1306 | ID = Intrinsic::riscv_vfncvt_rtz_x_f_w; |
1307 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1308 | break; |
1309 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_ta: |
1310 | ID = Intrinsic::riscv_vfncvt_rtz_x_f_w; |
1311 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1312 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1313 | break; |
1314 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tuma: |
1315 | ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask; |
1316 | DefaultPolicy = 2; |
1317 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1318 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1319 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1320 | break; |
1321 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tama: |
1322 | ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask; |
1323 | DefaultPolicy = 3; |
1324 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1325 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1326 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1327 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1328 | break; |
1329 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tumu: |
1330 | ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask; |
1331 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1332 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1333 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1334 | break; |
1335 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tamu: |
1336 | ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask; |
1337 | DefaultPolicy = 1; |
1338 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1339 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1340 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1341 | break; |
1342 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tu: |
1343 | ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w; |
1344 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1345 | break; |
1346 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_ta: |
1347 | ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w; |
1348 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1349 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1350 | break; |
1351 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tuma: |
1352 | ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask; |
1353 | DefaultPolicy = 2; |
1354 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1355 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1356 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1357 | break; |
1358 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tama: |
1359 | ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask; |
1360 | DefaultPolicy = 3; |
1361 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1362 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1363 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1364 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1365 | break; |
1366 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tumu: |
1367 | ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask; |
1368 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1369 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1370 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1371 | break; |
1372 | case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tamu: |
1373 | ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask; |
1374 | DefaultPolicy = 1; |
1375 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1376 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1377 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1378 | break; |
1379 | case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tu: |
1380 | ID = Intrinsic::riscv_vfncvt_x_f_w; |
1381 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1382 | break; |
1383 | case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_ta: |
1384 | ID = Intrinsic::riscv_vfncvt_x_f_w; |
1385 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1386 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1387 | break; |
1388 | case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tuma: |
1389 | ID = Intrinsic::riscv_vfncvt_x_f_w_mask; |
1390 | DefaultPolicy = 2; |
1391 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1392 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1393 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1394 | break; |
1395 | case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tama: |
1396 | ID = Intrinsic::riscv_vfncvt_x_f_w_mask; |
1397 | DefaultPolicy = 3; |
1398 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1399 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1400 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1401 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1402 | break; |
1403 | case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tumu: |
1404 | ID = Intrinsic::riscv_vfncvt_x_f_w_mask; |
1405 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1406 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1407 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1408 | break; |
1409 | case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tamu: |
1410 | ID = Intrinsic::riscv_vfncvt_x_f_w_mask; |
1411 | DefaultPolicy = 1; |
1412 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1413 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1414 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1415 | break; |
1416 | case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tu: |
1417 | ID = Intrinsic::riscv_vfncvt_xu_f_w; |
1418 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1419 | break; |
1420 | case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_ta: |
1421 | ID = Intrinsic::riscv_vfncvt_xu_f_w; |
1422 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1423 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1424 | break; |
1425 | case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tuma: |
1426 | ID = Intrinsic::riscv_vfncvt_xu_f_w_mask; |
1427 | DefaultPolicy = 2; |
1428 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1429 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1430 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1431 | break; |
1432 | case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tama: |
1433 | ID = Intrinsic::riscv_vfncvt_xu_f_w_mask; |
1434 | DefaultPolicy = 3; |
1435 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1436 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1437 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1438 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1439 | break; |
1440 | case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tumu: |
1441 | ID = Intrinsic::riscv_vfncvt_xu_f_w_mask; |
1442 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1443 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1444 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1445 | break; |
1446 | case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tamu: |
1447 | ID = Intrinsic::riscv_vfncvt_xu_f_w_mask; |
1448 | DefaultPolicy = 1; |
1449 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1450 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1451 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1452 | break; |
1453 | case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tu: |
1454 | case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tu: |
1455 | ID = Intrinsic::riscv_vfnmacc; |
1456 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1457 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1458 | break; |
1459 | case RISCVVector::BI__builtin_rvv_vfnmacc_vv_ta: |
1460 | case RISCVVector::BI__builtin_rvv_vfnmacc_vf_ta: |
1461 | ID = Intrinsic::riscv_vfnmacc; |
1462 | DefaultPolicy = 1; |
1463 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1464 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1465 | break; |
1466 | case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tuma: |
1467 | case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tuma: |
1468 | ID = Intrinsic::riscv_vfnmacc_mask; |
1469 | DefaultPolicy = 2; |
1470 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1471 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1472 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1473 | break; |
1474 | case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tama: |
1475 | case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tama: |
1476 | ID = Intrinsic::riscv_vfnmacc_mask; |
1477 | DefaultPolicy = 3; |
1478 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1479 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1480 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1481 | break; |
1482 | case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tumu: |
1483 | case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tumu: |
1484 | ID = Intrinsic::riscv_vfnmacc_mask; |
1485 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1486 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1487 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1488 | break; |
1489 | case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tamu: |
1490 | case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tamu: |
1491 | ID = Intrinsic::riscv_vfnmacc_mask; |
1492 | DefaultPolicy = 1; |
1493 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1494 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1495 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1496 | break; |
1497 | case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tu: |
1498 | case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tu: |
1499 | ID = Intrinsic::riscv_vfnmadd; |
1500 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1501 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1502 | break; |
1503 | case RISCVVector::BI__builtin_rvv_vfnmadd_vv_ta: |
1504 | case RISCVVector::BI__builtin_rvv_vfnmadd_vf_ta: |
1505 | ID = Intrinsic::riscv_vfnmadd; |
1506 | DefaultPolicy = 1; |
1507 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1508 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1509 | break; |
1510 | case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tuma: |
1511 | case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tuma: |
1512 | ID = Intrinsic::riscv_vfnmadd_mask; |
1513 | DefaultPolicy = 2; |
1514 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1515 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1516 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1517 | break; |
1518 | case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tama: |
1519 | case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tama: |
1520 | ID = Intrinsic::riscv_vfnmadd_mask; |
1521 | DefaultPolicy = 3; |
1522 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1523 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1524 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1525 | break; |
1526 | case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tumu: |
1527 | case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tumu: |
1528 | ID = Intrinsic::riscv_vfnmadd_mask; |
1529 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1530 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1531 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1532 | break; |
1533 | case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tamu: |
1534 | case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tamu: |
1535 | ID = Intrinsic::riscv_vfnmadd_mask; |
1536 | DefaultPolicy = 1; |
1537 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1538 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1539 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1540 | break; |
1541 | case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tu: |
1542 | case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tu: |
1543 | ID = Intrinsic::riscv_vfnmsac; |
1544 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1545 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1546 | break; |
1547 | case RISCVVector::BI__builtin_rvv_vfnmsac_vv_ta: |
1548 | case RISCVVector::BI__builtin_rvv_vfnmsac_vf_ta: |
1549 | ID = Intrinsic::riscv_vfnmsac; |
1550 | DefaultPolicy = 1; |
1551 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1552 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1553 | break; |
1554 | case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tuma: |
1555 | case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tuma: |
1556 | ID = Intrinsic::riscv_vfnmsac_mask; |
1557 | DefaultPolicy = 2; |
1558 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1559 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1560 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1561 | break; |
1562 | case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tama: |
1563 | case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tama: |
1564 | ID = Intrinsic::riscv_vfnmsac_mask; |
1565 | DefaultPolicy = 3; |
1566 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1567 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1568 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1569 | break; |
1570 | case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tumu: |
1571 | case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tumu: |
1572 | ID = Intrinsic::riscv_vfnmsac_mask; |
1573 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1574 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1575 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1576 | break; |
1577 | case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tamu: |
1578 | case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tamu: |
1579 | ID = Intrinsic::riscv_vfnmsac_mask; |
1580 | DefaultPolicy = 1; |
1581 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1582 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1583 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1584 | break; |
1585 | case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tu: |
1586 | case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tu: |
1587 | ID = Intrinsic::riscv_vfnmsub; |
1588 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1589 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1590 | break; |
1591 | case RISCVVector::BI__builtin_rvv_vfnmsub_vv_ta: |
1592 | case RISCVVector::BI__builtin_rvv_vfnmsub_vf_ta: |
1593 | ID = Intrinsic::riscv_vfnmsub; |
1594 | DefaultPolicy = 1; |
1595 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1596 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1597 | break; |
1598 | case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tuma: |
1599 | case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tuma: |
1600 | ID = Intrinsic::riscv_vfnmsub_mask; |
1601 | DefaultPolicy = 2; |
1602 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1603 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1604 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1605 | break; |
1606 | case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tama: |
1607 | case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tama: |
1608 | ID = Intrinsic::riscv_vfnmsub_mask; |
1609 | DefaultPolicy = 3; |
1610 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1611 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1612 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1613 | break; |
1614 | case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tumu: |
1615 | case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tumu: |
1616 | ID = Intrinsic::riscv_vfnmsub_mask; |
1617 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1618 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1619 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1620 | break; |
1621 | case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tamu: |
1622 | case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tamu: |
1623 | ID = Intrinsic::riscv_vfnmsub_mask; |
1624 | DefaultPolicy = 1; |
1625 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1626 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1627 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1628 | break; |
1629 | case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tu: |
1630 | ID = Intrinsic::riscv_vfrdiv; |
1631 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1632 | break; |
1633 | case RISCVVector::BI__builtin_rvv_vfrdiv_vf_ta: |
1634 | ID = Intrinsic::riscv_vfrdiv; |
1635 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1636 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1637 | break; |
1638 | case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tuma: |
1639 | ID = Intrinsic::riscv_vfrdiv_mask; |
1640 | DefaultPolicy = 2; |
1641 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1642 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1643 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1644 | break; |
1645 | case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tama: |
1646 | ID = Intrinsic::riscv_vfrdiv_mask; |
1647 | DefaultPolicy = 3; |
1648 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1649 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1650 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1651 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1652 | break; |
1653 | case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tumu: |
1654 | ID = Intrinsic::riscv_vfrdiv_mask; |
1655 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1656 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1657 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1658 | break; |
1659 | case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tamu: |
1660 | ID = Intrinsic::riscv_vfrdiv_mask; |
1661 | DefaultPolicy = 1; |
1662 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1663 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1664 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1665 | break; |
1666 | case RISCVVector::BI__builtin_rvv_vfrec7_v_tu: |
1667 | ID = Intrinsic::riscv_vfrec7; |
1668 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1669 | break; |
1670 | case RISCVVector::BI__builtin_rvv_vfrec7_v_ta: |
1671 | ID = Intrinsic::riscv_vfrec7; |
1672 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1673 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1674 | break; |
1675 | case RISCVVector::BI__builtin_rvv_vfrec7_v_tuma: |
1676 | ID = Intrinsic::riscv_vfrec7_mask; |
1677 | DefaultPolicy = 2; |
1678 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1679 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1680 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1681 | break; |
1682 | case RISCVVector::BI__builtin_rvv_vfrec7_v_tama: |
1683 | ID = Intrinsic::riscv_vfrec7_mask; |
1684 | DefaultPolicy = 3; |
1685 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1686 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1687 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1688 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1689 | break; |
1690 | case RISCVVector::BI__builtin_rvv_vfrec7_v_tumu: |
1691 | ID = Intrinsic::riscv_vfrec7_mask; |
1692 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1693 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1694 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1695 | break; |
1696 | case RISCVVector::BI__builtin_rvv_vfrec7_v_tamu: |
1697 | ID = Intrinsic::riscv_vfrec7_mask; |
1698 | DefaultPolicy = 1; |
1699 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1700 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1701 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1702 | break; |
1703 | case RISCVVector::BI__builtin_rvv_vfredmax_vs_tu: |
1704 | ID = Intrinsic::riscv_vfredmax; |
1705 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1706 | break; |
1707 | case RISCVVector::BI__builtin_rvv_vfredmax_vs_ta: |
1708 | ID = Intrinsic::riscv_vfredmax; |
1709 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1710 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1711 | break; |
1712 | case RISCVVector::BI__builtin_rvv_vfredmax_vs_tum: |
1713 | ID = Intrinsic::riscv_vfredmax_mask; |
1714 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1715 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1716 | break; |
1717 | case RISCVVector::BI__builtin_rvv_vfredmax_vs_tam: |
1718 | ID = Intrinsic::riscv_vfredmax_mask; |
1719 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1720 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1721 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1722 | break; |
1723 | case RISCVVector::BI__builtin_rvv_vfredmax_vs_tumu: |
1724 | ID = Intrinsic::riscv_vfredmax_mask; |
1725 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1726 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1727 | break; |
1728 | case RISCVVector::BI__builtin_rvv_vfredmin_vs_tu: |
1729 | ID = Intrinsic::riscv_vfredmin; |
1730 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1731 | break; |
1732 | case RISCVVector::BI__builtin_rvv_vfredmin_vs_ta: |
1733 | ID = Intrinsic::riscv_vfredmin; |
1734 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1735 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1736 | break; |
1737 | case RISCVVector::BI__builtin_rvv_vfredmin_vs_tum: |
1738 | ID = Intrinsic::riscv_vfredmin_mask; |
1739 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1740 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1741 | break; |
1742 | case RISCVVector::BI__builtin_rvv_vfredmin_vs_tam: |
1743 | ID = Intrinsic::riscv_vfredmin_mask; |
1744 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1745 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1746 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1747 | break; |
1748 | case RISCVVector::BI__builtin_rvv_vfredmin_vs_tumu: |
1749 | ID = Intrinsic::riscv_vfredmin_mask; |
1750 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1751 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1752 | break; |
1753 | case RISCVVector::BI__builtin_rvv_vfredosum_vs_tu: |
1754 | ID = Intrinsic::riscv_vfredosum; |
1755 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1756 | break; |
1757 | case RISCVVector::BI__builtin_rvv_vfredosum_vs_ta: |
1758 | ID = Intrinsic::riscv_vfredosum; |
1759 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1760 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1761 | break; |
1762 | case RISCVVector::BI__builtin_rvv_vfredosum_vs_tum: |
1763 | ID = Intrinsic::riscv_vfredosum_mask; |
1764 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1765 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1766 | break; |
1767 | case RISCVVector::BI__builtin_rvv_vfredosum_vs_tam: |
1768 | ID = Intrinsic::riscv_vfredosum_mask; |
1769 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1770 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1771 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1772 | break; |
1773 | case RISCVVector::BI__builtin_rvv_vfredosum_vs_tumu: |
1774 | ID = Intrinsic::riscv_vfredosum_mask; |
1775 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1776 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1777 | break; |
1778 | case RISCVVector::BI__builtin_rvv_vfredusum_vs_tu: |
1779 | ID = Intrinsic::riscv_vfredusum; |
1780 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1781 | break; |
1782 | case RISCVVector::BI__builtin_rvv_vfredusum_vs_ta: |
1783 | ID = Intrinsic::riscv_vfredusum; |
1784 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1785 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1786 | break; |
1787 | case RISCVVector::BI__builtin_rvv_vfredusum_vs_tum: |
1788 | ID = Intrinsic::riscv_vfredusum_mask; |
1789 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1790 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1791 | break; |
1792 | case RISCVVector::BI__builtin_rvv_vfredusum_vs_tam: |
1793 | ID = Intrinsic::riscv_vfredusum_mask; |
1794 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1795 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1796 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1797 | break; |
1798 | case RISCVVector::BI__builtin_rvv_vfredusum_vs_tumu: |
1799 | ID = Intrinsic::riscv_vfredusum_mask; |
1800 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1801 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
1802 | break; |
1803 | case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tu: |
1804 | ID = Intrinsic::riscv_vfrsqrt7; |
1805 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1806 | break; |
1807 | case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_ta: |
1808 | ID = Intrinsic::riscv_vfrsqrt7; |
1809 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1810 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1811 | break; |
1812 | case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tuma: |
1813 | ID = Intrinsic::riscv_vfrsqrt7_mask; |
1814 | DefaultPolicy = 2; |
1815 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1816 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1817 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1818 | break; |
1819 | case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tama: |
1820 | ID = Intrinsic::riscv_vfrsqrt7_mask; |
1821 | DefaultPolicy = 3; |
1822 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1823 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1824 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1825 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1826 | break; |
1827 | case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tumu: |
1828 | ID = Intrinsic::riscv_vfrsqrt7_mask; |
1829 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1830 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1831 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1832 | break; |
1833 | case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tamu: |
1834 | ID = Intrinsic::riscv_vfrsqrt7_mask; |
1835 | DefaultPolicy = 1; |
1836 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1837 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1838 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
1839 | break; |
1840 | case RISCVVector::BI__builtin_rvv_vfrsub_vf_tu: |
1841 | ID = Intrinsic::riscv_vfrsub; |
1842 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1843 | break; |
1844 | case RISCVVector::BI__builtin_rvv_vfrsub_vf_ta: |
1845 | ID = Intrinsic::riscv_vfrsub; |
1846 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1847 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1848 | break; |
1849 | case RISCVVector::BI__builtin_rvv_vfrsub_vf_tuma: |
1850 | ID = Intrinsic::riscv_vfrsub_mask; |
1851 | DefaultPolicy = 2; |
1852 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1853 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1854 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1855 | break; |
1856 | case RISCVVector::BI__builtin_rvv_vfrsub_vf_tama: |
1857 | ID = Intrinsic::riscv_vfrsub_mask; |
1858 | DefaultPolicy = 3; |
1859 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1860 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1861 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1862 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1863 | break; |
1864 | case RISCVVector::BI__builtin_rvv_vfrsub_vf_tumu: |
1865 | ID = Intrinsic::riscv_vfrsub_mask; |
1866 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1867 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1868 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1869 | break; |
1870 | case RISCVVector::BI__builtin_rvv_vfrsub_vf_tamu: |
1871 | ID = Intrinsic::riscv_vfrsub_mask; |
1872 | DefaultPolicy = 1; |
1873 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1874 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1875 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1876 | break; |
1877 | case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tu: |
1878 | case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tu: |
1879 | ID = Intrinsic::riscv_vfsgnj; |
1880 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1881 | break; |
1882 | case RISCVVector::BI__builtin_rvv_vfsgnj_vv_ta: |
1883 | case RISCVVector::BI__builtin_rvv_vfsgnj_vf_ta: |
1884 | ID = Intrinsic::riscv_vfsgnj; |
1885 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1886 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1887 | break; |
1888 | case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tuma: |
1889 | case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tuma: |
1890 | ID = Intrinsic::riscv_vfsgnj_mask; |
1891 | DefaultPolicy = 2; |
1892 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1893 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1894 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1895 | break; |
1896 | case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tama: |
1897 | case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tama: |
1898 | ID = Intrinsic::riscv_vfsgnj_mask; |
1899 | DefaultPolicy = 3; |
1900 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1901 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1902 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1903 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1904 | break; |
1905 | case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tumu: |
1906 | case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tumu: |
1907 | ID = Intrinsic::riscv_vfsgnj_mask; |
1908 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1909 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1910 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1911 | break; |
1912 | case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tamu: |
1913 | case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tamu: |
1914 | ID = Intrinsic::riscv_vfsgnj_mask; |
1915 | DefaultPolicy = 1; |
1916 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1917 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1918 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1919 | break; |
1920 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tu: |
1921 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tu: |
1922 | ID = Intrinsic::riscv_vfsgnjn; |
1923 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1924 | break; |
1925 | case RISCVVector::BI__builtin_rvv_vfneg_v_tu: |
1926 | ID = Intrinsic::riscv_vfsgnjn; |
1927 | DefaultPolicy = 0; |
1928 | |
1929 | { |
1930 | if (DefaultPolicy == TAIL_AGNOSTIC) |
1931 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
1932 | // op1, po2, vl |
1933 | IntrinsicTypes = {ResultType, |
1934 | Ops[1]->getType(), Ops[2]->getType()}; |
1935 | Ops.insert(Ops.begin() + 2, Ops[1]); |
1936 | break; |
1937 | } |
1938 | break; |
1939 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_ta: |
1940 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_ta: |
1941 | ID = Intrinsic::riscv_vfsgnjn; |
1942 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1943 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1944 | break; |
1945 | case RISCVVector::BI__builtin_rvv_vfneg_v_ta: |
1946 | ID = Intrinsic::riscv_vfsgnjn; |
1947 | DefaultPolicy = 1; |
1948 | |
1949 | { |
1950 | if (DefaultPolicy == TAIL_AGNOSTIC) |
1951 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
1952 | // op1, po2, vl |
1953 | IntrinsicTypes = {ResultType, |
1954 | Ops[1]->getType(), Ops[2]->getType()}; |
1955 | Ops.insert(Ops.begin() + 2, Ops[1]); |
1956 | break; |
1957 | } |
1958 | break; |
1959 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tuma: |
1960 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tuma: |
1961 | ID = Intrinsic::riscv_vfsgnjn_mask; |
1962 | DefaultPolicy = 2; |
1963 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1964 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1965 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1966 | break; |
1967 | case RISCVVector::BI__builtin_rvv_vfneg_v_tuma: |
1968 | ID = Intrinsic::riscv_vfsgnjn_mask; |
1969 | DefaultPolicy = 2; |
1970 | |
1971 | { |
1972 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1973 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
1974 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
1975 | Ops.insert(Ops.begin() + 2, Ops[1]); |
1976 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1977 | // maskedoff, op1, op2, mask, vl |
1978 | IntrinsicTypes = {ResultType, |
1979 | Ops[2]->getType(), |
1980 | Ops.back()->getType()}; |
1981 | break; |
1982 | } |
1983 | break; |
1984 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tama: |
1985 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tama: |
1986 | ID = Intrinsic::riscv_vfsgnjn_mask; |
1987 | DefaultPolicy = 3; |
1988 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1989 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
1990 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
1991 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
1992 | break; |
1993 | case RISCVVector::BI__builtin_rvv_vfneg_v_tama: |
1994 | ID = Intrinsic::riscv_vfsgnjn_mask; |
1995 | DefaultPolicy = 3; |
1996 | |
1997 | { |
1998 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
1999 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2000 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2001 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2002 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2003 | // maskedoff, op1, op2, mask, vl |
2004 | IntrinsicTypes = {ResultType, |
2005 | Ops[2]->getType(), |
2006 | Ops.back()->getType()}; |
2007 | break; |
2008 | } |
2009 | break; |
2010 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tumu: |
2011 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tumu: |
2012 | ID = Intrinsic::riscv_vfsgnjn_mask; |
2013 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2014 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2015 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2016 | break; |
2017 | case RISCVVector::BI__builtin_rvv_vfneg_v_tumu: |
2018 | ID = Intrinsic::riscv_vfsgnjn_mask; |
2019 | DefaultPolicy = 0; |
2020 | |
2021 | { |
2022 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2023 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2024 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2025 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2026 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2027 | // maskedoff, op1, op2, mask, vl |
2028 | IntrinsicTypes = {ResultType, |
2029 | Ops[2]->getType(), |
2030 | Ops.back()->getType()}; |
2031 | break; |
2032 | } |
2033 | break; |
2034 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tamu: |
2035 | case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tamu: |
2036 | ID = Intrinsic::riscv_vfsgnjn_mask; |
2037 | DefaultPolicy = 1; |
2038 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2039 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2040 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2041 | break; |
2042 | case RISCVVector::BI__builtin_rvv_vfneg_v_tamu: |
2043 | ID = Intrinsic::riscv_vfsgnjn_mask; |
2044 | DefaultPolicy = 1; |
2045 | |
2046 | { |
2047 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2048 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2049 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2050 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2051 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2052 | // maskedoff, op1, op2, mask, vl |
2053 | IntrinsicTypes = {ResultType, |
2054 | Ops[2]->getType(), |
2055 | Ops.back()->getType()}; |
2056 | break; |
2057 | } |
2058 | break; |
2059 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tu: |
2060 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tu: |
2061 | ID = Intrinsic::riscv_vfsgnjx; |
2062 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2063 | break; |
2064 | case RISCVVector::BI__builtin_rvv_vfabs_v_tu: |
2065 | ID = Intrinsic::riscv_vfsgnjx; |
2066 | DefaultPolicy = 0; |
2067 | |
2068 | { |
2069 | if (DefaultPolicy == TAIL_AGNOSTIC) |
2070 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2071 | // op1, po2, vl |
2072 | IntrinsicTypes = {ResultType, |
2073 | Ops[1]->getType(), Ops[2]->getType()}; |
2074 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2075 | break; |
2076 | } |
2077 | break; |
2078 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_ta: |
2079 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_ta: |
2080 | ID = Intrinsic::riscv_vfsgnjx; |
2081 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2082 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2083 | break; |
2084 | case RISCVVector::BI__builtin_rvv_vfabs_v_ta: |
2085 | ID = Intrinsic::riscv_vfsgnjx; |
2086 | DefaultPolicy = 1; |
2087 | |
2088 | { |
2089 | if (DefaultPolicy == TAIL_AGNOSTIC) |
2090 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2091 | // op1, po2, vl |
2092 | IntrinsicTypes = {ResultType, |
2093 | Ops[1]->getType(), Ops[2]->getType()}; |
2094 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2095 | break; |
2096 | } |
2097 | break; |
2098 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tuma: |
2099 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tuma: |
2100 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2101 | DefaultPolicy = 2; |
2102 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2103 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2104 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2105 | break; |
2106 | case RISCVVector::BI__builtin_rvv_vfabs_v_tuma: |
2107 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2108 | DefaultPolicy = 2; |
2109 | |
2110 | { |
2111 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2112 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2113 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2114 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2115 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2116 | // maskedoff, op1, op2, mask, vl |
2117 | IntrinsicTypes = {ResultType, |
2118 | Ops[2]->getType(), |
2119 | Ops.back()->getType()}; |
2120 | break; |
2121 | } |
2122 | break; |
2123 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tama: |
2124 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tama: |
2125 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2126 | DefaultPolicy = 3; |
2127 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2128 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2129 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2130 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2131 | break; |
2132 | case RISCVVector::BI__builtin_rvv_vfabs_v_tama: |
2133 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2134 | DefaultPolicy = 3; |
2135 | |
2136 | { |
2137 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2138 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2139 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2140 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2141 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2142 | // maskedoff, op1, op2, mask, vl |
2143 | IntrinsicTypes = {ResultType, |
2144 | Ops[2]->getType(), |
2145 | Ops.back()->getType()}; |
2146 | break; |
2147 | } |
2148 | break; |
2149 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tumu: |
2150 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tumu: |
2151 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2152 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2153 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2154 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2155 | break; |
2156 | case RISCVVector::BI__builtin_rvv_vfabs_v_tumu: |
2157 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2158 | DefaultPolicy = 0; |
2159 | |
2160 | { |
2161 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2162 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2163 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2164 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2165 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2166 | // maskedoff, op1, op2, mask, vl |
2167 | IntrinsicTypes = {ResultType, |
2168 | Ops[2]->getType(), |
2169 | Ops.back()->getType()}; |
2170 | break; |
2171 | } |
2172 | break; |
2173 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tamu: |
2174 | case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tamu: |
2175 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2176 | DefaultPolicy = 1; |
2177 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2178 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2179 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2180 | break; |
2181 | case RISCVVector::BI__builtin_rvv_vfabs_v_tamu: |
2182 | ID = Intrinsic::riscv_vfsgnjx_mask; |
2183 | DefaultPolicy = 1; |
2184 | |
2185 | { |
2186 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2187 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
2188 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
2189 | Ops.insert(Ops.begin() + 2, Ops[1]); |
2190 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2191 | // maskedoff, op1, op2, mask, vl |
2192 | IntrinsicTypes = {ResultType, |
2193 | Ops[2]->getType(), |
2194 | Ops.back()->getType()}; |
2195 | break; |
2196 | } |
2197 | break; |
2198 | case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tu: |
2199 | ID = Intrinsic::riscv_vfslide1down; |
2200 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2201 | break; |
2202 | case RISCVVector::BI__builtin_rvv_vfslide1down_vf_ta: |
2203 | ID = Intrinsic::riscv_vfslide1down; |
2204 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2205 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2206 | break; |
2207 | case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tuma: |
2208 | ID = Intrinsic::riscv_vfslide1down_mask; |
2209 | DefaultPolicy = 2; |
2210 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2211 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2212 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2213 | break; |
2214 | case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tama: |
2215 | ID = Intrinsic::riscv_vfslide1down_mask; |
2216 | DefaultPolicy = 3; |
2217 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2218 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2219 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2220 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2221 | break; |
2222 | case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tumu: |
2223 | ID = Intrinsic::riscv_vfslide1down_mask; |
2224 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2225 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2226 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2227 | break; |
2228 | case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tamu: |
2229 | ID = Intrinsic::riscv_vfslide1down_mask; |
2230 | DefaultPolicy = 1; |
2231 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2232 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2233 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2234 | break; |
2235 | case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tu: |
2236 | ID = Intrinsic::riscv_vfslide1up; |
2237 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2238 | break; |
2239 | case RISCVVector::BI__builtin_rvv_vfslide1up_vf_ta: |
2240 | ID = Intrinsic::riscv_vfslide1up; |
2241 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2242 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2243 | break; |
2244 | case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tuma: |
2245 | ID = Intrinsic::riscv_vfslide1up_mask; |
2246 | DefaultPolicy = 2; |
2247 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2248 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2249 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2250 | break; |
2251 | case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tama: |
2252 | ID = Intrinsic::riscv_vfslide1up_mask; |
2253 | DefaultPolicy = 3; |
2254 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2255 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2256 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2257 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2258 | break; |
2259 | case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tumu: |
2260 | ID = Intrinsic::riscv_vfslide1up_mask; |
2261 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2262 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2263 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2264 | break; |
2265 | case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tamu: |
2266 | ID = Intrinsic::riscv_vfslide1up_mask; |
2267 | DefaultPolicy = 1; |
2268 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2269 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2270 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2271 | break; |
2272 | case RISCVVector::BI__builtin_rvv_vfsqrt_v_tu: |
2273 | ID = Intrinsic::riscv_vfsqrt; |
2274 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
2275 | break; |
2276 | case RISCVVector::BI__builtin_rvv_vfsqrt_v_ta: |
2277 | ID = Intrinsic::riscv_vfsqrt; |
2278 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2279 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
2280 | break; |
2281 | case RISCVVector::BI__builtin_rvv_vfsqrt_v_tuma: |
2282 | ID = Intrinsic::riscv_vfsqrt_mask; |
2283 | DefaultPolicy = 2; |
2284 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2285 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2286 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
2287 | break; |
2288 | case RISCVVector::BI__builtin_rvv_vfsqrt_v_tama: |
2289 | ID = Intrinsic::riscv_vfsqrt_mask; |
2290 | DefaultPolicy = 3; |
2291 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2292 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2293 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2294 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
2295 | break; |
2296 | case RISCVVector::BI__builtin_rvv_vfsqrt_v_tumu: |
2297 | ID = Intrinsic::riscv_vfsqrt_mask; |
2298 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2299 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2300 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
2301 | break; |
2302 | case RISCVVector::BI__builtin_rvv_vfsqrt_v_tamu: |
2303 | ID = Intrinsic::riscv_vfsqrt_mask; |
2304 | DefaultPolicy = 1; |
2305 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2306 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2307 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
2308 | break; |
2309 | case RISCVVector::BI__builtin_rvv_vfsub_vv_tu: |
2310 | case RISCVVector::BI__builtin_rvv_vfsub_vf_tu: |
2311 | ID = Intrinsic::riscv_vfsub; |
2312 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2313 | break; |
2314 | case RISCVVector::BI__builtin_rvv_vfsub_vv_ta: |
2315 | case RISCVVector::BI__builtin_rvv_vfsub_vf_ta: |
2316 | ID = Intrinsic::riscv_vfsub; |
2317 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2318 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2319 | break; |
2320 | case RISCVVector::BI__builtin_rvv_vfsub_vv_tuma: |
2321 | case RISCVVector::BI__builtin_rvv_vfsub_vf_tuma: |
2322 | ID = Intrinsic::riscv_vfsub_mask; |
2323 | DefaultPolicy = 2; |
2324 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2325 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2326 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2327 | break; |
2328 | case RISCVVector::BI__builtin_rvv_vfsub_vv_tama: |
2329 | case RISCVVector::BI__builtin_rvv_vfsub_vf_tama: |
2330 | ID = Intrinsic::riscv_vfsub_mask; |
2331 | DefaultPolicy = 3; |
2332 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2333 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2334 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2335 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2336 | break; |
2337 | case RISCVVector::BI__builtin_rvv_vfsub_vv_tumu: |
2338 | case RISCVVector::BI__builtin_rvv_vfsub_vf_tumu: |
2339 | ID = Intrinsic::riscv_vfsub_mask; |
2340 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2341 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2342 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2343 | break; |
2344 | case RISCVVector::BI__builtin_rvv_vfsub_vv_tamu: |
2345 | case RISCVVector::BI__builtin_rvv_vfsub_vf_tamu: |
2346 | ID = Intrinsic::riscv_vfsub_mask; |
2347 | DefaultPolicy = 1; |
2348 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2349 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2350 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2351 | break; |
2352 | case RISCVVector::BI__builtin_rvv_vfwadd_vv_tu: |
2353 | case RISCVVector::BI__builtin_rvv_vfwadd_vf_tu: |
2354 | ID = Intrinsic::riscv_vfwadd; |
2355 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2356 | break; |
2357 | case RISCVVector::BI__builtin_rvv_vfwadd_vv_ta: |
2358 | case RISCVVector::BI__builtin_rvv_vfwadd_vf_ta: |
2359 | ID = Intrinsic::riscv_vfwadd; |
2360 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2361 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2362 | break; |
2363 | case RISCVVector::BI__builtin_rvv_vfwadd_vv_tuma: |
2364 | case RISCVVector::BI__builtin_rvv_vfwadd_vf_tuma: |
2365 | ID = Intrinsic::riscv_vfwadd_mask; |
2366 | DefaultPolicy = 2; |
2367 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2368 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2369 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2370 | break; |
2371 | case RISCVVector::BI__builtin_rvv_vfwadd_vv_tama: |
2372 | case RISCVVector::BI__builtin_rvv_vfwadd_vf_tama: |
2373 | ID = Intrinsic::riscv_vfwadd_mask; |
2374 | DefaultPolicy = 3; |
2375 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2376 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2377 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2378 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2379 | break; |
2380 | case RISCVVector::BI__builtin_rvv_vfwadd_vv_tumu: |
2381 | case RISCVVector::BI__builtin_rvv_vfwadd_vf_tumu: |
2382 | ID = Intrinsic::riscv_vfwadd_mask; |
2383 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2384 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2385 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2386 | break; |
2387 | case RISCVVector::BI__builtin_rvv_vfwadd_vv_tamu: |
2388 | case RISCVVector::BI__builtin_rvv_vfwadd_vf_tamu: |
2389 | ID = Intrinsic::riscv_vfwadd_mask; |
2390 | DefaultPolicy = 1; |
2391 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2392 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2393 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2394 | break; |
2395 | case RISCVVector::BI__builtin_rvv_vfwadd_wv_tu: |
2396 | case RISCVVector::BI__builtin_rvv_vfwadd_wf_tu: |
2397 | ID = Intrinsic::riscv_vfwadd_w; |
2398 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2399 | break; |
2400 | case RISCVVector::BI__builtin_rvv_vfwadd_wv_ta: |
2401 | case RISCVVector::BI__builtin_rvv_vfwadd_wf_ta: |
2402 | ID = Intrinsic::riscv_vfwadd_w; |
2403 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2404 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2405 | break; |
2406 | case RISCVVector::BI__builtin_rvv_vfwadd_wv_tuma: |
2407 | case RISCVVector::BI__builtin_rvv_vfwadd_wf_tuma: |
2408 | ID = Intrinsic::riscv_vfwadd_w_mask; |
2409 | DefaultPolicy = 2; |
2410 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2411 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2412 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2413 | break; |
2414 | case RISCVVector::BI__builtin_rvv_vfwadd_wv_tama: |
2415 | case RISCVVector::BI__builtin_rvv_vfwadd_wf_tama: |
2416 | ID = Intrinsic::riscv_vfwadd_w_mask; |
2417 | DefaultPolicy = 3; |
2418 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2419 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2420 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2421 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2422 | break; |
2423 | case RISCVVector::BI__builtin_rvv_vfwadd_wv_tumu: |
2424 | case RISCVVector::BI__builtin_rvv_vfwadd_wf_tumu: |
2425 | ID = Intrinsic::riscv_vfwadd_w_mask; |
2426 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2427 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2428 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2429 | break; |
2430 | case RISCVVector::BI__builtin_rvv_vfwadd_wv_tamu: |
2431 | case RISCVVector::BI__builtin_rvv_vfwadd_wf_tamu: |
2432 | ID = Intrinsic::riscv_vfwadd_w_mask; |
2433 | DefaultPolicy = 1; |
2434 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2435 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2436 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
2437 | break; |
2438 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tu: |
2439 | ID = Intrinsic::riscv_vfwcvt_f_f_v; |
2440 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2441 | break; |
2442 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_ta: |
2443 | ID = Intrinsic::riscv_vfwcvt_f_f_v; |
2444 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2445 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2446 | break; |
2447 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tuma: |
2448 | ID = Intrinsic::riscv_vfwcvt_f_f_v_mask; |
2449 | DefaultPolicy = 2; |
2450 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2451 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2452 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2453 | break; |
2454 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tama: |
2455 | ID = Intrinsic::riscv_vfwcvt_f_f_v_mask; |
2456 | DefaultPolicy = 3; |
2457 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2458 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2459 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2460 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2461 | break; |
2462 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tumu: |
2463 | ID = Intrinsic::riscv_vfwcvt_f_f_v_mask; |
2464 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2465 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2466 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2467 | break; |
2468 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tamu: |
2469 | ID = Intrinsic::riscv_vfwcvt_f_f_v_mask; |
2470 | DefaultPolicy = 1; |
2471 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2472 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2473 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2474 | break; |
2475 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tu: |
2476 | ID = Intrinsic::riscv_vfwcvt_f_x_v; |
2477 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2478 | break; |
2479 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_ta: |
2480 | ID = Intrinsic::riscv_vfwcvt_f_x_v; |
2481 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2482 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2483 | break; |
2484 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tuma: |
2485 | ID = Intrinsic::riscv_vfwcvt_f_x_v_mask; |
2486 | DefaultPolicy = 2; |
2487 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2488 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2489 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2490 | break; |
2491 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tama: |
2492 | ID = Intrinsic::riscv_vfwcvt_f_x_v_mask; |
2493 | DefaultPolicy = 3; |
2494 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2495 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2496 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2497 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2498 | break; |
2499 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tumu: |
2500 | ID = Intrinsic::riscv_vfwcvt_f_x_v_mask; |
2501 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2502 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2503 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2504 | break; |
2505 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tamu: |
2506 | ID = Intrinsic::riscv_vfwcvt_f_x_v_mask; |
2507 | DefaultPolicy = 1; |
2508 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2509 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2510 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2511 | break; |
2512 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tu: |
2513 | ID = Intrinsic::riscv_vfwcvt_f_xu_v; |
2514 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2515 | break; |
2516 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_ta: |
2517 | ID = Intrinsic::riscv_vfwcvt_f_xu_v; |
2518 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2519 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2520 | break; |
2521 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tuma: |
2522 | ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask; |
2523 | DefaultPolicy = 2; |
2524 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2525 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2526 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2527 | break; |
2528 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tama: |
2529 | ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask; |
2530 | DefaultPolicy = 3; |
2531 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2532 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2533 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2534 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2535 | break; |
2536 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tumu: |
2537 | ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask; |
2538 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2539 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2540 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2541 | break; |
2542 | case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tamu: |
2543 | ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask; |
2544 | DefaultPolicy = 1; |
2545 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2546 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2547 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2548 | break; |
2549 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tu: |
2550 | ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v; |
2551 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2552 | break; |
2553 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_ta: |
2554 | ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v; |
2555 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2556 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2557 | break; |
2558 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tuma: |
2559 | ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask; |
2560 | DefaultPolicy = 2; |
2561 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2562 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2563 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2564 | break; |
2565 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tama: |
2566 | ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask; |
2567 | DefaultPolicy = 3; |
2568 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2569 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2570 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2571 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2572 | break; |
2573 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tumu: |
2574 | ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask; |
2575 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2576 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2577 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2578 | break; |
2579 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tamu: |
2580 | ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask; |
2581 | DefaultPolicy = 1; |
2582 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2583 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2584 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2585 | break; |
2586 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tu: |
2587 | ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v; |
2588 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2589 | break; |
2590 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_ta: |
2591 | ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v; |
2592 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2593 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2594 | break; |
2595 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tuma: |
2596 | ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask; |
2597 | DefaultPolicy = 2; |
2598 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2599 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2600 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2601 | break; |
2602 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tama: |
2603 | ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask; |
2604 | DefaultPolicy = 3; |
2605 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2606 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2607 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2608 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2609 | break; |
2610 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tumu: |
2611 | ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask; |
2612 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2613 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2614 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2615 | break; |
2616 | case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tamu: |
2617 | ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask; |
2618 | DefaultPolicy = 1; |
2619 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2620 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2621 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2622 | break; |
2623 | case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tu: |
2624 | ID = Intrinsic::riscv_vfwcvt_x_f_v; |
2625 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2626 | break; |
2627 | case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_ta: |
2628 | ID = Intrinsic::riscv_vfwcvt_x_f_v; |
2629 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2630 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2631 | break; |
2632 | case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tuma: |
2633 | ID = Intrinsic::riscv_vfwcvt_x_f_v_mask; |
2634 | DefaultPolicy = 2; |
2635 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2636 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2637 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2638 | break; |
2639 | case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tama: |
2640 | ID = Intrinsic::riscv_vfwcvt_x_f_v_mask; |
2641 | DefaultPolicy = 3; |
2642 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2643 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2644 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2645 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2646 | break; |
2647 | case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tumu: |
2648 | ID = Intrinsic::riscv_vfwcvt_x_f_v_mask; |
2649 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2650 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2651 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2652 | break; |
2653 | case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tamu: |
2654 | ID = Intrinsic::riscv_vfwcvt_x_f_v_mask; |
2655 | DefaultPolicy = 1; |
2656 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2657 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2658 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2659 | break; |
2660 | case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tu: |
2661 | ID = Intrinsic::riscv_vfwcvt_xu_f_v; |
2662 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2663 | break; |
2664 | case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_ta: |
2665 | ID = Intrinsic::riscv_vfwcvt_xu_f_v; |
2666 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2667 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2668 | break; |
2669 | case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tuma: |
2670 | ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask; |
2671 | DefaultPolicy = 2; |
2672 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2673 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2674 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2675 | break; |
2676 | case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tama: |
2677 | ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask; |
2678 | DefaultPolicy = 3; |
2679 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2680 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2681 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2682 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2683 | break; |
2684 | case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tumu: |
2685 | ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask; |
2686 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2687 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2688 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2689 | break; |
2690 | case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tamu: |
2691 | ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask; |
2692 | DefaultPolicy = 1; |
2693 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2694 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2695 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2696 | break; |
2697 | case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tu: |
2698 | case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tu: |
2699 | ID = Intrinsic::riscv_vfwmacc; |
2700 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2701 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2702 | break; |
2703 | case RISCVVector::BI__builtin_rvv_vfwmacc_vv_ta: |
2704 | case RISCVVector::BI__builtin_rvv_vfwmacc_vf_ta: |
2705 | ID = Intrinsic::riscv_vfwmacc; |
2706 | DefaultPolicy = 1; |
2707 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2708 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2709 | break; |
2710 | case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tuma: |
2711 | case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tuma: |
2712 | ID = Intrinsic::riscv_vfwmacc_mask; |
2713 | DefaultPolicy = 2; |
2714 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2715 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2716 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2717 | break; |
2718 | case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tama: |
2719 | case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tama: |
2720 | ID = Intrinsic::riscv_vfwmacc_mask; |
2721 | DefaultPolicy = 3; |
2722 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2723 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2724 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2725 | break; |
2726 | case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tumu: |
2727 | case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tumu: |
2728 | ID = Intrinsic::riscv_vfwmacc_mask; |
2729 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2730 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2731 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2732 | break; |
2733 | case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tamu: |
2734 | case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tamu: |
2735 | ID = Intrinsic::riscv_vfwmacc_mask; |
2736 | DefaultPolicy = 1; |
2737 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2738 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2739 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2740 | break; |
2741 | case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tu: |
2742 | case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tu: |
2743 | ID = Intrinsic::riscv_vfwmsac; |
2744 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2745 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2746 | break; |
2747 | case RISCVVector::BI__builtin_rvv_vfwmsac_vv_ta: |
2748 | case RISCVVector::BI__builtin_rvv_vfwmsac_vf_ta: |
2749 | ID = Intrinsic::riscv_vfwmsac; |
2750 | DefaultPolicy = 1; |
2751 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2752 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2753 | break; |
2754 | case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tuma: |
2755 | case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tuma: |
2756 | ID = Intrinsic::riscv_vfwmsac_mask; |
2757 | DefaultPolicy = 2; |
2758 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2759 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2760 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2761 | break; |
2762 | case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tama: |
2763 | case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tama: |
2764 | ID = Intrinsic::riscv_vfwmsac_mask; |
2765 | DefaultPolicy = 3; |
2766 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2767 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2768 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2769 | break; |
2770 | case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tumu: |
2771 | case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tumu: |
2772 | ID = Intrinsic::riscv_vfwmsac_mask; |
2773 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2774 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2775 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2776 | break; |
2777 | case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tamu: |
2778 | case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tamu: |
2779 | ID = Intrinsic::riscv_vfwmsac_mask; |
2780 | DefaultPolicy = 1; |
2781 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2782 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2783 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2784 | break; |
2785 | case RISCVVector::BI__builtin_rvv_vfwmul_vv_tu: |
2786 | case RISCVVector::BI__builtin_rvv_vfwmul_vf_tu: |
2787 | ID = Intrinsic::riscv_vfwmul; |
2788 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2789 | break; |
2790 | case RISCVVector::BI__builtin_rvv_vfwmul_vv_ta: |
2791 | case RISCVVector::BI__builtin_rvv_vfwmul_vf_ta: |
2792 | ID = Intrinsic::riscv_vfwmul; |
2793 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2794 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2795 | break; |
2796 | case RISCVVector::BI__builtin_rvv_vfwmul_vv_tuma: |
2797 | case RISCVVector::BI__builtin_rvv_vfwmul_vf_tuma: |
2798 | ID = Intrinsic::riscv_vfwmul_mask; |
2799 | DefaultPolicy = 2; |
2800 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2801 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2802 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2803 | break; |
2804 | case RISCVVector::BI__builtin_rvv_vfwmul_vv_tama: |
2805 | case RISCVVector::BI__builtin_rvv_vfwmul_vf_tama: |
2806 | ID = Intrinsic::riscv_vfwmul_mask; |
2807 | DefaultPolicy = 3; |
2808 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2809 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2810 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2811 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2812 | break; |
2813 | case RISCVVector::BI__builtin_rvv_vfwmul_vv_tumu: |
2814 | case RISCVVector::BI__builtin_rvv_vfwmul_vf_tumu: |
2815 | ID = Intrinsic::riscv_vfwmul_mask; |
2816 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2817 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2818 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2819 | break; |
2820 | case RISCVVector::BI__builtin_rvv_vfwmul_vv_tamu: |
2821 | case RISCVVector::BI__builtin_rvv_vfwmul_vf_tamu: |
2822 | ID = Intrinsic::riscv_vfwmul_mask; |
2823 | DefaultPolicy = 1; |
2824 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2825 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2826 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2827 | break; |
2828 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tu: |
2829 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tu: |
2830 | ID = Intrinsic::riscv_vfwnmacc; |
2831 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2832 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2833 | break; |
2834 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_ta: |
2835 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_ta: |
2836 | ID = Intrinsic::riscv_vfwnmacc; |
2837 | DefaultPolicy = 1; |
2838 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2839 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2840 | break; |
2841 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tuma: |
2842 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tuma: |
2843 | ID = Intrinsic::riscv_vfwnmacc_mask; |
2844 | DefaultPolicy = 2; |
2845 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2846 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2847 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2848 | break; |
2849 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tama: |
2850 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tama: |
2851 | ID = Intrinsic::riscv_vfwnmacc_mask; |
2852 | DefaultPolicy = 3; |
2853 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2854 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2855 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2856 | break; |
2857 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tumu: |
2858 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tumu: |
2859 | ID = Intrinsic::riscv_vfwnmacc_mask; |
2860 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2861 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2862 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2863 | break; |
2864 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tamu: |
2865 | case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tamu: |
2866 | ID = Intrinsic::riscv_vfwnmacc_mask; |
2867 | DefaultPolicy = 1; |
2868 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2869 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2870 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2871 | break; |
2872 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tu: |
2873 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tu: |
2874 | ID = Intrinsic::riscv_vfwnmsac; |
2875 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2876 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2877 | break; |
2878 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_ta: |
2879 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_ta: |
2880 | ID = Intrinsic::riscv_vfwnmsac; |
2881 | DefaultPolicy = 1; |
2882 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2883 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2884 | break; |
2885 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tuma: |
2886 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tuma: |
2887 | ID = Intrinsic::riscv_vfwnmsac_mask; |
2888 | DefaultPolicy = 2; |
2889 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2890 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2891 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2892 | break; |
2893 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tama: |
2894 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tama: |
2895 | ID = Intrinsic::riscv_vfwnmsac_mask; |
2896 | DefaultPolicy = 3; |
2897 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2898 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2899 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2900 | break; |
2901 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tumu: |
2902 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tumu: |
2903 | ID = Intrinsic::riscv_vfwnmsac_mask; |
2904 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2905 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2906 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2907 | break; |
2908 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tamu: |
2909 | case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tamu: |
2910 | ID = Intrinsic::riscv_vfwnmsac_mask; |
2911 | DefaultPolicy = 1; |
2912 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2913 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2914 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2915 | break; |
2916 | case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tu: |
2917 | ID = Intrinsic::riscv_vfwredosum; |
2918 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2919 | break; |
2920 | case RISCVVector::BI__builtin_rvv_vfwredosum_vs_ta: |
2921 | ID = Intrinsic::riscv_vfwredosum; |
2922 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2923 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2924 | break; |
2925 | case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tum: |
2926 | ID = Intrinsic::riscv_vfwredosum_mask; |
2927 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2928 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2929 | break; |
2930 | case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tam: |
2931 | ID = Intrinsic::riscv_vfwredosum_mask; |
2932 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2933 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2934 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2935 | break; |
2936 | case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tumu: |
2937 | ID = Intrinsic::riscv_vfwredosum_mask; |
2938 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2939 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2940 | break; |
2941 | case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tu: |
2942 | ID = Intrinsic::riscv_vfwredusum; |
2943 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2944 | break; |
2945 | case RISCVVector::BI__builtin_rvv_vfwredusum_vs_ta: |
2946 | ID = Intrinsic::riscv_vfwredusum; |
2947 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2948 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2949 | break; |
2950 | case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tum: |
2951 | ID = Intrinsic::riscv_vfwredusum_mask; |
2952 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2953 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2954 | break; |
2955 | case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tam: |
2956 | ID = Intrinsic::riscv_vfwredusum_mask; |
2957 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2958 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2959 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2960 | break; |
2961 | case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tumu: |
2962 | ID = Intrinsic::riscv_vfwredusum_mask; |
2963 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2964 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()}; |
2965 | break; |
2966 | case RISCVVector::BI__builtin_rvv_vfwsub_vv_tu: |
2967 | case RISCVVector::BI__builtin_rvv_vfwsub_vf_tu: |
2968 | ID = Intrinsic::riscv_vfwsub; |
2969 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2970 | break; |
2971 | case RISCVVector::BI__builtin_rvv_vfwsub_vv_ta: |
2972 | case RISCVVector::BI__builtin_rvv_vfwsub_vf_ta: |
2973 | ID = Intrinsic::riscv_vfwsub; |
2974 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2975 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2976 | break; |
2977 | case RISCVVector::BI__builtin_rvv_vfwsub_vv_tuma: |
2978 | case RISCVVector::BI__builtin_rvv_vfwsub_vf_tuma: |
2979 | ID = Intrinsic::riscv_vfwsub_mask; |
2980 | DefaultPolicy = 2; |
2981 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2982 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2983 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2984 | break; |
2985 | case RISCVVector::BI__builtin_rvv_vfwsub_vv_tama: |
2986 | case RISCVVector::BI__builtin_rvv_vfwsub_vf_tama: |
2987 | ID = Intrinsic::riscv_vfwsub_mask; |
2988 | DefaultPolicy = 3; |
2989 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2990 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2991 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
2992 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
2993 | break; |
2994 | case RISCVVector::BI__builtin_rvv_vfwsub_vv_tumu: |
2995 | case RISCVVector::BI__builtin_rvv_vfwsub_vf_tumu: |
2996 | ID = Intrinsic::riscv_vfwsub_mask; |
2997 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
2998 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
2999 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
3000 | break; |
3001 | case RISCVVector::BI__builtin_rvv_vfwsub_vv_tamu: |
3002 | case RISCVVector::BI__builtin_rvv_vfwsub_vf_tamu: |
3003 | ID = Intrinsic::riscv_vfwsub_mask; |
3004 | DefaultPolicy = 1; |
3005 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3006 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3007 | IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()}; |
3008 | break; |
3009 | case RISCVVector::BI__builtin_rvv_vfwsub_wv_tu: |
3010 | case RISCVVector::BI__builtin_rvv_vfwsub_wf_tu: |
3011 | ID = Intrinsic::riscv_vfwsub_w; |
3012 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3013 | break; |
3014 | case RISCVVector::BI__builtin_rvv_vfwsub_wv_ta: |
3015 | case RISCVVector::BI__builtin_rvv_vfwsub_wf_ta: |
3016 | ID = Intrinsic::riscv_vfwsub_w; |
3017 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3018 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3019 | break; |
3020 | case RISCVVector::BI__builtin_rvv_vfwsub_wv_tuma: |
3021 | case RISCVVector::BI__builtin_rvv_vfwsub_wf_tuma: |
3022 | ID = Intrinsic::riscv_vfwsub_w_mask; |
3023 | DefaultPolicy = 2; |
3024 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3025 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3026 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3027 | break; |
3028 | case RISCVVector::BI__builtin_rvv_vfwsub_wv_tama: |
3029 | case RISCVVector::BI__builtin_rvv_vfwsub_wf_tama: |
3030 | ID = Intrinsic::riscv_vfwsub_w_mask; |
3031 | DefaultPolicy = 3; |
3032 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3033 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3034 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3035 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3036 | break; |
3037 | case RISCVVector::BI__builtin_rvv_vfwsub_wv_tumu: |
3038 | case RISCVVector::BI__builtin_rvv_vfwsub_wf_tumu: |
3039 | ID = Intrinsic::riscv_vfwsub_w_mask; |
3040 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3041 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3042 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3043 | break; |
3044 | case RISCVVector::BI__builtin_rvv_vfwsub_wv_tamu: |
3045 | case RISCVVector::BI__builtin_rvv_vfwsub_wf_tamu: |
3046 | ID = Intrinsic::riscv_vfwsub_w_mask; |
3047 | DefaultPolicy = 1; |
3048 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3049 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3050 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3051 | break; |
3052 | case RISCVVector::BI__builtin_rvv_vid_v_tu: |
3053 | ID = Intrinsic::riscv_vid; |
3054 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3055 | break; |
3056 | case RISCVVector::BI__builtin_rvv_vid_v_ta: |
3057 | ID = Intrinsic::riscv_vid; |
3058 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3059 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3060 | break; |
3061 | case RISCVVector::BI__builtin_rvv_vid_v_tuma: |
3062 | ID = Intrinsic::riscv_vid_mask; |
3063 | DefaultPolicy = 2; |
3064 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3065 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3066 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3067 | break; |
3068 | case RISCVVector::BI__builtin_rvv_vid_v_tama: |
3069 | ID = Intrinsic::riscv_vid_mask; |
3070 | DefaultPolicy = 3; |
3071 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3072 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3073 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3074 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3075 | break; |
3076 | case RISCVVector::BI__builtin_rvv_vid_v_tumu: |
3077 | ID = Intrinsic::riscv_vid_mask; |
3078 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3079 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3080 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3081 | break; |
3082 | case RISCVVector::BI__builtin_rvv_vid_v_tamu: |
3083 | ID = Intrinsic::riscv_vid_mask; |
3084 | DefaultPolicy = 1; |
3085 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3086 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3087 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3088 | break; |
3089 | case RISCVVector::BI__builtin_rvv_viota_m_tu: |
3090 | ID = Intrinsic::riscv_viota; |
3091 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3092 | break; |
3093 | case RISCVVector::BI__builtin_rvv_viota_m_ta: |
3094 | ID = Intrinsic::riscv_viota; |
3095 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3096 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3097 | break; |
3098 | case RISCVVector::BI__builtin_rvv_viota_m_tuma: |
3099 | ID = Intrinsic::riscv_viota_mask; |
3100 | DefaultPolicy = 2; |
3101 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3102 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3103 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3104 | break; |
3105 | case RISCVVector::BI__builtin_rvv_viota_m_tama: |
3106 | ID = Intrinsic::riscv_viota_mask; |
3107 | DefaultPolicy = 3; |
3108 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3109 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3110 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3111 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3112 | break; |
3113 | case RISCVVector::BI__builtin_rvv_viota_m_tumu: |
3114 | ID = Intrinsic::riscv_viota_mask; |
3115 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3116 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3117 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3118 | break; |
3119 | case RISCVVector::BI__builtin_rvv_viota_m_tamu: |
3120 | ID = Intrinsic::riscv_viota_mask; |
3121 | DefaultPolicy = 1; |
3122 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3123 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3124 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3125 | break; |
3126 | case RISCVVector::BI__builtin_rvv_vle8_v_tu: |
3127 | case RISCVVector::BI__builtin_rvv_vle16_v_tu: |
3128 | case RISCVVector::BI__builtin_rvv_vle32_v_tu: |
3129 | case RISCVVector::BI__builtin_rvv_vle64_v_tu: |
3130 | ID = Intrinsic::riscv_vle; |
3131 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3132 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3133 | break; |
3134 | case RISCVVector::BI__builtin_rvv_vle8_v_ta: |
3135 | case RISCVVector::BI__builtin_rvv_vle16_v_ta: |
3136 | case RISCVVector::BI__builtin_rvv_vle32_v_ta: |
3137 | case RISCVVector::BI__builtin_rvv_vle64_v_ta: |
3138 | ID = Intrinsic::riscv_vle; |
3139 | Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo()); |
3140 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3141 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3142 | break; |
3143 | case RISCVVector::BI__builtin_rvv_vle8_v_tuma: |
3144 | case RISCVVector::BI__builtin_rvv_vle16_v_tuma: |
3145 | case RISCVVector::BI__builtin_rvv_vle32_v_tuma: |
3146 | case RISCVVector::BI__builtin_rvv_vle64_v_tuma: |
3147 | ID = Intrinsic::riscv_vle_mask; |
3148 | DefaultPolicy = 2; |
3149 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
3150 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3151 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3152 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3153 | break; |
3154 | case RISCVVector::BI__builtin_rvv_vle8_v_tama: |
3155 | case RISCVVector::BI__builtin_rvv_vle16_v_tama: |
3156 | case RISCVVector::BI__builtin_rvv_vle32_v_tama: |
3157 | case RISCVVector::BI__builtin_rvv_vle64_v_tama: |
3158 | ID = Intrinsic::riscv_vle_mask; |
3159 | DefaultPolicy = 3; |
3160 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3161 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3162 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3163 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3164 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3165 | break; |
3166 | case RISCVVector::BI__builtin_rvv_vle8_v_tumu: |
3167 | case RISCVVector::BI__builtin_rvv_vle16_v_tumu: |
3168 | case RISCVVector::BI__builtin_rvv_vle32_v_tumu: |
3169 | case RISCVVector::BI__builtin_rvv_vle64_v_tumu: |
3170 | ID = Intrinsic::riscv_vle_mask; |
3171 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
3172 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3173 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3174 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3175 | break; |
3176 | case RISCVVector::BI__builtin_rvv_vle8_v_tamu: |
3177 | case RISCVVector::BI__builtin_rvv_vle16_v_tamu: |
3178 | case RISCVVector::BI__builtin_rvv_vle32_v_tamu: |
3179 | case RISCVVector::BI__builtin_rvv_vle64_v_tamu: |
3180 | ID = Intrinsic::riscv_vle_mask; |
3181 | DefaultPolicy = 1; |
3182 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
3183 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3184 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3185 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3186 | break; |
3187 | case RISCVVector::BI__builtin_rvv_vle16ff_v_tu: |
3188 | case RISCVVector::BI__builtin_rvv_vle32ff_v_tu: |
3189 | case RISCVVector::BI__builtin_rvv_vle64ff_v_tu: |
3190 | case RISCVVector::BI__builtin_rvv_vle8ff_v_tu: |
3191 | ID = Intrinsic::riscv_vleff; |
3192 | DefaultPolicy = 0; |
3193 | |
3194 | { |
3195 | if (DefaultPolicy == TAIL_AGNOSTIC) |
3196 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
3197 | IntrinsicTypes = {ResultType, Ops[3]->getType()}; |
3198 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3199 | Value *NewVL = Ops[2]; |
3200 | Ops.erase(Ops.begin() + 2); |
3201 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3202 | llvm::Value *LoadValue = Builder.CreateCall(F, Ops, ""); |
3203 | llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0}); |
3204 | // Store new_vl. |
3205 | clang::CharUnits Align = |
3206 | CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType()); |
3207 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1}); |
3208 | Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
3209 | return V; |
3210 | } |
3211 | break; |
3212 | case RISCVVector::BI__builtin_rvv_vle16ff_v_ta: |
3213 | case RISCVVector::BI__builtin_rvv_vle32ff_v_ta: |
3214 | case RISCVVector::BI__builtin_rvv_vle64ff_v_ta: |
3215 | case RISCVVector::BI__builtin_rvv_vle8ff_v_ta: |
3216 | ID = Intrinsic::riscv_vleff; |
3217 | DefaultPolicy = 1; |
3218 | |
3219 | { |
3220 | if (DefaultPolicy == TAIL_AGNOSTIC) |
3221 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
3222 | IntrinsicTypes = {ResultType, Ops[3]->getType()}; |
3223 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3224 | Value *NewVL = Ops[2]; |
3225 | Ops.erase(Ops.begin() + 2); |
3226 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3227 | llvm::Value *LoadValue = Builder.CreateCall(F, Ops, ""); |
3228 | llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0}); |
3229 | // Store new_vl. |
3230 | clang::CharUnits Align = |
3231 | CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType()); |
3232 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1}); |
3233 | Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
3234 | return V; |
3235 | } |
3236 | break; |
3237 | case RISCVVector::BI__builtin_rvv_vle16ff_v_tuma: |
3238 | case RISCVVector::BI__builtin_rvv_vle32ff_v_tuma: |
3239 | case RISCVVector::BI__builtin_rvv_vle64ff_v_tuma: |
3240 | case RISCVVector::BI__builtin_rvv_vle8ff_v_tuma: |
3241 | ID = Intrinsic::riscv_vleff_mask; |
3242 | DefaultPolicy = 2; |
3243 | |
3244 | { |
3245 | // Move mask to right before vl. |
3246 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3247 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
3248 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
3249 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3250 | IntrinsicTypes = {ResultType, Ops[4]->getType()}; |
3251 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3252 | Value *NewVL = Ops[2]; |
3253 | Ops.erase(Ops.begin() + 2); |
3254 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3255 | llvm::Value *LoadValue = Builder.CreateCall(F, Ops, ""); |
3256 | llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0}); |
3257 | // Store new_vl. |
3258 | clang::CharUnits Align = CGM.getNaturalPointeeTypeAlignment( |
3259 | E->getArg(E->getNumArgs()-2)->getType()); |
3260 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1}); |
3261 | Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
3262 | return V; |
3263 | } |
3264 | break; |
3265 | case RISCVVector::BI__builtin_rvv_vle16ff_v_tama: |
3266 | case RISCVVector::BI__builtin_rvv_vle32ff_v_tama: |
3267 | case RISCVVector::BI__builtin_rvv_vle64ff_v_tama: |
3268 | case RISCVVector::BI__builtin_rvv_vle8ff_v_tama: |
3269 | ID = Intrinsic::riscv_vleff_mask; |
3270 | DefaultPolicy = 3; |
3271 | |
3272 | { |
3273 | // Move mask to right before vl. |
3274 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3275 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
3276 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
3277 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3278 | IntrinsicTypes = {ResultType, Ops[4]->getType()}; |
3279 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3280 | Value *NewVL = Ops[2]; |
3281 | Ops.erase(Ops.begin() + 2); |
3282 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3283 | llvm::Value *LoadValue = Builder.CreateCall(F, Ops, ""); |
3284 | llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0}); |
3285 | // Store new_vl. |
3286 | clang::CharUnits Align = CGM.getNaturalPointeeTypeAlignment( |
3287 | E->getArg(E->getNumArgs()-2)->getType()); |
3288 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1}); |
3289 | Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
3290 | return V; |
3291 | } |
3292 | break; |
3293 | case RISCVVector::BI__builtin_rvv_vle16ff_v_tumu: |
3294 | case RISCVVector::BI__builtin_rvv_vle32ff_v_tumu: |
3295 | case RISCVVector::BI__builtin_rvv_vle64ff_v_tumu: |
3296 | case RISCVVector::BI__builtin_rvv_vle8ff_v_tumu: |
3297 | ID = Intrinsic::riscv_vleff_mask; |
3298 | DefaultPolicy = 0; |
3299 | |
3300 | { |
3301 | // Move mask to right before vl. |
3302 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3303 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
3304 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
3305 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3306 | IntrinsicTypes = {ResultType, Ops[4]->getType()}; |
3307 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3308 | Value *NewVL = Ops[2]; |
3309 | Ops.erase(Ops.begin() + 2); |
3310 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3311 | llvm::Value *LoadValue = Builder.CreateCall(F, Ops, ""); |
3312 | llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0}); |
3313 | // Store new_vl. |
3314 | clang::CharUnits Align = CGM.getNaturalPointeeTypeAlignment( |
3315 | E->getArg(E->getNumArgs()-2)->getType()); |
3316 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1}); |
3317 | Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
3318 | return V; |
3319 | } |
3320 | break; |
3321 | case RISCVVector::BI__builtin_rvv_vle16ff_v_tamu: |
3322 | case RISCVVector::BI__builtin_rvv_vle32ff_v_tamu: |
3323 | case RISCVVector::BI__builtin_rvv_vle64ff_v_tamu: |
3324 | case RISCVVector::BI__builtin_rvv_vle8ff_v_tamu: |
3325 | ID = Intrinsic::riscv_vleff_mask; |
3326 | DefaultPolicy = 1; |
3327 | |
3328 | { |
3329 | // Move mask to right before vl. |
3330 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3331 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) |
3332 | Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType)); |
3333 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3334 | IntrinsicTypes = {ResultType, Ops[4]->getType()}; |
3335 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3336 | Value *NewVL = Ops[2]; |
3337 | Ops.erase(Ops.begin() + 2); |
3338 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3339 | llvm::Value *LoadValue = Builder.CreateCall(F, Ops, ""); |
3340 | llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0}); |
3341 | // Store new_vl. |
3342 | clang::CharUnits Align = CGM.getNaturalPointeeTypeAlignment( |
3343 | E->getArg(E->getNumArgs()-2)->getType()); |
3344 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1}); |
3345 | Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
3346 | return V; |
3347 | } |
3348 | break; |
3349 | case RISCVVector::BI__builtin_rvv_vlm_v: |
3350 | ID = Intrinsic::riscv_vlm; |
3351 | DefaultPolicy = 1; |
3352 | Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo()); |
3353 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
3354 | break; |
3355 | case RISCVVector::BI__builtin_rvv_vloxei8_v_tu: |
3356 | case RISCVVector::BI__builtin_rvv_vloxei16_v_tu: |
3357 | case RISCVVector::BI__builtin_rvv_vloxei32_v_tu: |
3358 | case RISCVVector::BI__builtin_rvv_vloxei64_v_tu: |
3359 | ID = Intrinsic::riscv_vloxei; |
3360 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3361 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3362 | break; |
3363 | case RISCVVector::BI__builtin_rvv_vloxei8_v_ta: |
3364 | case RISCVVector::BI__builtin_rvv_vloxei16_v_ta: |
3365 | case RISCVVector::BI__builtin_rvv_vloxei32_v_ta: |
3366 | case RISCVVector::BI__builtin_rvv_vloxei64_v_ta: |
3367 | ID = Intrinsic::riscv_vloxei; |
3368 | Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo()); |
3369 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3370 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3371 | break; |
3372 | case RISCVVector::BI__builtin_rvv_vloxei8_v_tuma: |
3373 | case RISCVVector::BI__builtin_rvv_vloxei16_v_tuma: |
3374 | case RISCVVector::BI__builtin_rvv_vloxei32_v_tuma: |
3375 | case RISCVVector::BI__builtin_rvv_vloxei64_v_tuma: |
3376 | ID = Intrinsic::riscv_vloxei_mask; |
3377 | DefaultPolicy = 2; |
3378 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
3379 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3380 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3381 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3382 | break; |
3383 | case RISCVVector::BI__builtin_rvv_vloxei8_v_tama: |
3384 | case RISCVVector::BI__builtin_rvv_vloxei16_v_tama: |
3385 | case RISCVVector::BI__builtin_rvv_vloxei32_v_tama: |
3386 | case RISCVVector::BI__builtin_rvv_vloxei64_v_tama: |
3387 | ID = Intrinsic::riscv_vloxei_mask; |
3388 | DefaultPolicy = 3; |
3389 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
3390 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3391 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3392 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
3393 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3394 | break; |
3395 | case RISCVVector::BI__builtin_rvv_vloxei8_v_tumu: |
3396 | case RISCVVector::BI__builtin_rvv_vloxei16_v_tumu: |
3397 | case RISCVVector::BI__builtin_rvv_vloxei32_v_tumu: |
3398 | case RISCVVector::BI__builtin_rvv_vloxei64_v_tumu: |
3399 | ID = Intrinsic::riscv_vloxei_mask; |
3400 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
3401 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3402 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3403 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3404 | break; |
3405 | case RISCVVector::BI__builtin_rvv_vloxei8_v_tamu: |
3406 | case RISCVVector::BI__builtin_rvv_vloxei16_v_tamu: |
3407 | case RISCVVector::BI__builtin_rvv_vloxei32_v_tamu: |
3408 | case RISCVVector::BI__builtin_rvv_vloxei64_v_tamu: |
3409 | ID = Intrinsic::riscv_vloxei_mask; |
3410 | DefaultPolicy = 1; |
3411 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
3412 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
3413 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3414 | IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()}; |
3415 | break; |
3416 | case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tu: |
3417 | case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tu: |
3418 | case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tu: |
3419 | case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tu: |
3420 | ID = Intrinsic::riscv_vloxseg2; |
3421 | NF = 2; |
3422 | DefaultPolicy = 0; |
3423 | |
3424 | { |
3425 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
3426 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
3427 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3428 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
3429 | SmallVector<llvm::Value*, 12> Operands; |
3430 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
3431 | for (unsigned I = 0; I < NF; ++I) |
3432 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3433 | Operands.push_back(Ops[NF]); |
3434 | Operands.push_back(Ops[NF + 1]); |
3435 | Operands.push_back(Ops[NF + 2]); |
3436 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
3437 | } else { |
3438 | for (unsigned I = 0; I < NF; ++I) |
3439 | Operands.push_back(Ops[NF + I]); |
3440 | Operands.push_back(Ops[2 * NF]); |
3441 | Operands.push_back(Ops[2 * NF + 1]); |
3442 | Operands.push_back(Ops[2 * NF + 2]); |
3443 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
3444 | } |
3445 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3446 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3447 | clang::CharUnits Align = |
3448 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3449 | llvm::Value *V; |
3450 | for (unsigned I = 0; I < NF; ++I) { |
3451 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3452 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3453 | } |
3454 | return V; |
3455 | } |
3456 | break; |
3457 | case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_ta: |
3458 | case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_ta: |
3459 | case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_ta: |
3460 | case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_ta: |
3461 | ID = Intrinsic::riscv_vloxseg2; |
3462 | NF = 2; |
3463 | DefaultPolicy = 1; |
3464 | |
3465 | { |
3466 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
3467 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
3468 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3469 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
3470 | SmallVector<llvm::Value*, 12> Operands; |
3471 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
3472 | for (unsigned I = 0; I < NF; ++I) |
3473 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3474 | Operands.push_back(Ops[NF]); |
3475 | Operands.push_back(Ops[NF + 1]); |
3476 | Operands.push_back(Ops[NF + 2]); |
3477 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
3478 | } else { |
3479 | for (unsigned I = 0; I < NF; ++I) |
3480 | Operands.push_back(Ops[NF + I]); |
3481 | Operands.push_back(Ops[2 * NF]); |
3482 | Operands.push_back(Ops[2 * NF + 1]); |
3483 | Operands.push_back(Ops[2 * NF + 2]); |
3484 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
3485 | } |
3486 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3487 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3488 | clang::CharUnits Align = |
3489 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3490 | llvm::Value *V; |
3491 | for (unsigned I = 0; I < NF; ++I) { |
3492 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3493 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3494 | } |
3495 | return V; |
3496 | } |
3497 | break; |
3498 | case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tuma: |
3499 | case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tuma: |
3500 | case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tuma: |
3501 | case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tuma: |
3502 | ID = Intrinsic::riscv_vloxseg2_mask; |
3503 | NF = 2; |
3504 | DefaultPolicy = 2; |
3505 | |
3506 | { |
3507 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3508 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3509 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3510 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3511 | SmallVector<llvm::Value*, 12> Operands; |
3512 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3513 | for (unsigned I = 0; I < NF; ++I) |
3514 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3515 | Operands.push_back(Ops[NF + 1]); |
3516 | Operands.push_back(Ops[NF + 2]); |
3517 | Operands.push_back(Ops[NF]); |
3518 | Operands.push_back(Ops[NF + 3]); |
3519 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3520 | } else { |
3521 | for (unsigned I = 0; I < NF; ++I) |
3522 | Operands.push_back(Ops[NF + I + 1]); |
3523 | Operands.push_back(Ops[2 * NF + 1]); |
3524 | Operands.push_back(Ops[2 * NF + 2]); |
3525 | Operands.push_back(Ops[NF]); |
3526 | Operands.push_back(Ops[2 * NF + 3]); |
3527 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3528 | } |
3529 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3530 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3530, __extension__ __PRETTY_FUNCTION__)); |
3531 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3532 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3533 | clang::CharUnits Align = |
3534 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3535 | llvm::Value *V; |
3536 | for (unsigned I = 0; I < NF; ++I) { |
3537 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3538 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3539 | } |
3540 | return V; |
3541 | } |
3542 | break; |
3543 | case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tama: |
3544 | case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tama: |
3545 | case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tama: |
3546 | case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tama: |
3547 | ID = Intrinsic::riscv_vloxseg2_mask; |
3548 | NF = 2; |
3549 | DefaultPolicy = 3; |
3550 | |
3551 | { |
3552 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3553 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3554 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3555 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3556 | SmallVector<llvm::Value*, 12> Operands; |
3557 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3558 | for (unsigned I = 0; I < NF; ++I) |
3559 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3560 | Operands.push_back(Ops[NF + 1]); |
3561 | Operands.push_back(Ops[NF + 2]); |
3562 | Operands.push_back(Ops[NF]); |
3563 | Operands.push_back(Ops[NF + 3]); |
3564 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3565 | } else { |
3566 | for (unsigned I = 0; I < NF; ++I) |
3567 | Operands.push_back(Ops[NF + I + 1]); |
3568 | Operands.push_back(Ops[2 * NF + 1]); |
3569 | Operands.push_back(Ops[2 * NF + 2]); |
3570 | Operands.push_back(Ops[NF]); |
3571 | Operands.push_back(Ops[2 * NF + 3]); |
3572 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3573 | } |
3574 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3575 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3575, __extension__ __PRETTY_FUNCTION__)); |
3576 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3577 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3578 | clang::CharUnits Align = |
3579 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3580 | llvm::Value *V; |
3581 | for (unsigned I = 0; I < NF; ++I) { |
3582 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3583 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3584 | } |
3585 | return V; |
3586 | } |
3587 | break; |
3588 | case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tumu: |
3589 | case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tumu: |
3590 | case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tumu: |
3591 | case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tumu: |
3592 | ID = Intrinsic::riscv_vloxseg2_mask; |
3593 | NF = 2; |
3594 | DefaultPolicy = 0; |
3595 | |
3596 | { |
3597 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3598 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3599 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3600 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3601 | SmallVector<llvm::Value*, 12> Operands; |
3602 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3603 | for (unsigned I = 0; I < NF; ++I) |
3604 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3605 | Operands.push_back(Ops[NF + 1]); |
3606 | Operands.push_back(Ops[NF + 2]); |
3607 | Operands.push_back(Ops[NF]); |
3608 | Operands.push_back(Ops[NF + 3]); |
3609 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3610 | } else { |
3611 | for (unsigned I = 0; I < NF; ++I) |
3612 | Operands.push_back(Ops[NF + I + 1]); |
3613 | Operands.push_back(Ops[2 * NF + 1]); |
3614 | Operands.push_back(Ops[2 * NF + 2]); |
3615 | Operands.push_back(Ops[NF]); |
3616 | Operands.push_back(Ops[2 * NF + 3]); |
3617 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3618 | } |
3619 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3620 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3620, __extension__ __PRETTY_FUNCTION__)); |
3621 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3622 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3623 | clang::CharUnits Align = |
3624 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3625 | llvm::Value *V; |
3626 | for (unsigned I = 0; I < NF; ++I) { |
3627 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3628 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3629 | } |
3630 | return V; |
3631 | } |
3632 | break; |
3633 | case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tamu: |
3634 | case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tamu: |
3635 | case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tamu: |
3636 | case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tamu: |
3637 | ID = Intrinsic::riscv_vloxseg2_mask; |
3638 | NF = 2; |
3639 | DefaultPolicy = 1; |
3640 | |
3641 | { |
3642 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3643 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3644 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3645 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3646 | SmallVector<llvm::Value*, 12> Operands; |
3647 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3648 | for (unsigned I = 0; I < NF; ++I) |
3649 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3650 | Operands.push_back(Ops[NF + 1]); |
3651 | Operands.push_back(Ops[NF + 2]); |
3652 | Operands.push_back(Ops[NF]); |
3653 | Operands.push_back(Ops[NF + 3]); |
3654 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3655 | } else { |
3656 | for (unsigned I = 0; I < NF; ++I) |
3657 | Operands.push_back(Ops[NF + I + 1]); |
3658 | Operands.push_back(Ops[2 * NF + 1]); |
3659 | Operands.push_back(Ops[2 * NF + 2]); |
3660 | Operands.push_back(Ops[NF]); |
3661 | Operands.push_back(Ops[2 * NF + 3]); |
3662 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3663 | } |
3664 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3665 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3665, __extension__ __PRETTY_FUNCTION__)); |
3666 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3667 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3668 | clang::CharUnits Align = |
3669 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3670 | llvm::Value *V; |
3671 | for (unsigned I = 0; I < NF; ++I) { |
3672 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3673 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3674 | } |
3675 | return V; |
3676 | } |
3677 | break; |
3678 | case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tu: |
3679 | case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tu: |
3680 | case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tu: |
3681 | case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tu: |
3682 | ID = Intrinsic::riscv_vloxseg3; |
3683 | NF = 3; |
3684 | DefaultPolicy = 0; |
3685 | |
3686 | { |
3687 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
3688 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
3689 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3690 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
3691 | SmallVector<llvm::Value*, 12> Operands; |
3692 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
3693 | for (unsigned I = 0; I < NF; ++I) |
3694 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3695 | Operands.push_back(Ops[NF]); |
3696 | Operands.push_back(Ops[NF + 1]); |
3697 | Operands.push_back(Ops[NF + 2]); |
3698 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
3699 | } else { |
3700 | for (unsigned I = 0; I < NF; ++I) |
3701 | Operands.push_back(Ops[NF + I]); |
3702 | Operands.push_back(Ops[2 * NF]); |
3703 | Operands.push_back(Ops[2 * NF + 1]); |
3704 | Operands.push_back(Ops[2 * NF + 2]); |
3705 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
3706 | } |
3707 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3708 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3709 | clang::CharUnits Align = |
3710 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3711 | llvm::Value *V; |
3712 | for (unsigned I = 0; I < NF; ++I) { |
3713 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3714 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3715 | } |
3716 | return V; |
3717 | } |
3718 | break; |
3719 | case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_ta: |
3720 | case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_ta: |
3721 | case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_ta: |
3722 | case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_ta: |
3723 | ID = Intrinsic::riscv_vloxseg3; |
3724 | NF = 3; |
3725 | DefaultPolicy = 1; |
3726 | |
3727 | { |
3728 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
3729 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
3730 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3731 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
3732 | SmallVector<llvm::Value*, 12> Operands; |
3733 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
3734 | for (unsigned I = 0; I < NF; ++I) |
3735 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3736 | Operands.push_back(Ops[NF]); |
3737 | Operands.push_back(Ops[NF + 1]); |
3738 | Operands.push_back(Ops[NF + 2]); |
3739 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
3740 | } else { |
3741 | for (unsigned I = 0; I < NF; ++I) |
3742 | Operands.push_back(Ops[NF + I]); |
3743 | Operands.push_back(Ops[2 * NF]); |
3744 | Operands.push_back(Ops[2 * NF + 1]); |
3745 | Operands.push_back(Ops[2 * NF + 2]); |
3746 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
3747 | } |
3748 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3749 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3750 | clang::CharUnits Align = |
3751 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3752 | llvm::Value *V; |
3753 | for (unsigned I = 0; I < NF; ++I) { |
3754 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3755 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3756 | } |
3757 | return V; |
3758 | } |
3759 | break; |
3760 | case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tuma: |
3761 | case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tuma: |
3762 | case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tuma: |
3763 | case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tuma: |
3764 | ID = Intrinsic::riscv_vloxseg3_mask; |
3765 | NF = 3; |
3766 | DefaultPolicy = 2; |
3767 | |
3768 | { |
3769 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3770 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3771 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3772 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3773 | SmallVector<llvm::Value*, 12> Operands; |
3774 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3775 | for (unsigned I = 0; I < NF; ++I) |
3776 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3777 | Operands.push_back(Ops[NF + 1]); |
3778 | Operands.push_back(Ops[NF + 2]); |
3779 | Operands.push_back(Ops[NF]); |
3780 | Operands.push_back(Ops[NF + 3]); |
3781 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3782 | } else { |
3783 | for (unsigned I = 0; I < NF; ++I) |
3784 | Operands.push_back(Ops[NF + I + 1]); |
3785 | Operands.push_back(Ops[2 * NF + 1]); |
3786 | Operands.push_back(Ops[2 * NF + 2]); |
3787 | Operands.push_back(Ops[NF]); |
3788 | Operands.push_back(Ops[2 * NF + 3]); |
3789 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3790 | } |
3791 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3792 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3792, __extension__ __PRETTY_FUNCTION__)); |
3793 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3794 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3795 | clang::CharUnits Align = |
3796 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3797 | llvm::Value *V; |
3798 | for (unsigned I = 0; I < NF; ++I) { |
3799 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3800 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3801 | } |
3802 | return V; |
3803 | } |
3804 | break; |
3805 | case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tama: |
3806 | case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tama: |
3807 | case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tama: |
3808 | case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tama: |
3809 | ID = Intrinsic::riscv_vloxseg3_mask; |
3810 | NF = 3; |
3811 | DefaultPolicy = 3; |
3812 | |
3813 | { |
3814 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3815 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3816 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3817 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3818 | SmallVector<llvm::Value*, 12> Operands; |
3819 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3820 | for (unsigned I = 0; I < NF; ++I) |
3821 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3822 | Operands.push_back(Ops[NF + 1]); |
3823 | Operands.push_back(Ops[NF + 2]); |
3824 | Operands.push_back(Ops[NF]); |
3825 | Operands.push_back(Ops[NF + 3]); |
3826 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3827 | } else { |
3828 | for (unsigned I = 0; I < NF; ++I) |
3829 | Operands.push_back(Ops[NF + I + 1]); |
3830 | Operands.push_back(Ops[2 * NF + 1]); |
3831 | Operands.push_back(Ops[2 * NF + 2]); |
3832 | Operands.push_back(Ops[NF]); |
3833 | Operands.push_back(Ops[2 * NF + 3]); |
3834 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3835 | } |
3836 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3837 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3837, __extension__ __PRETTY_FUNCTION__)); |
3838 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3839 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3840 | clang::CharUnits Align = |
3841 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3842 | llvm::Value *V; |
3843 | for (unsigned I = 0; I < NF; ++I) { |
3844 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3845 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3846 | } |
3847 | return V; |
3848 | } |
3849 | break; |
3850 | case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tumu: |
3851 | case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tumu: |
3852 | case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tumu: |
3853 | case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tumu: |
3854 | ID = Intrinsic::riscv_vloxseg3_mask; |
3855 | NF = 3; |
3856 | DefaultPolicy = 0; |
3857 | |
3858 | { |
3859 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3860 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3861 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3862 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3863 | SmallVector<llvm::Value*, 12> Operands; |
3864 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3865 | for (unsigned I = 0; I < NF; ++I) |
3866 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3867 | Operands.push_back(Ops[NF + 1]); |
3868 | Operands.push_back(Ops[NF + 2]); |
3869 | Operands.push_back(Ops[NF]); |
3870 | Operands.push_back(Ops[NF + 3]); |
3871 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3872 | } else { |
3873 | for (unsigned I = 0; I < NF; ++I) |
3874 | Operands.push_back(Ops[NF + I + 1]); |
3875 | Operands.push_back(Ops[2 * NF + 1]); |
3876 | Operands.push_back(Ops[2 * NF + 2]); |
3877 | Operands.push_back(Ops[NF]); |
3878 | Operands.push_back(Ops[2 * NF + 3]); |
3879 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3880 | } |
3881 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3882 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3882, __extension__ __PRETTY_FUNCTION__)); |
3883 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3884 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3885 | clang::CharUnits Align = |
3886 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3887 | llvm::Value *V; |
3888 | for (unsigned I = 0; I < NF; ++I) { |
3889 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3890 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3891 | } |
3892 | return V; |
3893 | } |
3894 | break; |
3895 | case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tamu: |
3896 | case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tamu: |
3897 | case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tamu: |
3898 | case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tamu: |
3899 | ID = Intrinsic::riscv_vloxseg3_mask; |
3900 | NF = 3; |
3901 | DefaultPolicy = 1; |
3902 | |
3903 | { |
3904 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
3905 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
3906 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3907 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
3908 | SmallVector<llvm::Value*, 12> Operands; |
3909 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
3910 | for (unsigned I = 0; I < NF; ++I) |
3911 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3912 | Operands.push_back(Ops[NF + 1]); |
3913 | Operands.push_back(Ops[NF + 2]); |
3914 | Operands.push_back(Ops[NF]); |
3915 | Operands.push_back(Ops[NF + 3]); |
3916 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
3917 | } else { |
3918 | for (unsigned I = 0; I < NF; ++I) |
3919 | Operands.push_back(Ops[NF + I + 1]); |
3920 | Operands.push_back(Ops[2 * NF + 1]); |
3921 | Operands.push_back(Ops[2 * NF + 2]); |
3922 | Operands.push_back(Ops[NF]); |
3923 | Operands.push_back(Ops[2 * NF + 3]); |
3924 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
3925 | } |
3926 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
3927 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 3927, __extension__ __PRETTY_FUNCTION__)); |
3928 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3929 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3930 | clang::CharUnits Align = |
3931 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3932 | llvm::Value *V; |
3933 | for (unsigned I = 0; I < NF; ++I) { |
3934 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3935 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3936 | } |
3937 | return V; |
3938 | } |
3939 | break; |
3940 | case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tu: |
3941 | case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tu: |
3942 | case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tu: |
3943 | case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tu: |
3944 | ID = Intrinsic::riscv_vloxseg4; |
3945 | NF = 4; |
3946 | DefaultPolicy = 0; |
3947 | |
3948 | { |
3949 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
3950 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
3951 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3952 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
3953 | SmallVector<llvm::Value*, 12> Operands; |
3954 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
3955 | for (unsigned I = 0; I < NF; ++I) |
3956 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3957 | Operands.push_back(Ops[NF]); |
3958 | Operands.push_back(Ops[NF + 1]); |
3959 | Operands.push_back(Ops[NF + 2]); |
3960 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
3961 | } else { |
3962 | for (unsigned I = 0; I < NF; ++I) |
3963 | Operands.push_back(Ops[NF + I]); |
3964 | Operands.push_back(Ops[2 * NF]); |
3965 | Operands.push_back(Ops[2 * NF + 1]); |
3966 | Operands.push_back(Ops[2 * NF + 2]); |
3967 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
3968 | } |
3969 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
3970 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
3971 | clang::CharUnits Align = |
3972 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
3973 | llvm::Value *V; |
3974 | for (unsigned I = 0; I < NF; ++I) { |
3975 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
3976 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
3977 | } |
3978 | return V; |
3979 | } |
3980 | break; |
3981 | case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_ta: |
3982 | case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_ta: |
3983 | case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_ta: |
3984 | case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_ta: |
3985 | ID = Intrinsic::riscv_vloxseg4; |
3986 | NF = 4; |
3987 | DefaultPolicy = 1; |
3988 | |
3989 | { |
3990 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
3991 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
3992 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
3993 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
3994 | SmallVector<llvm::Value*, 12> Operands; |
3995 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
3996 | for (unsigned I = 0; I < NF; ++I) |
3997 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
3998 | Operands.push_back(Ops[NF]); |
3999 | Operands.push_back(Ops[NF + 1]); |
4000 | Operands.push_back(Ops[NF + 2]); |
4001 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4002 | } else { |
4003 | for (unsigned I = 0; I < NF; ++I) |
4004 | Operands.push_back(Ops[NF + I]); |
4005 | Operands.push_back(Ops[2 * NF]); |
4006 | Operands.push_back(Ops[2 * NF + 1]); |
4007 | Operands.push_back(Ops[2 * NF + 2]); |
4008 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4009 | } |
4010 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4011 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4012 | clang::CharUnits Align = |
4013 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4014 | llvm::Value *V; |
4015 | for (unsigned I = 0; I < NF; ++I) { |
4016 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4017 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4018 | } |
4019 | return V; |
4020 | } |
4021 | break; |
4022 | case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tuma: |
4023 | case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tuma: |
4024 | case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tuma: |
4025 | case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tuma: |
4026 | ID = Intrinsic::riscv_vloxseg4_mask; |
4027 | NF = 4; |
4028 | DefaultPolicy = 2; |
4029 | |
4030 | { |
4031 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4032 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4033 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4034 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4035 | SmallVector<llvm::Value*, 12> Operands; |
4036 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4037 | for (unsigned I = 0; I < NF; ++I) |
4038 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4039 | Operands.push_back(Ops[NF + 1]); |
4040 | Operands.push_back(Ops[NF + 2]); |
4041 | Operands.push_back(Ops[NF]); |
4042 | Operands.push_back(Ops[NF + 3]); |
4043 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4044 | } else { |
4045 | for (unsigned I = 0; I < NF; ++I) |
4046 | Operands.push_back(Ops[NF + I + 1]); |
4047 | Operands.push_back(Ops[2 * NF + 1]); |
4048 | Operands.push_back(Ops[2 * NF + 2]); |
4049 | Operands.push_back(Ops[NF]); |
4050 | Operands.push_back(Ops[2 * NF + 3]); |
4051 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4052 | } |
4053 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4054 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4054, __extension__ __PRETTY_FUNCTION__)); |
4055 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4056 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4057 | clang::CharUnits Align = |
4058 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4059 | llvm::Value *V; |
4060 | for (unsigned I = 0; I < NF; ++I) { |
4061 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4062 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4063 | } |
4064 | return V; |
4065 | } |
4066 | break; |
4067 | case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tama: |
4068 | case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tama: |
4069 | case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tama: |
4070 | case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tama: |
4071 | ID = Intrinsic::riscv_vloxseg4_mask; |
4072 | NF = 4; |
4073 | DefaultPolicy = 3; |
4074 | |
4075 | { |
4076 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4077 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4078 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4079 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4080 | SmallVector<llvm::Value*, 12> Operands; |
4081 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4082 | for (unsigned I = 0; I < NF; ++I) |
4083 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4084 | Operands.push_back(Ops[NF + 1]); |
4085 | Operands.push_back(Ops[NF + 2]); |
4086 | Operands.push_back(Ops[NF]); |
4087 | Operands.push_back(Ops[NF + 3]); |
4088 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4089 | } else { |
4090 | for (unsigned I = 0; I < NF; ++I) |
4091 | Operands.push_back(Ops[NF + I + 1]); |
4092 | Operands.push_back(Ops[2 * NF + 1]); |
4093 | Operands.push_back(Ops[2 * NF + 2]); |
4094 | Operands.push_back(Ops[NF]); |
4095 | Operands.push_back(Ops[2 * NF + 3]); |
4096 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4097 | } |
4098 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4099 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4099, __extension__ __PRETTY_FUNCTION__)); |
4100 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4101 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4102 | clang::CharUnits Align = |
4103 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4104 | llvm::Value *V; |
4105 | for (unsigned I = 0; I < NF; ++I) { |
4106 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4107 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4108 | } |
4109 | return V; |
4110 | } |
4111 | break; |
4112 | case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tumu: |
4113 | case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tumu: |
4114 | case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tumu: |
4115 | case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tumu: |
4116 | ID = Intrinsic::riscv_vloxseg4_mask; |
4117 | NF = 4; |
4118 | DefaultPolicy = 0; |
4119 | |
4120 | { |
4121 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4122 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4123 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4124 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4125 | SmallVector<llvm::Value*, 12> Operands; |
4126 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4127 | for (unsigned I = 0; I < NF; ++I) |
4128 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4129 | Operands.push_back(Ops[NF + 1]); |
4130 | Operands.push_back(Ops[NF + 2]); |
4131 | Operands.push_back(Ops[NF]); |
4132 | Operands.push_back(Ops[NF + 3]); |
4133 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4134 | } else { |
4135 | for (unsigned I = 0; I < NF; ++I) |
4136 | Operands.push_back(Ops[NF + I + 1]); |
4137 | Operands.push_back(Ops[2 * NF + 1]); |
4138 | Operands.push_back(Ops[2 * NF + 2]); |
4139 | Operands.push_back(Ops[NF]); |
4140 | Operands.push_back(Ops[2 * NF + 3]); |
4141 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4142 | } |
4143 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4144 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4144, __extension__ __PRETTY_FUNCTION__)); |
4145 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4146 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4147 | clang::CharUnits Align = |
4148 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4149 | llvm::Value *V; |
4150 | for (unsigned I = 0; I < NF; ++I) { |
4151 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4152 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4153 | } |
4154 | return V; |
4155 | } |
4156 | break; |
4157 | case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tamu: |
4158 | case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tamu: |
4159 | case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tamu: |
4160 | case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tamu: |
4161 | ID = Intrinsic::riscv_vloxseg4_mask; |
4162 | NF = 4; |
4163 | DefaultPolicy = 1; |
4164 | |
4165 | { |
4166 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4167 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4168 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4169 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4170 | SmallVector<llvm::Value*, 12> Operands; |
4171 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4172 | for (unsigned I = 0; I < NF; ++I) |
4173 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4174 | Operands.push_back(Ops[NF + 1]); |
4175 | Operands.push_back(Ops[NF + 2]); |
4176 | Operands.push_back(Ops[NF]); |
4177 | Operands.push_back(Ops[NF + 3]); |
4178 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4179 | } else { |
4180 | for (unsigned I = 0; I < NF; ++I) |
4181 | Operands.push_back(Ops[NF + I + 1]); |
4182 | Operands.push_back(Ops[2 * NF + 1]); |
4183 | Operands.push_back(Ops[2 * NF + 2]); |
4184 | Operands.push_back(Ops[NF]); |
4185 | Operands.push_back(Ops[2 * NF + 3]); |
4186 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4187 | } |
4188 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4189 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4189, __extension__ __PRETTY_FUNCTION__)); |
4190 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4191 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4192 | clang::CharUnits Align = |
4193 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4194 | llvm::Value *V; |
4195 | for (unsigned I = 0; I < NF; ++I) { |
4196 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4197 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4198 | } |
4199 | return V; |
4200 | } |
4201 | break; |
4202 | case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tu: |
4203 | case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tu: |
4204 | case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tu: |
4205 | case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tu: |
4206 | ID = Intrinsic::riscv_vloxseg5; |
4207 | NF = 5; |
4208 | DefaultPolicy = 0; |
4209 | |
4210 | { |
4211 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4212 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4213 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4214 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
4215 | SmallVector<llvm::Value*, 12> Operands; |
4216 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
4217 | for (unsigned I = 0; I < NF; ++I) |
4218 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4219 | Operands.push_back(Ops[NF]); |
4220 | Operands.push_back(Ops[NF + 1]); |
4221 | Operands.push_back(Ops[NF + 2]); |
4222 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4223 | } else { |
4224 | for (unsigned I = 0; I < NF; ++I) |
4225 | Operands.push_back(Ops[NF + I]); |
4226 | Operands.push_back(Ops[2 * NF]); |
4227 | Operands.push_back(Ops[2 * NF + 1]); |
4228 | Operands.push_back(Ops[2 * NF + 2]); |
4229 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4230 | } |
4231 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4232 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4233 | clang::CharUnits Align = |
4234 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4235 | llvm::Value *V; |
4236 | for (unsigned I = 0; I < NF; ++I) { |
4237 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4238 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4239 | } |
4240 | return V; |
4241 | } |
4242 | break; |
4243 | case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_ta: |
4244 | case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_ta: |
4245 | case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_ta: |
4246 | case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_ta: |
4247 | ID = Intrinsic::riscv_vloxseg5; |
4248 | NF = 5; |
4249 | DefaultPolicy = 1; |
4250 | |
4251 | { |
4252 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4253 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4254 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4255 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
4256 | SmallVector<llvm::Value*, 12> Operands; |
4257 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
4258 | for (unsigned I = 0; I < NF; ++I) |
4259 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4260 | Operands.push_back(Ops[NF]); |
4261 | Operands.push_back(Ops[NF + 1]); |
4262 | Operands.push_back(Ops[NF + 2]); |
4263 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4264 | } else { |
4265 | for (unsigned I = 0; I < NF; ++I) |
4266 | Operands.push_back(Ops[NF + I]); |
4267 | Operands.push_back(Ops[2 * NF]); |
4268 | Operands.push_back(Ops[2 * NF + 1]); |
4269 | Operands.push_back(Ops[2 * NF + 2]); |
4270 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4271 | } |
4272 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4273 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4274 | clang::CharUnits Align = |
4275 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4276 | llvm::Value *V; |
4277 | for (unsigned I = 0; I < NF; ++I) { |
4278 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4279 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4280 | } |
4281 | return V; |
4282 | } |
4283 | break; |
4284 | case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tuma: |
4285 | case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tuma: |
4286 | case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tuma: |
4287 | case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tuma: |
4288 | ID = Intrinsic::riscv_vloxseg5_mask; |
4289 | NF = 5; |
4290 | DefaultPolicy = 2; |
4291 | |
4292 | { |
4293 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4294 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4295 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4296 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4297 | SmallVector<llvm::Value*, 12> Operands; |
4298 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4299 | for (unsigned I = 0; I < NF; ++I) |
4300 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4301 | Operands.push_back(Ops[NF + 1]); |
4302 | Operands.push_back(Ops[NF + 2]); |
4303 | Operands.push_back(Ops[NF]); |
4304 | Operands.push_back(Ops[NF + 3]); |
4305 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4306 | } else { |
4307 | for (unsigned I = 0; I < NF; ++I) |
4308 | Operands.push_back(Ops[NF + I + 1]); |
4309 | Operands.push_back(Ops[2 * NF + 1]); |
4310 | Operands.push_back(Ops[2 * NF + 2]); |
4311 | Operands.push_back(Ops[NF]); |
4312 | Operands.push_back(Ops[2 * NF + 3]); |
4313 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4314 | } |
4315 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4316 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4316, __extension__ __PRETTY_FUNCTION__)); |
4317 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4318 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4319 | clang::CharUnits Align = |
4320 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4321 | llvm::Value *V; |
4322 | for (unsigned I = 0; I < NF; ++I) { |
4323 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4324 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4325 | } |
4326 | return V; |
4327 | } |
4328 | break; |
4329 | case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tama: |
4330 | case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tama: |
4331 | case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tama: |
4332 | case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tama: |
4333 | ID = Intrinsic::riscv_vloxseg5_mask; |
4334 | NF = 5; |
4335 | DefaultPolicy = 3; |
4336 | |
4337 | { |
4338 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4339 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4340 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4341 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4342 | SmallVector<llvm::Value*, 12> Operands; |
4343 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4344 | for (unsigned I = 0; I < NF; ++I) |
4345 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4346 | Operands.push_back(Ops[NF + 1]); |
4347 | Operands.push_back(Ops[NF + 2]); |
4348 | Operands.push_back(Ops[NF]); |
4349 | Operands.push_back(Ops[NF + 3]); |
4350 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4351 | } else { |
4352 | for (unsigned I = 0; I < NF; ++I) |
4353 | Operands.push_back(Ops[NF + I + 1]); |
4354 | Operands.push_back(Ops[2 * NF + 1]); |
4355 | Operands.push_back(Ops[2 * NF + 2]); |
4356 | Operands.push_back(Ops[NF]); |
4357 | Operands.push_back(Ops[2 * NF + 3]); |
4358 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4359 | } |
4360 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4361 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4361, __extension__ __PRETTY_FUNCTION__)); |
4362 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4363 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4364 | clang::CharUnits Align = |
4365 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4366 | llvm::Value *V; |
4367 | for (unsigned I = 0; I < NF; ++I) { |
4368 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4369 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4370 | } |
4371 | return V; |
4372 | } |
4373 | break; |
4374 | case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tumu: |
4375 | case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tumu: |
4376 | case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tumu: |
4377 | case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tumu: |
4378 | ID = Intrinsic::riscv_vloxseg5_mask; |
4379 | NF = 5; |
4380 | DefaultPolicy = 0; |
4381 | |
4382 | { |
4383 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4384 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4385 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4386 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4387 | SmallVector<llvm::Value*, 12> Operands; |
4388 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4389 | for (unsigned I = 0; I < NF; ++I) |
4390 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4391 | Operands.push_back(Ops[NF + 1]); |
4392 | Operands.push_back(Ops[NF + 2]); |
4393 | Operands.push_back(Ops[NF]); |
4394 | Operands.push_back(Ops[NF + 3]); |
4395 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4396 | } else { |
4397 | for (unsigned I = 0; I < NF; ++I) |
4398 | Operands.push_back(Ops[NF + I + 1]); |
4399 | Operands.push_back(Ops[2 * NF + 1]); |
4400 | Operands.push_back(Ops[2 * NF + 2]); |
4401 | Operands.push_back(Ops[NF]); |
4402 | Operands.push_back(Ops[2 * NF + 3]); |
4403 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4404 | } |
4405 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4406 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4406, __extension__ __PRETTY_FUNCTION__)); |
4407 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4408 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4409 | clang::CharUnits Align = |
4410 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4411 | llvm::Value *V; |
4412 | for (unsigned I = 0; I < NF; ++I) { |
4413 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4414 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4415 | } |
4416 | return V; |
4417 | } |
4418 | break; |
4419 | case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tamu: |
4420 | case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tamu: |
4421 | case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tamu: |
4422 | case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tamu: |
4423 | ID = Intrinsic::riscv_vloxseg5_mask; |
4424 | NF = 5; |
4425 | DefaultPolicy = 1; |
4426 | |
4427 | { |
4428 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4429 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4430 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4431 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4432 | SmallVector<llvm::Value*, 12> Operands; |
4433 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4434 | for (unsigned I = 0; I < NF; ++I) |
4435 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4436 | Operands.push_back(Ops[NF + 1]); |
4437 | Operands.push_back(Ops[NF + 2]); |
4438 | Operands.push_back(Ops[NF]); |
4439 | Operands.push_back(Ops[NF + 3]); |
4440 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4441 | } else { |
4442 | for (unsigned I = 0; I < NF; ++I) |
4443 | Operands.push_back(Ops[NF + I + 1]); |
4444 | Operands.push_back(Ops[2 * NF + 1]); |
4445 | Operands.push_back(Ops[2 * NF + 2]); |
4446 | Operands.push_back(Ops[NF]); |
4447 | Operands.push_back(Ops[2 * NF + 3]); |
4448 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4449 | } |
4450 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4451 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4451, __extension__ __PRETTY_FUNCTION__)); |
4452 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4453 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4454 | clang::CharUnits Align = |
4455 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4456 | llvm::Value *V; |
4457 | for (unsigned I = 0; I < NF; ++I) { |
4458 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4459 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4460 | } |
4461 | return V; |
4462 | } |
4463 | break; |
4464 | case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tu: |
4465 | case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tu: |
4466 | case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tu: |
4467 | case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tu: |
4468 | ID = Intrinsic::riscv_vloxseg6; |
4469 | NF = 6; |
4470 | DefaultPolicy = 0; |
4471 | |
4472 | { |
4473 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4474 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4475 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4476 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
4477 | SmallVector<llvm::Value*, 12> Operands; |
4478 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
4479 | for (unsigned I = 0; I < NF; ++I) |
4480 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4481 | Operands.push_back(Ops[NF]); |
4482 | Operands.push_back(Ops[NF + 1]); |
4483 | Operands.push_back(Ops[NF + 2]); |
4484 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4485 | } else { |
4486 | for (unsigned I = 0; I < NF; ++I) |
4487 | Operands.push_back(Ops[NF + I]); |
4488 | Operands.push_back(Ops[2 * NF]); |
4489 | Operands.push_back(Ops[2 * NF + 1]); |
4490 | Operands.push_back(Ops[2 * NF + 2]); |
4491 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4492 | } |
4493 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4494 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4495 | clang::CharUnits Align = |
4496 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4497 | llvm::Value *V; |
4498 | for (unsigned I = 0; I < NF; ++I) { |
4499 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4500 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4501 | } |
4502 | return V; |
4503 | } |
4504 | break; |
4505 | case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_ta: |
4506 | case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_ta: |
4507 | case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_ta: |
4508 | case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_ta: |
4509 | ID = Intrinsic::riscv_vloxseg6; |
4510 | NF = 6; |
4511 | DefaultPolicy = 1; |
4512 | |
4513 | { |
4514 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4515 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4516 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4517 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
4518 | SmallVector<llvm::Value*, 12> Operands; |
4519 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
4520 | for (unsigned I = 0; I < NF; ++I) |
4521 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4522 | Operands.push_back(Ops[NF]); |
4523 | Operands.push_back(Ops[NF + 1]); |
4524 | Operands.push_back(Ops[NF + 2]); |
4525 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4526 | } else { |
4527 | for (unsigned I = 0; I < NF; ++I) |
4528 | Operands.push_back(Ops[NF + I]); |
4529 | Operands.push_back(Ops[2 * NF]); |
4530 | Operands.push_back(Ops[2 * NF + 1]); |
4531 | Operands.push_back(Ops[2 * NF + 2]); |
4532 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4533 | } |
4534 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4535 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4536 | clang::CharUnits Align = |
4537 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4538 | llvm::Value *V; |
4539 | for (unsigned I = 0; I < NF; ++I) { |
4540 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4541 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4542 | } |
4543 | return V; |
4544 | } |
4545 | break; |
4546 | case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tuma: |
4547 | case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tuma: |
4548 | case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tuma: |
4549 | case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tuma: |
4550 | ID = Intrinsic::riscv_vloxseg6_mask; |
4551 | NF = 6; |
4552 | DefaultPolicy = 2; |
4553 | |
4554 | { |
4555 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4556 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4557 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4558 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4559 | SmallVector<llvm::Value*, 12> Operands; |
4560 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4561 | for (unsigned I = 0; I < NF; ++I) |
4562 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4563 | Operands.push_back(Ops[NF + 1]); |
4564 | Operands.push_back(Ops[NF + 2]); |
4565 | Operands.push_back(Ops[NF]); |
4566 | Operands.push_back(Ops[NF + 3]); |
4567 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4568 | } else { |
4569 | for (unsigned I = 0; I < NF; ++I) |
4570 | Operands.push_back(Ops[NF + I + 1]); |
4571 | Operands.push_back(Ops[2 * NF + 1]); |
4572 | Operands.push_back(Ops[2 * NF + 2]); |
4573 | Operands.push_back(Ops[NF]); |
4574 | Operands.push_back(Ops[2 * NF + 3]); |
4575 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4576 | } |
4577 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4578 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4578, __extension__ __PRETTY_FUNCTION__)); |
4579 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4580 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4581 | clang::CharUnits Align = |
4582 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4583 | llvm::Value *V; |
4584 | for (unsigned I = 0; I < NF; ++I) { |
4585 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4586 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4587 | } |
4588 | return V; |
4589 | } |
4590 | break; |
4591 | case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tama: |
4592 | case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tama: |
4593 | case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tama: |
4594 | case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tama: |
4595 | ID = Intrinsic::riscv_vloxseg6_mask; |
4596 | NF = 6; |
4597 | DefaultPolicy = 3; |
4598 | |
4599 | { |
4600 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4601 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4602 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4603 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4604 | SmallVector<llvm::Value*, 12> Operands; |
4605 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4606 | for (unsigned I = 0; I < NF; ++I) |
4607 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4608 | Operands.push_back(Ops[NF + 1]); |
4609 | Operands.push_back(Ops[NF + 2]); |
4610 | Operands.push_back(Ops[NF]); |
4611 | Operands.push_back(Ops[NF + 3]); |
4612 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4613 | } else { |
4614 | for (unsigned I = 0; I < NF; ++I) |
4615 | Operands.push_back(Ops[NF + I + 1]); |
4616 | Operands.push_back(Ops[2 * NF + 1]); |
4617 | Operands.push_back(Ops[2 * NF + 2]); |
4618 | Operands.push_back(Ops[NF]); |
4619 | Operands.push_back(Ops[2 * NF + 3]); |
4620 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4621 | } |
4622 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4623 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4623, __extension__ __PRETTY_FUNCTION__)); |
4624 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4625 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4626 | clang::CharUnits Align = |
4627 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4628 | llvm::Value *V; |
4629 | for (unsigned I = 0; I < NF; ++I) { |
4630 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4631 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4632 | } |
4633 | return V; |
4634 | } |
4635 | break; |
4636 | case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tumu: |
4637 | case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tumu: |
4638 | case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tumu: |
4639 | case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tumu: |
4640 | ID = Intrinsic::riscv_vloxseg6_mask; |
4641 | NF = 6; |
4642 | DefaultPolicy = 0; |
4643 | |
4644 | { |
4645 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4646 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4647 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4648 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4649 | SmallVector<llvm::Value*, 12> Operands; |
4650 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4651 | for (unsigned I = 0; I < NF; ++I) |
4652 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4653 | Operands.push_back(Ops[NF + 1]); |
4654 | Operands.push_back(Ops[NF + 2]); |
4655 | Operands.push_back(Ops[NF]); |
4656 | Operands.push_back(Ops[NF + 3]); |
4657 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4658 | } else { |
4659 | for (unsigned I = 0; I < NF; ++I) |
4660 | Operands.push_back(Ops[NF + I + 1]); |
4661 | Operands.push_back(Ops[2 * NF + 1]); |
4662 | Operands.push_back(Ops[2 * NF + 2]); |
4663 | Operands.push_back(Ops[NF]); |
4664 | Operands.push_back(Ops[2 * NF + 3]); |
4665 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4666 | } |
4667 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4668 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4668, __extension__ __PRETTY_FUNCTION__)); |
4669 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4670 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4671 | clang::CharUnits Align = |
4672 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4673 | llvm::Value *V; |
4674 | for (unsigned I = 0; I < NF; ++I) { |
4675 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4676 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4677 | } |
4678 | return V; |
4679 | } |
4680 | break; |
4681 | case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tamu: |
4682 | case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tamu: |
4683 | case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tamu: |
4684 | case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tamu: |
4685 | ID = Intrinsic::riscv_vloxseg6_mask; |
4686 | NF = 6; |
4687 | DefaultPolicy = 1; |
4688 | |
4689 | { |
4690 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4691 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4692 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4693 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4694 | SmallVector<llvm::Value*, 12> Operands; |
4695 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4696 | for (unsigned I = 0; I < NF; ++I) |
4697 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4698 | Operands.push_back(Ops[NF + 1]); |
4699 | Operands.push_back(Ops[NF + 2]); |
4700 | Operands.push_back(Ops[NF]); |
4701 | Operands.push_back(Ops[NF + 3]); |
4702 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4703 | } else { |
4704 | for (unsigned I = 0; I < NF; ++I) |
4705 | Operands.push_back(Ops[NF + I + 1]); |
4706 | Operands.push_back(Ops[2 * NF + 1]); |
4707 | Operands.push_back(Ops[2 * NF + 2]); |
4708 | Operands.push_back(Ops[NF]); |
4709 | Operands.push_back(Ops[2 * NF + 3]); |
4710 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4711 | } |
4712 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4713 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4713, __extension__ __PRETTY_FUNCTION__)); |
4714 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4715 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4716 | clang::CharUnits Align = |
4717 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4718 | llvm::Value *V; |
4719 | for (unsigned I = 0; I < NF; ++I) { |
4720 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4721 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4722 | } |
4723 | return V; |
4724 | } |
4725 | break; |
4726 | case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tu: |
4727 | case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tu: |
4728 | case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tu: |
4729 | case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tu: |
4730 | ID = Intrinsic::riscv_vloxseg7; |
4731 | NF = 7; |
4732 | DefaultPolicy = 0; |
4733 | |
4734 | { |
4735 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4736 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4737 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4738 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
4739 | SmallVector<llvm::Value*, 12> Operands; |
4740 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
4741 | for (unsigned I = 0; I < NF; ++I) |
4742 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4743 | Operands.push_back(Ops[NF]); |
4744 | Operands.push_back(Ops[NF + 1]); |
4745 | Operands.push_back(Ops[NF + 2]); |
4746 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4747 | } else { |
4748 | for (unsigned I = 0; I < NF; ++I) |
4749 | Operands.push_back(Ops[NF + I]); |
4750 | Operands.push_back(Ops[2 * NF]); |
4751 | Operands.push_back(Ops[2 * NF + 1]); |
4752 | Operands.push_back(Ops[2 * NF + 2]); |
4753 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4754 | } |
4755 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4756 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4757 | clang::CharUnits Align = |
4758 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4759 | llvm::Value *V; |
4760 | for (unsigned I = 0; I < NF; ++I) { |
4761 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4762 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4763 | } |
4764 | return V; |
4765 | } |
4766 | break; |
4767 | case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_ta: |
4768 | case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_ta: |
4769 | case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_ta: |
4770 | case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_ta: |
4771 | ID = Intrinsic::riscv_vloxseg7; |
4772 | NF = 7; |
4773 | DefaultPolicy = 1; |
4774 | |
4775 | { |
4776 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4777 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4778 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4779 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
4780 | SmallVector<llvm::Value*, 12> Operands; |
4781 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
4782 | for (unsigned I = 0; I < NF; ++I) |
4783 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4784 | Operands.push_back(Ops[NF]); |
4785 | Operands.push_back(Ops[NF + 1]); |
4786 | Operands.push_back(Ops[NF + 2]); |
4787 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
4788 | } else { |
4789 | for (unsigned I = 0; I < NF; ++I) |
4790 | Operands.push_back(Ops[NF + I]); |
4791 | Operands.push_back(Ops[2 * NF]); |
4792 | Operands.push_back(Ops[2 * NF + 1]); |
4793 | Operands.push_back(Ops[2 * NF + 2]); |
4794 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
4795 | } |
4796 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4797 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4798 | clang::CharUnits Align = |
4799 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4800 | llvm::Value *V; |
4801 | for (unsigned I = 0; I < NF; ++I) { |
4802 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4803 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4804 | } |
4805 | return V; |
4806 | } |
4807 | break; |
4808 | case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tuma: |
4809 | case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tuma: |
4810 | case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tuma: |
4811 | case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tuma: |
4812 | ID = Intrinsic::riscv_vloxseg7_mask; |
4813 | NF = 7; |
4814 | DefaultPolicy = 2; |
4815 | |
4816 | { |
4817 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4818 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4819 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4820 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4821 | SmallVector<llvm::Value*, 12> Operands; |
4822 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4823 | for (unsigned I = 0; I < NF; ++I) |
4824 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4825 | Operands.push_back(Ops[NF + 1]); |
4826 | Operands.push_back(Ops[NF + 2]); |
4827 | Operands.push_back(Ops[NF]); |
4828 | Operands.push_back(Ops[NF + 3]); |
4829 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4830 | } else { |
4831 | for (unsigned I = 0; I < NF; ++I) |
4832 | Operands.push_back(Ops[NF + I + 1]); |
4833 | Operands.push_back(Ops[2 * NF + 1]); |
4834 | Operands.push_back(Ops[2 * NF + 2]); |
4835 | Operands.push_back(Ops[NF]); |
4836 | Operands.push_back(Ops[2 * NF + 3]); |
4837 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4838 | } |
4839 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4840 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4840, __extension__ __PRETTY_FUNCTION__)); |
4841 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4842 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4843 | clang::CharUnits Align = |
4844 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4845 | llvm::Value *V; |
4846 | for (unsigned I = 0; I < NF; ++I) { |
4847 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4848 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4849 | } |
4850 | return V; |
4851 | } |
4852 | break; |
4853 | case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tama: |
4854 | case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tama: |
4855 | case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tama: |
4856 | case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tama: |
4857 | ID = Intrinsic::riscv_vloxseg7_mask; |
4858 | NF = 7; |
4859 | DefaultPolicy = 3; |
4860 | |
4861 | { |
4862 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4863 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4864 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4865 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4866 | SmallVector<llvm::Value*, 12> Operands; |
4867 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4868 | for (unsigned I = 0; I < NF; ++I) |
4869 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4870 | Operands.push_back(Ops[NF + 1]); |
4871 | Operands.push_back(Ops[NF + 2]); |
4872 | Operands.push_back(Ops[NF]); |
4873 | Operands.push_back(Ops[NF + 3]); |
4874 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4875 | } else { |
4876 | for (unsigned I = 0; I < NF; ++I) |
4877 | Operands.push_back(Ops[NF + I + 1]); |
4878 | Operands.push_back(Ops[2 * NF + 1]); |
4879 | Operands.push_back(Ops[2 * NF + 2]); |
4880 | Operands.push_back(Ops[NF]); |
4881 | Operands.push_back(Ops[2 * NF + 3]); |
4882 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4883 | } |
4884 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4885 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4885, __extension__ __PRETTY_FUNCTION__)); |
4886 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4887 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4888 | clang::CharUnits Align = |
4889 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4890 | llvm::Value *V; |
4891 | for (unsigned I = 0; I < NF; ++I) { |
4892 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4893 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4894 | } |
4895 | return V; |
4896 | } |
4897 | break; |
4898 | case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tumu: |
4899 | case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tumu: |
4900 | case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tumu: |
4901 | case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tumu: |
4902 | ID = Intrinsic::riscv_vloxseg7_mask; |
4903 | NF = 7; |
4904 | DefaultPolicy = 0; |
4905 | |
4906 | { |
4907 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4908 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4909 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4910 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4911 | SmallVector<llvm::Value*, 12> Operands; |
4912 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4913 | for (unsigned I = 0; I < NF; ++I) |
4914 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4915 | Operands.push_back(Ops[NF + 1]); |
4916 | Operands.push_back(Ops[NF + 2]); |
4917 | Operands.push_back(Ops[NF]); |
4918 | Operands.push_back(Ops[NF + 3]); |
4919 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4920 | } else { |
4921 | for (unsigned I = 0; I < NF; ++I) |
4922 | Operands.push_back(Ops[NF + I + 1]); |
4923 | Operands.push_back(Ops[2 * NF + 1]); |
4924 | Operands.push_back(Ops[2 * NF + 2]); |
4925 | Operands.push_back(Ops[NF]); |
4926 | Operands.push_back(Ops[2 * NF + 3]); |
4927 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4928 | } |
4929 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4930 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4930, __extension__ __PRETTY_FUNCTION__)); |
4931 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4932 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4933 | clang::CharUnits Align = |
4934 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4935 | llvm::Value *V; |
4936 | for (unsigned I = 0; I < NF; ++I) { |
4937 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4938 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4939 | } |
4940 | return V; |
4941 | } |
4942 | break; |
4943 | case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tamu: |
4944 | case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tamu: |
4945 | case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tamu: |
4946 | case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tamu: |
4947 | ID = Intrinsic::riscv_vloxseg7_mask; |
4948 | NF = 7; |
4949 | DefaultPolicy = 1; |
4950 | |
4951 | { |
4952 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
4953 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
4954 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
4955 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
4956 | SmallVector<llvm::Value*, 12> Operands; |
4957 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
4958 | for (unsigned I = 0; I < NF; ++I) |
4959 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
4960 | Operands.push_back(Ops[NF + 1]); |
4961 | Operands.push_back(Ops[NF + 2]); |
4962 | Operands.push_back(Ops[NF]); |
4963 | Operands.push_back(Ops[NF + 3]); |
4964 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
4965 | } else { |
4966 | for (unsigned I = 0; I < NF; ++I) |
4967 | Operands.push_back(Ops[NF + I + 1]); |
4968 | Operands.push_back(Ops[2 * NF + 1]); |
4969 | Operands.push_back(Ops[2 * NF + 2]); |
4970 | Operands.push_back(Ops[NF]); |
4971 | Operands.push_back(Ops[2 * NF + 3]); |
4972 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
4973 | } |
4974 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
4975 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 4975, __extension__ __PRETTY_FUNCTION__)); |
4976 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
4977 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
4978 | clang::CharUnits Align = |
4979 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
4980 | llvm::Value *V; |
4981 | for (unsigned I = 0; I < NF; ++I) { |
4982 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
4983 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
4984 | } |
4985 | return V; |
4986 | } |
4987 | break; |
4988 | case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tu: |
4989 | case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tu: |
4990 | case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tu: |
4991 | case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tu: |
4992 | ID = Intrinsic::riscv_vloxseg8; |
4993 | NF = 8; |
4994 | DefaultPolicy = 0; |
4995 | |
4996 | { |
4997 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
4998 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
4999 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5000 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
5001 | SmallVector<llvm::Value*, 12> Operands; |
5002 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5003 | for (unsigned I = 0; I < NF; ++I) |
5004 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5005 | Operands.push_back(Ops[NF]); |
5006 | Operands.push_back(Ops[NF + 1]); |
5007 | Operands.push_back(Ops[NF + 2]); |
5008 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
5009 | } else { |
5010 | for (unsigned I = 0; I < NF; ++I) |
5011 | Operands.push_back(Ops[NF + I]); |
5012 | Operands.push_back(Ops[2 * NF]); |
5013 | Operands.push_back(Ops[2 * NF + 1]); |
5014 | Operands.push_back(Ops[2 * NF + 2]); |
5015 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
5016 | } |
5017 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5018 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5019 | clang::CharUnits Align = |
5020 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5021 | llvm::Value *V; |
5022 | for (unsigned I = 0; I < NF; ++I) { |
5023 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5024 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5025 | } |
5026 | return V; |
5027 | } |
5028 | break; |
5029 | case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_ta: |
5030 | case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_ta: |
5031 | case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_ta: |
5032 | case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_ta: |
5033 | ID = Intrinsic::riscv_vloxseg8; |
5034 | NF = 8; |
5035 | DefaultPolicy = 1; |
5036 | |
5037 | { |
5038 | // TA builtin: (val0 address, val1 address, ..., ptr, index, vl) |
5039 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, index, vl) |
5040 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5041 | // intrinsic: (passthru0, passthru1, ..., ptr, index, vl) |
5042 | SmallVector<llvm::Value*, 12> Operands; |
5043 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5044 | for (unsigned I = 0; I < NF; ++I) |
5045 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5046 | Operands.push_back(Ops[NF]); |
5047 | Operands.push_back(Ops[NF + 1]); |
5048 | Operands.push_back(Ops[NF + 2]); |
5049 | IntrinsicTypes = {ResultType, Ops[NF + 1]->getType(), Ops.back()->getType()}; |
5050 | } else { |
5051 | for (unsigned I = 0; I < NF; ++I) |
5052 | Operands.push_back(Ops[NF + I]); |
5053 | Operands.push_back(Ops[2 * NF]); |
5054 | Operands.push_back(Ops[2 * NF + 1]); |
5055 | Operands.push_back(Ops[2 * NF + 2]); |
5056 | IntrinsicTypes = {ResultType, Ops[2 * NF + 1]->getType(), Ops.back()->getType()}; |
5057 | } |
5058 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5059 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5060 | clang::CharUnits Align = |
5061 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5062 | llvm::Value *V; |
5063 | for (unsigned I = 0; I < NF; ++I) { |
5064 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5065 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5066 | } |
5067 | return V; |
5068 | } |
5069 | break; |
5070 | case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tuma: |
5071 | case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tuma: |
5072 | case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tuma: |
5073 | case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tuma: |
5074 | ID = Intrinsic::riscv_vloxseg8_mask; |
5075 | NF = 8; |
5076 | DefaultPolicy = 2; |
5077 | |
5078 | { |
5079 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
5080 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
5081 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5082 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
5083 | SmallVector<llvm::Value*, 12> Operands; |
5084 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5085 | for (unsigned I = 0; I < NF; ++I) |
5086 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5087 | Operands.push_back(Ops[NF + 1]); |
5088 | Operands.push_back(Ops[NF + 2]); |
5089 | Operands.push_back(Ops[NF]); |
5090 | Operands.push_back(Ops[NF + 3]); |
5091 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
5092 | } else { |
5093 | for (unsigned I = 0; I < NF; ++I) |
5094 | Operands.push_back(Ops[NF + I + 1]); |
5095 | Operands.push_back(Ops[2 * NF + 1]); |
5096 | Operands.push_back(Ops[2 * NF + 2]); |
5097 | Operands.push_back(Ops[NF]); |
5098 | Operands.push_back(Ops[2 * NF + 3]); |
5099 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
5100 | } |
5101 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5102 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5102, __extension__ __PRETTY_FUNCTION__)); |
5103 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5104 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5105 | clang::CharUnits Align = |
5106 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5107 | llvm::Value *V; |
5108 | for (unsigned I = 0; I < NF; ++I) { |
5109 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5110 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5111 | } |
5112 | return V; |
5113 | } |
5114 | break; |
5115 | case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tama: |
5116 | case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tama: |
5117 | case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tama: |
5118 | case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tama: |
5119 | ID = Intrinsic::riscv_vloxseg8_mask; |
5120 | NF = 8; |
5121 | DefaultPolicy = 3; |
5122 | |
5123 | { |
5124 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
5125 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
5126 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5127 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
5128 | SmallVector<llvm::Value*, 12> Operands; |
5129 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5130 | for (unsigned I = 0; I < NF; ++I) |
5131 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5132 | Operands.push_back(Ops[NF + 1]); |
5133 | Operands.push_back(Ops[NF + 2]); |
5134 | Operands.push_back(Ops[NF]); |
5135 | Operands.push_back(Ops[NF + 3]); |
5136 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
5137 | } else { |
5138 | for (unsigned I = 0; I < NF; ++I) |
5139 | Operands.push_back(Ops[NF + I + 1]); |
5140 | Operands.push_back(Ops[2 * NF + 1]); |
5141 | Operands.push_back(Ops[2 * NF + 2]); |
5142 | Operands.push_back(Ops[NF]); |
5143 | Operands.push_back(Ops[2 * NF + 3]); |
5144 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
5145 | } |
5146 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5147 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5147, __extension__ __PRETTY_FUNCTION__)); |
5148 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5149 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5150 | clang::CharUnits Align = |
5151 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5152 | llvm::Value *V; |
5153 | for (unsigned I = 0; I < NF; ++I) { |
5154 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5155 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5156 | } |
5157 | return V; |
5158 | } |
5159 | break; |
5160 | case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tumu: |
5161 | case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tumu: |
5162 | case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tumu: |
5163 | case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tumu: |
5164 | ID = Intrinsic::riscv_vloxseg8_mask; |
5165 | NF = 8; |
5166 | DefaultPolicy = 0; |
5167 | |
5168 | { |
5169 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
5170 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
5171 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5172 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
5173 | SmallVector<llvm::Value*, 12> Operands; |
5174 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5175 | for (unsigned I = 0; I < NF; ++I) |
5176 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5177 | Operands.push_back(Ops[NF + 1]); |
5178 | Operands.push_back(Ops[NF + 2]); |
5179 | Operands.push_back(Ops[NF]); |
5180 | Operands.push_back(Ops[NF + 3]); |
5181 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
5182 | } else { |
5183 | for (unsigned I = 0; I < NF; ++I) |
5184 | Operands.push_back(Ops[NF + I + 1]); |
5185 | Operands.push_back(Ops[2 * NF + 1]); |
5186 | Operands.push_back(Ops[2 * NF + 2]); |
5187 | Operands.push_back(Ops[NF]); |
5188 | Operands.push_back(Ops[2 * NF + 3]); |
5189 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
5190 | } |
5191 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5192 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5192, __extension__ __PRETTY_FUNCTION__)); |
5193 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5194 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5195 | clang::CharUnits Align = |
5196 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5197 | llvm::Value *V; |
5198 | for (unsigned I = 0; I < NF; ++I) { |
5199 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5200 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5201 | } |
5202 | return V; |
5203 | } |
5204 | break; |
5205 | case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tamu: |
5206 | case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tamu: |
5207 | case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tamu: |
5208 | case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tamu: |
5209 | ID = Intrinsic::riscv_vloxseg8_mask; |
5210 | NF = 8; |
5211 | DefaultPolicy = 1; |
5212 | |
5213 | { |
5214 | // TAMA builtin: (val0 address, ..., mask, ptr, index, vl) |
5215 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, index, vl) |
5216 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5217 | // intrinsic: (maskedoff0, ..., ptr, index, mask, vl) |
5218 | SmallVector<llvm::Value*, 12> Operands; |
5219 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5220 | for (unsigned I = 0; I < NF; ++I) |
5221 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5222 | Operands.push_back(Ops[NF + 1]); |
5223 | Operands.push_back(Ops[NF + 2]); |
5224 | Operands.push_back(Ops[NF]); |
5225 | Operands.push_back(Ops[NF + 3]); |
5226 | IntrinsicTypes = {ResultType, Ops[NF + 2]->getType(), Ops.back()->getType()}; |
5227 | } else { |
5228 | for (unsigned I = 0; I < NF; ++I) |
5229 | Operands.push_back(Ops[NF + I + 1]); |
5230 | Operands.push_back(Ops[2 * NF + 1]); |
5231 | Operands.push_back(Ops[2 * NF + 2]); |
5232 | Operands.push_back(Ops[NF]); |
5233 | Operands.push_back(Ops[2 * NF + 3]); |
5234 | IntrinsicTypes = {ResultType, Ops[2 * NF + 2]->getType(), Ops.back()->getType()}; |
5235 | } |
5236 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5237 | assert(Operands.size() == NF + 5)(static_cast <bool> (Operands.size() == NF + 5) ? void ( 0) : __assert_fail ("Operands.size() == NF + 5", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5237, __extension__ __PRETTY_FUNCTION__)); |
5238 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5239 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5240 | clang::CharUnits Align = |
5241 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5242 | llvm::Value *V; |
5243 | for (unsigned I = 0; I < NF; ++I) { |
5244 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5245 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5246 | } |
5247 | return V; |
5248 | } |
5249 | break; |
5250 | case RISCVVector::BI__builtin_rvv_vlse32_v_tu: |
5251 | case RISCVVector::BI__builtin_rvv_vlse64_v_tu: |
5252 | case RISCVVector::BI__builtin_rvv_vlse8_v_tu: |
5253 | case RISCVVector::BI__builtin_rvv_vlse16_v_tu: |
5254 | ID = Intrinsic::riscv_vlse; |
5255 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
5256 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5257 | break; |
5258 | case RISCVVector::BI__builtin_rvv_vlse32_v_ta: |
5259 | case RISCVVector::BI__builtin_rvv_vlse64_v_ta: |
5260 | case RISCVVector::BI__builtin_rvv_vlse8_v_ta: |
5261 | case RISCVVector::BI__builtin_rvv_vlse16_v_ta: |
5262 | ID = Intrinsic::riscv_vlse; |
5263 | Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo()); |
5264 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
5265 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5266 | break; |
5267 | case RISCVVector::BI__builtin_rvv_vlse32_v_tuma: |
5268 | case RISCVVector::BI__builtin_rvv_vlse64_v_tuma: |
5269 | case RISCVVector::BI__builtin_rvv_vlse8_v_tuma: |
5270 | case RISCVVector::BI__builtin_rvv_vlse16_v_tuma: |
5271 | ID = Intrinsic::riscv_vlse_mask; |
5272 | DefaultPolicy = 2; |
5273 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
5274 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
5275 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5276 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5277 | break; |
5278 | case RISCVVector::BI__builtin_rvv_vlse32_v_tama: |
5279 | case RISCVVector::BI__builtin_rvv_vlse64_v_tama: |
5280 | case RISCVVector::BI__builtin_rvv_vlse8_v_tama: |
5281 | case RISCVVector::BI__builtin_rvv_vlse16_v_tama: |
5282 | ID = Intrinsic::riscv_vlse_mask; |
5283 | DefaultPolicy = 3; |
5284 | Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo()); |
5285 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
5286 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5287 | Ops.insert(Ops.begin(), llvm::UndefValue::get(ResultType)); |
5288 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5289 | break; |
5290 | case RISCVVector::BI__builtin_rvv_vlse32_v_tumu: |
5291 | case RISCVVector::BI__builtin_rvv_vlse64_v_tumu: |
5292 | case RISCVVector::BI__builtin_rvv_vlse8_v_tumu: |
5293 | case RISCVVector::BI__builtin_rvv_vlse16_v_tumu: |
5294 | ID = Intrinsic::riscv_vlse_mask; |
5295 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
5296 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
5297 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5298 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5299 | break; |
5300 | case RISCVVector::BI__builtin_rvv_vlse32_v_tamu: |
5301 | case RISCVVector::BI__builtin_rvv_vlse64_v_tamu: |
5302 | case RISCVVector::BI__builtin_rvv_vlse8_v_tamu: |
5303 | case RISCVVector::BI__builtin_rvv_vlse16_v_tamu: |
5304 | ID = Intrinsic::riscv_vlse_mask; |
5305 | DefaultPolicy = 1; |
5306 | Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo()); |
5307 | std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1); |
5308 | Ops.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5309 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5310 | break; |
5311 | case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tu: |
5312 | case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tu: |
5313 | case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tu: |
5314 | case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tu: |
5315 | ID = Intrinsic::riscv_vlseg2; |
5316 | NF = 2; |
5317 | DefaultPolicy = 0; |
5318 | |
5319 | { |
5320 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5321 | // TA builtin: (val0 address, val1 address, ..., ptr, vl) |
5322 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, vl) |
5323 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5324 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
5325 | SmallVector<llvm::Value*, 10> Operands; |
5326 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5327 | for (unsigned I = 0; I < NF; ++I) |
5328 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5329 | Operands.push_back(Ops[NF]); |
5330 | Operands.push_back(Ops[NF + 1]); |
5331 | } else { |
5332 | for (unsigned I = 0; I < NF; ++I) |
5333 | Operands.push_back(Ops[NF + I]); |
5334 | Operands.push_back(Ops[2 * NF]); |
5335 | Operands.push_back(Ops[2 * NF + 1]); |
5336 | } |
5337 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5338 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5339 | clang::CharUnits Align = |
5340 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5341 | llvm::Value *V; |
5342 | for (unsigned I = 0; I < NF; ++I) { |
5343 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5344 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5345 | } |
5346 | return V; |
5347 | } |
5348 | break; |
5349 | case RISCVVector::BI__builtin_rvv_vlseg2e8_v_ta: |
5350 | case RISCVVector::BI__builtin_rvv_vlseg2e16_v_ta: |
5351 | case RISCVVector::BI__builtin_rvv_vlseg2e32_v_ta: |
5352 | case RISCVVector::BI__builtin_rvv_vlseg2e64_v_ta: |
5353 | ID = Intrinsic::riscv_vlseg2; |
5354 | NF = 2; |
5355 | DefaultPolicy = 1; |
5356 | |
5357 | { |
5358 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5359 | // TA builtin: (val0 address, val1 address, ..., ptr, vl) |
5360 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, vl) |
5361 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5362 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
5363 | SmallVector<llvm::Value*, 10> Operands; |
5364 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5365 | for (unsigned I = 0; I < NF; ++I) |
5366 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5367 | Operands.push_back(Ops[NF]); |
5368 | Operands.push_back(Ops[NF + 1]); |
5369 | } else { |
5370 | for (unsigned I = 0; I < NF; ++I) |
5371 | Operands.push_back(Ops[NF + I]); |
5372 | Operands.push_back(Ops[2 * NF]); |
5373 | Operands.push_back(Ops[2 * NF + 1]); |
5374 | } |
5375 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5376 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5377 | clang::CharUnits Align = |
5378 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5379 | llvm::Value *V; |
5380 | for (unsigned I = 0; I < NF; ++I) { |
5381 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5382 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5383 | } |
5384 | return V; |
5385 | } |
5386 | break; |
5387 | case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tuma: |
5388 | case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tuma: |
5389 | case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tuma: |
5390 | case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tuma: |
5391 | ID = Intrinsic::riscv_vlseg2_mask; |
5392 | NF = 2; |
5393 | DefaultPolicy = 2; |
5394 | |
5395 | { |
5396 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5397 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5398 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5399 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5400 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5401 | SmallVector<llvm::Value*, 12> Operands; |
5402 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5403 | for (unsigned I = 0; I < NF; ++I) |
5404 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5405 | Operands.push_back(Ops[NF + 1]); |
5406 | Operands.push_back(Ops[NF]); |
5407 | Operands.push_back(Ops[NF + 2]); |
5408 | } else { |
5409 | for (unsigned I = 0; I < NF; ++I) |
5410 | Operands.push_back(Ops[NF + I + 1]); |
5411 | Operands.push_back(Ops[2 * NF + 1]); |
5412 | Operands.push_back(Ops[NF]); |
5413 | Operands.push_back(Ops[2 * NF + 2]); |
5414 | } |
5415 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5416 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5416, __extension__ __PRETTY_FUNCTION__)); |
5417 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5418 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5419 | clang::CharUnits Align = |
5420 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5421 | llvm::Value *V; |
5422 | for (unsigned I = 0; I < NF; ++I) { |
5423 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5424 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5425 | } |
5426 | return V; |
5427 | } |
5428 | break; |
5429 | case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tama: |
5430 | case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tama: |
5431 | case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tama: |
5432 | case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tama: |
5433 | ID = Intrinsic::riscv_vlseg2_mask; |
5434 | NF = 2; |
5435 | DefaultPolicy = 3; |
5436 | |
5437 | { |
5438 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5439 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5440 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5441 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5442 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5443 | SmallVector<llvm::Value*, 12> Operands; |
5444 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5445 | for (unsigned I = 0; I < NF; ++I) |
5446 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5447 | Operands.push_back(Ops[NF + 1]); |
5448 | Operands.push_back(Ops[NF]); |
5449 | Operands.push_back(Ops[NF + 2]); |
5450 | } else { |
5451 | for (unsigned I = 0; I < NF; ++I) |
5452 | Operands.push_back(Ops[NF + I + 1]); |
5453 | Operands.push_back(Ops[2 * NF + 1]); |
5454 | Operands.push_back(Ops[NF]); |
5455 | Operands.push_back(Ops[2 * NF + 2]); |
5456 | } |
5457 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5458 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5458, __extension__ __PRETTY_FUNCTION__)); |
5459 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5460 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5461 | clang::CharUnits Align = |
5462 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5463 | llvm::Value *V; |
5464 | for (unsigned I = 0; I < NF; ++I) { |
5465 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5466 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5467 | } |
5468 | return V; |
5469 | } |
5470 | break; |
5471 | case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tumu: |
5472 | case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tumu: |
5473 | case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tumu: |
5474 | case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tumu: |
5475 | ID = Intrinsic::riscv_vlseg2_mask; |
5476 | NF = 2; |
5477 | DefaultPolicy = 0; |
5478 | |
5479 | { |
5480 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5481 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5482 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5483 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5484 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5485 | SmallVector<llvm::Value*, 12> Operands; |
5486 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5487 | for (unsigned I = 0; I < NF; ++I) |
5488 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5489 | Operands.push_back(Ops[NF + 1]); |
5490 | Operands.push_back(Ops[NF]); |
5491 | Operands.push_back(Ops[NF + 2]); |
5492 | } else { |
5493 | for (unsigned I = 0; I < NF; ++I) |
5494 | Operands.push_back(Ops[NF + I + 1]); |
5495 | Operands.push_back(Ops[2 * NF + 1]); |
5496 | Operands.push_back(Ops[NF]); |
5497 | Operands.push_back(Ops[2 * NF + 2]); |
5498 | } |
5499 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5500 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5500, __extension__ __PRETTY_FUNCTION__)); |
5501 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5502 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5503 | clang::CharUnits Align = |
5504 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5505 | llvm::Value *V; |
5506 | for (unsigned I = 0; I < NF; ++I) { |
5507 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5508 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5509 | } |
5510 | return V; |
5511 | } |
5512 | break; |
5513 | case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tamu: |
5514 | case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tamu: |
5515 | case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tamu: |
5516 | case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tamu: |
5517 | ID = Intrinsic::riscv_vlseg2_mask; |
5518 | NF = 2; |
5519 | DefaultPolicy = 1; |
5520 | |
5521 | { |
5522 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5523 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5524 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5525 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5526 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5527 | SmallVector<llvm::Value*, 12> Operands; |
5528 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5529 | for (unsigned I = 0; I < NF; ++I) |
5530 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5531 | Operands.push_back(Ops[NF + 1]); |
5532 | Operands.push_back(Ops[NF]); |
5533 | Operands.push_back(Ops[NF + 2]); |
5534 | } else { |
5535 | for (unsigned I = 0; I < NF; ++I) |
5536 | Operands.push_back(Ops[NF + I + 1]); |
5537 | Operands.push_back(Ops[2 * NF + 1]); |
5538 | Operands.push_back(Ops[NF]); |
5539 | Operands.push_back(Ops[2 * NF + 2]); |
5540 | } |
5541 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5542 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5542, __extension__ __PRETTY_FUNCTION__)); |
5543 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5544 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5545 | clang::CharUnits Align = |
5546 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5547 | llvm::Value *V; |
5548 | for (unsigned I = 0; I < NF; ++I) { |
5549 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5550 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5551 | } |
5552 | return V; |
5553 | } |
5554 | break; |
5555 | case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tu: |
5556 | case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tu: |
5557 | case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tu: |
5558 | case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tu: |
5559 | ID = Intrinsic::riscv_vlseg2ff; |
5560 | NF = 2; |
5561 | DefaultPolicy = 0; |
5562 | |
5563 | { |
5564 | // TA builtin: (val0 address, val1 address, ..., ptr, new_vl, vl) |
5565 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, new_vl, vl) |
5566 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5567 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5568 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
5569 | SmallVector<llvm::Value*, 12> Operands; |
5570 | Value *NewVL; |
5571 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5572 | for (unsigned I = 0; I < NF; ++I) |
5573 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5574 | Operands.push_back(Ops[NF]); |
5575 | Operands.push_back(Ops[NF + 2]); |
5576 | NewVL = Ops[NF + 1]; |
5577 | } else { |
5578 | for (unsigned I = 0; I < NF; ++I) |
5579 | Operands.push_back(Ops[NF + I]); |
5580 | Operands.push_back(Ops[2 * NF]); |
5581 | Operands.push_back(Ops[2 * NF + 2]); |
5582 | NewVL = Ops[2 * NF + 1]; |
5583 | } |
5584 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5585 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5586 | clang::CharUnits Align = |
5587 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5588 | for (unsigned I = 0; I < NF; ++I) { |
5589 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5590 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5591 | } |
5592 | // Store new_vl. |
5593 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
5594 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
5595 | } |
5596 | break; |
5597 | case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_ta: |
5598 | case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_ta: |
5599 | case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_ta: |
5600 | case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_ta: |
5601 | ID = Intrinsic::riscv_vlseg2ff; |
5602 | NF = 2; |
5603 | DefaultPolicy = 1; |
5604 | |
5605 | { |
5606 | // TA builtin: (val0 address, val1 address, ..., ptr, new_vl, vl) |
5607 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, new_vl, vl) |
5608 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5609 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5610 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
5611 | SmallVector<llvm::Value*, 12> Operands; |
5612 | Value *NewVL; |
5613 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5614 | for (unsigned I = 0; I < NF; ++I) |
5615 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5616 | Operands.push_back(Ops[NF]); |
5617 | Operands.push_back(Ops[NF + 2]); |
5618 | NewVL = Ops[NF + 1]; |
5619 | } else { |
5620 | for (unsigned I = 0; I < NF; ++I) |
5621 | Operands.push_back(Ops[NF + I]); |
5622 | Operands.push_back(Ops[2 * NF]); |
5623 | Operands.push_back(Ops[2 * NF + 2]); |
5624 | NewVL = Ops[2 * NF + 1]; |
5625 | } |
5626 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5627 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5628 | clang::CharUnits Align = |
5629 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5630 | for (unsigned I = 0; I < NF; ++I) { |
5631 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5632 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5633 | } |
5634 | // Store new_vl. |
5635 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
5636 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
5637 | } |
5638 | break; |
5639 | case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tuma: |
5640 | case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tuma: |
5641 | case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tuma: |
5642 | case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tuma: |
5643 | ID = Intrinsic::riscv_vlseg2ff_mask; |
5644 | NF = 2; |
5645 | DefaultPolicy = 2; |
5646 | |
5647 | { |
5648 | // TAMA builtin: (val0 address, ..., mask, ptr, new_vl, vl) |
5649 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, new_vl, vl) |
5650 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5651 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5652 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5653 | SmallVector<llvm::Value*, 12> Operands; |
5654 | Value *NewVL; |
5655 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5656 | for (unsigned I = 0; I < NF; ++I) |
5657 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5658 | Operands.push_back(Ops[NF + 1]); |
5659 | Operands.push_back(Ops[NF]); |
5660 | Operands.push_back(Ops[NF + 3]); |
5661 | NewVL = Ops[NF + 2]; |
5662 | } else { |
5663 | for (unsigned I = 0; I < NF; ++I) |
5664 | Operands.push_back(Ops[NF + I + 1]); |
5665 | Operands.push_back(Ops[2 * NF + 1]); |
5666 | Operands.push_back(Ops[NF]); |
5667 | Operands.push_back(Ops[2 * NF + 3]); |
5668 | NewVL = Ops[2 * NF + 2]; |
5669 | } |
5670 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5671 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5671, __extension__ __PRETTY_FUNCTION__)); |
5672 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5673 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5674 | clang::CharUnits Align = |
5675 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5676 | for (unsigned I = 0; I < NF; ++I) { |
5677 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5678 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5679 | } |
5680 | // Store new_vl. |
5681 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
5682 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
5683 | } |
5684 | break; |
5685 | case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tama: |
5686 | case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tama: |
5687 | case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tama: |
5688 | case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tama: |
5689 | ID = Intrinsic::riscv_vlseg2ff_mask; |
5690 | NF = 2; |
5691 | DefaultPolicy = 3; |
5692 | |
5693 | { |
5694 | // TAMA builtin: (val0 address, ..., mask, ptr, new_vl, vl) |
5695 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, new_vl, vl) |
5696 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5697 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5698 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5699 | SmallVector<llvm::Value*, 12> Operands; |
5700 | Value *NewVL; |
5701 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5702 | for (unsigned I = 0; I < NF; ++I) |
5703 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5704 | Operands.push_back(Ops[NF + 1]); |
5705 | Operands.push_back(Ops[NF]); |
5706 | Operands.push_back(Ops[NF + 3]); |
5707 | NewVL = Ops[NF + 2]; |
5708 | } else { |
5709 | for (unsigned I = 0; I < NF; ++I) |
5710 | Operands.push_back(Ops[NF + I + 1]); |
5711 | Operands.push_back(Ops[2 * NF + 1]); |
5712 | Operands.push_back(Ops[NF]); |
5713 | Operands.push_back(Ops[2 * NF + 3]); |
5714 | NewVL = Ops[2 * NF + 2]; |
5715 | } |
5716 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5717 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5717, __extension__ __PRETTY_FUNCTION__)); |
5718 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5719 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5720 | clang::CharUnits Align = |
5721 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5722 | for (unsigned I = 0; I < NF; ++I) { |
5723 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5724 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5725 | } |
5726 | // Store new_vl. |
5727 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
5728 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
5729 | } |
5730 | break; |
5731 | case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tumu: |
5732 | case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tumu: |
5733 | case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tumu: |
5734 | case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tumu: |
5735 | ID = Intrinsic::riscv_vlseg2ff_mask; |
5736 | NF = 2; |
5737 | DefaultPolicy = 0; |
5738 | |
5739 | { |
5740 | // TAMA builtin: (val0 address, ..., mask, ptr, new_vl, vl) |
5741 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, new_vl, vl) |
5742 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5743 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5744 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5745 | SmallVector<llvm::Value*, 12> Operands; |
5746 | Value *NewVL; |
5747 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5748 | for (unsigned I = 0; I < NF; ++I) |
5749 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5750 | Operands.push_back(Ops[NF + 1]); |
5751 | Operands.push_back(Ops[NF]); |
5752 | Operands.push_back(Ops[NF + 3]); |
5753 | NewVL = Ops[NF + 2]; |
5754 | } else { |
5755 | for (unsigned I = 0; I < NF; ++I) |
5756 | Operands.push_back(Ops[NF + I + 1]); |
5757 | Operands.push_back(Ops[2 * NF + 1]); |
5758 | Operands.push_back(Ops[NF]); |
5759 | Operands.push_back(Ops[2 * NF + 3]); |
5760 | NewVL = Ops[2 * NF + 2]; |
5761 | } |
5762 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5763 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5763, __extension__ __PRETTY_FUNCTION__)); |
5764 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5765 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5766 | clang::CharUnits Align = |
5767 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5768 | for (unsigned I = 0; I < NF; ++I) { |
5769 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5770 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5771 | } |
5772 | // Store new_vl. |
5773 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
5774 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
5775 | } |
5776 | break; |
5777 | case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tamu: |
5778 | case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tamu: |
5779 | case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tamu: |
5780 | case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tamu: |
5781 | ID = Intrinsic::riscv_vlseg2ff_mask; |
5782 | NF = 2; |
5783 | DefaultPolicy = 1; |
5784 | |
5785 | { |
5786 | // TAMA builtin: (val0 address, ..., mask, ptr, new_vl, vl) |
5787 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, new_vl, vl) |
5788 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5789 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5790 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5791 | SmallVector<llvm::Value*, 12> Operands; |
5792 | Value *NewVL; |
5793 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5794 | for (unsigned I = 0; I < NF; ++I) |
5795 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5796 | Operands.push_back(Ops[NF + 1]); |
5797 | Operands.push_back(Ops[NF]); |
5798 | Operands.push_back(Ops[NF + 3]); |
5799 | NewVL = Ops[NF + 2]; |
5800 | } else { |
5801 | for (unsigned I = 0; I < NF; ++I) |
5802 | Operands.push_back(Ops[NF + I + 1]); |
5803 | Operands.push_back(Ops[2 * NF + 1]); |
5804 | Operands.push_back(Ops[NF]); |
5805 | Operands.push_back(Ops[2 * NF + 3]); |
5806 | NewVL = Ops[2 * NF + 2]; |
5807 | } |
5808 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5809 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5809, __extension__ __PRETTY_FUNCTION__)); |
5810 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5811 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5812 | clang::CharUnits Align = |
5813 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5814 | for (unsigned I = 0; I < NF; ++I) { |
5815 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5816 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5817 | } |
5818 | // Store new_vl. |
5819 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
5820 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
5821 | } |
5822 | break; |
5823 | case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tu: |
5824 | case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tu: |
5825 | case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tu: |
5826 | case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tu: |
5827 | ID = Intrinsic::riscv_vlseg3; |
5828 | NF = 3; |
5829 | DefaultPolicy = 0; |
5830 | |
5831 | { |
5832 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5833 | // TA builtin: (val0 address, val1 address, ..., ptr, vl) |
5834 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, vl) |
5835 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5836 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
5837 | SmallVector<llvm::Value*, 10> Operands; |
5838 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5839 | for (unsigned I = 0; I < NF; ++I) |
5840 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5841 | Operands.push_back(Ops[NF]); |
5842 | Operands.push_back(Ops[NF + 1]); |
5843 | } else { |
5844 | for (unsigned I = 0; I < NF; ++I) |
5845 | Operands.push_back(Ops[NF + I]); |
5846 | Operands.push_back(Ops[2 * NF]); |
5847 | Operands.push_back(Ops[2 * NF + 1]); |
5848 | } |
5849 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5850 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5851 | clang::CharUnits Align = |
5852 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5853 | llvm::Value *V; |
5854 | for (unsigned I = 0; I < NF; ++I) { |
5855 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5856 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5857 | } |
5858 | return V; |
5859 | } |
5860 | break; |
5861 | case RISCVVector::BI__builtin_rvv_vlseg3e8_v_ta: |
5862 | case RISCVVector::BI__builtin_rvv_vlseg3e16_v_ta: |
5863 | case RISCVVector::BI__builtin_rvv_vlseg3e32_v_ta: |
5864 | case RISCVVector::BI__builtin_rvv_vlseg3e64_v_ta: |
5865 | ID = Intrinsic::riscv_vlseg3; |
5866 | NF = 3; |
5867 | DefaultPolicy = 1; |
5868 | |
5869 | { |
5870 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5871 | // TA builtin: (val0 address, val1 address, ..., ptr, vl) |
5872 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, vl) |
5873 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5874 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
5875 | SmallVector<llvm::Value*, 10> Operands; |
5876 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
5877 | for (unsigned I = 0; I < NF; ++I) |
5878 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5879 | Operands.push_back(Ops[NF]); |
5880 | Operands.push_back(Ops[NF + 1]); |
5881 | } else { |
5882 | for (unsigned I = 0; I < NF; ++I) |
5883 | Operands.push_back(Ops[NF + I]); |
5884 | Operands.push_back(Ops[2 * NF]); |
5885 | Operands.push_back(Ops[2 * NF + 1]); |
5886 | } |
5887 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5888 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5889 | clang::CharUnits Align = |
5890 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5891 | llvm::Value *V; |
5892 | for (unsigned I = 0; I < NF; ++I) { |
5893 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5894 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5895 | } |
5896 | return V; |
5897 | } |
5898 | break; |
5899 | case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tuma: |
5900 | case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tuma: |
5901 | case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tuma: |
5902 | case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tuma: |
5903 | ID = Intrinsic::riscv_vlseg3_mask; |
5904 | NF = 3; |
5905 | DefaultPolicy = 2; |
5906 | |
5907 | { |
5908 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5909 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5910 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5911 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5912 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5913 | SmallVector<llvm::Value*, 12> Operands; |
5914 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5915 | for (unsigned I = 0; I < NF; ++I) |
5916 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5917 | Operands.push_back(Ops[NF + 1]); |
5918 | Operands.push_back(Ops[NF]); |
5919 | Operands.push_back(Ops[NF + 2]); |
5920 | } else { |
5921 | for (unsigned I = 0; I < NF; ++I) |
5922 | Operands.push_back(Ops[NF + I + 1]); |
5923 | Operands.push_back(Ops[2 * NF + 1]); |
5924 | Operands.push_back(Ops[NF]); |
5925 | Operands.push_back(Ops[2 * NF + 2]); |
5926 | } |
5927 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5928 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5928, __extension__ __PRETTY_FUNCTION__)); |
5929 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5930 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5931 | clang::CharUnits Align = |
5932 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5933 | llvm::Value *V; |
5934 | for (unsigned I = 0; I < NF; ++I) { |
5935 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5936 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5937 | } |
5938 | return V; |
5939 | } |
5940 | break; |
5941 | case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tama: |
5942 | case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tama: |
5943 | case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tama: |
5944 | case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tama: |
5945 | ID = Intrinsic::riscv_vlseg3_mask; |
5946 | NF = 3; |
5947 | DefaultPolicy = 3; |
5948 | |
5949 | { |
5950 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5951 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5952 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5953 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5954 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5955 | SmallVector<llvm::Value*, 12> Operands; |
5956 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5957 | for (unsigned I = 0; I < NF; ++I) |
5958 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
5959 | Operands.push_back(Ops[NF + 1]); |
5960 | Operands.push_back(Ops[NF]); |
5961 | Operands.push_back(Ops[NF + 2]); |
5962 | } else { |
5963 | for (unsigned I = 0; I < NF; ++I) |
5964 | Operands.push_back(Ops[NF + I + 1]); |
5965 | Operands.push_back(Ops[2 * NF + 1]); |
5966 | Operands.push_back(Ops[NF]); |
5967 | Operands.push_back(Ops[2 * NF + 2]); |
5968 | } |
5969 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
5970 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 5970, __extension__ __PRETTY_FUNCTION__)); |
5971 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
5972 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
5973 | clang::CharUnits Align = |
5974 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
5975 | llvm::Value *V; |
5976 | for (unsigned I = 0; I < NF; ++I) { |
5977 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
5978 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
5979 | } |
5980 | return V; |
5981 | } |
5982 | break; |
5983 | case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tumu: |
5984 | case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tumu: |
5985 | case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tumu: |
5986 | case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tumu: |
5987 | ID = Intrinsic::riscv_vlseg3_mask; |
5988 | NF = 3; |
5989 | DefaultPolicy = 0; |
5990 | |
5991 | { |
5992 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
5993 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
5994 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
5995 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
5996 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
5997 | SmallVector<llvm::Value*, 12> Operands; |
5998 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
5999 | for (unsigned I = 0; I < NF; ++I) |
6000 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
6001 | Operands.push_back(Ops[NF + 1]); |
6002 | Operands.push_back(Ops[NF]); |
6003 | Operands.push_back(Ops[NF + 2]); |
6004 | } else { |
6005 | for (unsigned I = 0; I < NF; ++I) |
6006 | Operands.push_back(Ops[NF + I + 1]); |
6007 | Operands.push_back(Ops[2 * NF + 1]); |
6008 | Operands.push_back(Ops[NF]); |
6009 | Operands.push_back(Ops[2 * NF + 2]); |
6010 | } |
6011 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
6012 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 6012, __extension__ __PRETTY_FUNCTION__)); |
6013 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
6014 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
6015 | clang::CharUnits Align = |
6016 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
6017 | llvm::Value *V; |
6018 | for (unsigned I = 0; I < NF; ++I) { |
6019 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
6020 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
6021 | } |
6022 | return V; |
6023 | } |
6024 | break; |
6025 | case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tamu: |
6026 | case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tamu: |
6027 | case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tamu: |
6028 | case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tamu: |
6029 | ID = Intrinsic::riscv_vlseg3_mask; |
6030 | NF = 3; |
6031 | DefaultPolicy = 1; |
6032 | |
6033 | { |
6034 | // TAMA builtin: (val0 address, ..., mask, ptr, vl) |
6035 | // builtin: (val0 address, ..., mask, maskedoff0, ..., ptr, vl) |
6036 | // intrinsic: (maskedoff0, ..., ptr, mask, vl) |
6037 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
6038 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
6039 | SmallVector<llvm::Value*, 12> Operands; |
6040 | if (DefaultPolicy == TAIL_AGNOSTIC_MASK_AGNOSTIC) { |
6041 | for (unsigned I = 0; I < NF; ++I) |
6042 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
6043 | Operands.push_back(Ops[NF + 1]); |
6044 | Operands.push_back(Ops[NF]); |
6045 | Operands.push_back(Ops[NF + 2]); |
6046 | } else { |
6047 | for (unsigned I = 0; I < NF; ++I) |
6048 | Operands.push_back(Ops[NF + I + 1]); |
6049 | Operands.push_back(Ops[2 * NF + 1]); |
6050 | Operands.push_back(Ops[NF]); |
6051 | Operands.push_back(Ops[2 * NF + 2]); |
6052 | } |
6053 | Operands.push_back(ConstantInt::get(Ops.back()->getType(), DefaultPolicy)); |
6054 | assert(Operands.size() == NF + 4)(static_cast <bool> (Operands.size() == NF + 4) ? void ( 0) : __assert_fail ("Operands.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc" , 6054, __extension__ __PRETTY_FUNCTION__)); |
6055 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
6056 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
6057 | clang::CharUnits Align = |
6058 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
6059 | llvm::Value *V; |
6060 | for (unsigned I = 0; I < NF; ++I) { |
6061 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
6062 | V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
6063 | } |
6064 | return V; |
6065 | } |
6066 | break; |
6067 | case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tu: |
6068 | case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tu: |
6069 | case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tu: |
6070 | case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tu: |
6071 | ID = Intrinsic::riscv_vlseg3ff; |
6072 | NF = 3; |
6073 | DefaultPolicy = 0; |
6074 | |
6075 | { |
6076 | // TA builtin: (val0 address, val1 address, ..., ptr, new_vl, vl) |
6077 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, new_vl, vl) |
6078 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
6079 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
6080 | // intrinsic: (passthru0, passthru1, ..., ptr, vl) |
6081 | SmallVector<llvm::Value*, 12> Operands; |
6082 | Value *NewVL; |
6083 | if (DefaultPolicy == TAIL_AGNOSTIC) { |
6084 | for (unsigned I = 0; I < NF; ++I) |
6085 | Operands.push_back(llvm::PoisonValue::get(ResultType)); |
6086 | Operands.push_back(Ops[NF]); |
6087 | Operands.push_back(Ops[NF + 2]); |
6088 | NewVL = Ops[NF + 1]; |
6089 | } else { |
6090 | for (unsigned I = 0; I < NF; ++I) |
6091 | Operands.push_back(Ops[NF + I]); |
6092 | Operands.push_back(Ops[2 * NF]); |
6093 | Operands.push_back(Ops[2 * NF + 2]); |
6094 | NewVL = Ops[2 * NF + 1]; |
6095 | } |
6096 | llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes); |
6097 | llvm::Value *LoadValue = Builder.CreateCall(F, Operands, ""); |
6098 | clang::CharUnits Align = |
6099 | CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType()); |
6100 | for (unsigned I = 0; I < NF; ++I) { |
6101 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I}); |
6102 | Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align)); |
6103 | } |
6104 | // Store new_vl. |
6105 | llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF}); |
6106 | return Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align)); |
6107 | } |
6108 | break; |
6109 | case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_ta: |
6110 | case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_ta: |
6111 | case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_ta: |
6112 | case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_ta: |
6113 | ID = Intrinsic::riscv_vlseg3ff; |
6114 | NF = 3; |
6115 | DefaultPolicy = 1; |
6116 | |
6117 | { |
6118 | // TA builtin: (val0 address, val1 address, ..., ptr, new_vl, vl) |
6119 | // TU builtin: (val0 address, ..., passthru0, ..., ptr, new_vl, vl) |
6120 | ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType()); |
6121 | IntrinsicTypes = {ResultType, Ops.back()->getType()}; |
6122 |