Bug Summary

File:build/source/build-llvm/tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc
Warning:line 14975, column 3
Value stored to 'PolicyAttrs' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CGBuiltin.cpp -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=cplusplus -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -analyzer-config-compatibility-mode=true -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -ffunction-sections -fdata-sections -fcoverage-compilation-dir=/build/source/build-llvm -resource-dir /usr/lib/llvm-17/lib/clang/17 -I tools/clang/lib/CodeGen -I /build/source/clang/lib/CodeGen -I /build/source/clang/include -I tools/clang/include -I include -I /build/source/llvm/include -D _DEBUG -D _GLIBCXX_ASSERTIONS -D _GNU_SOURCE -D _LIBCPP_ENABLE_ASSERTIONS -D __STDC_CONSTANT_MACROS -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -D _FORTIFY_SOURCE=2 -D NDEBUG -U NDEBUG -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward -internal-isystem /usr/lib/llvm-17/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/build/source/build-llvm=build-llvm -fmacro-prefix-map=/build/source/= -fcoverage-prefix-map=/build/source/build-llvm=build-llvm -fcoverage-prefix-map=/build/source/= -source-date-epoch 1678706029 -O3 -Wno-unused-command-line-argument -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wno-comment -Wno-misleading-indentation -std=c++17 -fdeprecated-macro -fdebug-compilation-dir=/build/source/build-llvm -fdebug-prefix-map=/build/source/build-llvm=build-llvm -fdebug-prefix-map=/build/source/= -fdebug-prefix-map=/build/source/build-llvm=build-llvm -fdebug-prefix-map=/build/source/= -ferror-limit 19 -fvisibility-inlines-hidden -stack-protector 2 -fgnuc-version=4.2.1 -fcolor-diagnostics -vectorize-loops -vectorize-slp -analyzer-output=html -analyzer-config stable-report-filename=true -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/scan-build-2023-03-13-125747-16495-1 -x c++ /build/source/clang/lib/CodeGen/CGBuiltin.cpp
1case RISCVVector::BI__builtin_rvv_vget_v:
2 PolicyAttrs = 3;
3IsMasked = false;
4
5 {
6 ID = Intrinsic::vector_extract;
7 auto *VecTy = cast<ScalableVectorType>(ResultType);
8 auto *OpVecTy = cast<ScalableVectorType>(Ops[0]->getType());
9 // Mask to only valid indices.
10 unsigned MaxIndex = OpVecTy->getMinNumElements() / VecTy->getMinNumElements();
11 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"
, 11, __extension__ __PRETTY_FUNCTION__))
;
12 Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty());
13 Ops[1] = Builder.CreateAnd(Ops[1], MaxIndex - 1);
14 Ops[1] = Builder.CreateMul(Ops[1],
15 ConstantInt::get(Ops[1]->getType(),
16 VecTy->getMinNumElements()));
17 IntrinsicTypes = {ResultType, Ops[0]->getType()};
18 return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, "");
19 }
20 break;
21case RISCVVector::BI__builtin_rvv_vset_v:
22 PolicyAttrs = 3;
23IsMasked = false;
24
25 {
26 ID = Intrinsic::vector_insert;
27 IntrinsicTypes = {ResultType, Ops[2]->getType()};
28 auto *ResVecTy = cast<ScalableVectorType>(ResultType);
29 auto *VecTy = cast<ScalableVectorType>(Ops[2]->getType());
30 // Mask to only valid indices.
31 unsigned MaxIndex = ResVecTy->getMinNumElements() / VecTy->getMinNumElements();
32 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"
, 32, __extension__ __PRETTY_FUNCTION__))
;
33 Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty());
34 Ops[1] = Builder.CreateAnd(Ops[1], MaxIndex - 1);
35 Ops[1] = Builder.CreateMul(Ops[1],
36 ConstantInt::get(Ops[1]->getType(),
37 VecTy->getMinNumElements()));
38 std::swap(Ops[1], Ops[2]);
39 return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, "");
40 }
41 break;
42case RISCVVector::BI__builtin_rvv_vlenb:
43 PolicyAttrs = 3;
44IsMasked = false;
45
46 {
47 LLVMContext &Context = CGM.getLLVMContext();
48 llvm::MDBuilder MDHelper(Context);
49
50 llvm::Metadata *Ops[] = {llvm::MDString::get(Context, "vlenb")};
51 llvm::MDNode *RegName = llvm::MDNode::get(Context, Ops);
52 llvm::Value *Metadata = llvm::MetadataAsValue::get(Context, RegName);
53 llvm::Function *F =
54 CGM.getIntrinsic(llvm::Intrinsic::read_register, {SizeTy});
55 return Builder.CreateCall(F, Metadata);
56 }
57 break;
58case RISCVVector::BI__builtin_rvv_vlmul_ext_v:
59 PolicyAttrs = 3;
60IsMasked = false;
61
62 ID = Intrinsic::vector_insert;
63 IntrinsicTypes = {ResultType, Ops[0]->getType()};
64 Ops.push_back(llvm::PoisonValue::get(ResultType));
65 std::swap(Ops[0], Ops[1]);
66 Ops.push_back(ConstantInt::get(Int64Ty, 0));
67 return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, "");
68 break;
69case RISCVVector::BI__builtin_rvv_vlmul_trunc_v:
70 PolicyAttrs = 3;
71IsMasked = false;
72 {
73 ID = Intrinsic::vector_extract;
74 IntrinsicTypes = {ResultType, Ops[0]->getType()};
75 Ops.push_back(ConstantInt::get(Int64Ty, 0));
76 return Builder.CreateCall(CGM.getIntrinsic(ID, IntrinsicTypes), Ops, "");
77 } break;
78case RISCVVector::BI__builtin_rvv_vreinterpret_v:
79 PolicyAttrs = 3;
80IsMasked = false;
81
82 return Builder.CreateBitCast(Ops[0], ResultType);
83 break;
84case RISCVVector::BI__builtin_rvv_vundefined:
85 PolicyAttrs = 3;
86IsMasked = false;
87
88 return llvm::PoisonValue::get(ResultType);
89 break;
90case RISCVVector::BI__builtin_rvv_vaadd_vv_tu:
91case RISCVVector::BI__builtin_rvv_vaadd_vx_tu:
92 ID = Intrinsic::riscv_vaadd;
93 PolicyAttrs = 2;
94 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
95 break;
96case RISCVVector::BI__builtin_rvv_vaadd_vv_ta:
97case RISCVVector::BI__builtin_rvv_vaadd_vx_ta:
98 ID = Intrinsic::riscv_vaadd;
99 PolicyAttrs = 3;
100 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
101 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
102 break;
103case RISCVVector::BI__builtin_rvv_vaadd_vv_tum:
104case RISCVVector::BI__builtin_rvv_vaadd_vx_tum:
105 ID = Intrinsic::riscv_vaadd_mask;
106 PolicyAttrs = 2;
107 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
108 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
109 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
110 break;
111case RISCVVector::BI__builtin_rvv_vaadd_vv_tama:
112case RISCVVector::BI__builtin_rvv_vaadd_vx_tama:
113 ID = Intrinsic::riscv_vaadd_mask;
114 PolicyAttrs = 3;
115 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
116 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
117 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
118 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
119 break;
120case RISCVVector::BI__builtin_rvv_vaadd_vv_tumu:
121case RISCVVector::BI__builtin_rvv_vaadd_vx_tumu:
122 ID = Intrinsic::riscv_vaadd_mask;
123 PolicyAttrs = 0;
124 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
125 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
126 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
127 break;
128case RISCVVector::BI__builtin_rvv_vaadd_vv_mu:
129case RISCVVector::BI__builtin_rvv_vaadd_vx_mu:
130 ID = Intrinsic::riscv_vaadd_mask;
131 PolicyAttrs = 1;
132 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
133 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
134 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
135 break;
136case RISCVVector::BI__builtin_rvv_vaaddu_vv_tu:
137case RISCVVector::BI__builtin_rvv_vaaddu_vx_tu:
138 ID = Intrinsic::riscv_vaaddu;
139 PolicyAttrs = 2;
140 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
141 break;
142case RISCVVector::BI__builtin_rvv_vaaddu_vv_ta:
143case RISCVVector::BI__builtin_rvv_vaaddu_vx_ta:
144 ID = Intrinsic::riscv_vaaddu;
145 PolicyAttrs = 3;
146 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
147 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
148 break;
149case RISCVVector::BI__builtin_rvv_vaaddu_vv_tum:
150case RISCVVector::BI__builtin_rvv_vaaddu_vx_tum:
151 ID = Intrinsic::riscv_vaaddu_mask;
152 PolicyAttrs = 2;
153 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
154 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
155 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
156 break;
157case RISCVVector::BI__builtin_rvv_vaaddu_vv_tama:
158case RISCVVector::BI__builtin_rvv_vaaddu_vx_tama:
159 ID = Intrinsic::riscv_vaaddu_mask;
160 PolicyAttrs = 3;
161 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
162 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
163 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
164 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
165 break;
166case RISCVVector::BI__builtin_rvv_vaaddu_vv_tumu:
167case RISCVVector::BI__builtin_rvv_vaaddu_vx_tumu:
168 ID = Intrinsic::riscv_vaaddu_mask;
169 PolicyAttrs = 0;
170 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
171 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
172 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
173 break;
174case RISCVVector::BI__builtin_rvv_vaaddu_vv_mu:
175case RISCVVector::BI__builtin_rvv_vaaddu_vx_mu:
176 ID = Intrinsic::riscv_vaaddu_mask;
177 PolicyAttrs = 1;
178 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
179 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
180 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
181 break;
182case RISCVVector::BI__builtin_rvv_vadc_vvm_tu:
183case RISCVVector::BI__builtin_rvv_vadc_vxm_tu:
184 ID = Intrinsic::riscv_vadc;
185 PolicyAttrs = 2;
186 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
187 break;
188case RISCVVector::BI__builtin_rvv_vadc_vvm_ta:
189case RISCVVector::BI__builtin_rvv_vadc_vxm_ta:
190 ID = Intrinsic::riscv_vadc;
191 PolicyAttrs = 3;
192 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
193 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
194 break;
195case RISCVVector::BI__builtin_rvv_vadd_vv_tu:
196case RISCVVector::BI__builtin_rvv_vadd_vx_tu:
197 ID = Intrinsic::riscv_vadd;
198 PolicyAttrs = 2;
199 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
200 break;
201case RISCVVector::BI__builtin_rvv_vadd_vv_ta:
202case RISCVVector::BI__builtin_rvv_vadd_vx_ta:
203 ID = Intrinsic::riscv_vadd;
204 PolicyAttrs = 3;
205 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
206 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
207 break;
208case RISCVVector::BI__builtin_rvv_vadd_vv_tum:
209case RISCVVector::BI__builtin_rvv_vadd_vx_tum:
210 ID = Intrinsic::riscv_vadd_mask;
211 PolicyAttrs = 2;
212 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
213 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
214 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
215 break;
216case RISCVVector::BI__builtin_rvv_vadd_vv_tama:
217case RISCVVector::BI__builtin_rvv_vadd_vx_tama:
218 ID = Intrinsic::riscv_vadd_mask;
219 PolicyAttrs = 3;
220 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
221 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
222 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
223 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
224 break;
225case RISCVVector::BI__builtin_rvv_vadd_vv_tumu:
226case RISCVVector::BI__builtin_rvv_vadd_vx_tumu:
227 ID = Intrinsic::riscv_vadd_mask;
228 PolicyAttrs = 0;
229 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
230 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
231 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
232 break;
233case RISCVVector::BI__builtin_rvv_vadd_vv_mu:
234case RISCVVector::BI__builtin_rvv_vadd_vx_mu:
235 ID = Intrinsic::riscv_vadd_mask;
236 PolicyAttrs = 1;
237 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
238 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
239 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
240 break;
241case RISCVVector::BI__builtin_rvv_vand_vv_tu:
242case RISCVVector::BI__builtin_rvv_vand_vx_tu:
243 ID = Intrinsic::riscv_vand;
244 PolicyAttrs = 2;
245 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
246 break;
247case RISCVVector::BI__builtin_rvv_vand_vv_ta:
248case RISCVVector::BI__builtin_rvv_vand_vx_ta:
249 ID = Intrinsic::riscv_vand;
250 PolicyAttrs = 3;
251 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
252 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
253 break;
254case RISCVVector::BI__builtin_rvv_vand_vv_tum:
255case RISCVVector::BI__builtin_rvv_vand_vx_tum:
256 ID = Intrinsic::riscv_vand_mask;
257 PolicyAttrs = 2;
258 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
259 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
260 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
261 break;
262case RISCVVector::BI__builtin_rvv_vand_vv_tama:
263case RISCVVector::BI__builtin_rvv_vand_vx_tama:
264 ID = Intrinsic::riscv_vand_mask;
265 PolicyAttrs = 3;
266 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
267 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
268 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
269 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
270 break;
271case RISCVVector::BI__builtin_rvv_vand_vv_tumu:
272case RISCVVector::BI__builtin_rvv_vand_vx_tumu:
273 ID = Intrinsic::riscv_vand_mask;
274 PolicyAttrs = 0;
275 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
276 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
277 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
278 break;
279case RISCVVector::BI__builtin_rvv_vand_vv_mu:
280case RISCVVector::BI__builtin_rvv_vand_vx_mu:
281 ID = Intrinsic::riscv_vand_mask;
282 PolicyAttrs = 1;
283 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
284 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
285 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
286 break;
287case RISCVVector::BI__builtin_rvv_vasub_vv_tu:
288case RISCVVector::BI__builtin_rvv_vasub_vx_tu:
289 ID = Intrinsic::riscv_vasub;
290 PolicyAttrs = 2;
291 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
292 break;
293case RISCVVector::BI__builtin_rvv_vasub_vv_ta:
294case RISCVVector::BI__builtin_rvv_vasub_vx_ta:
295 ID = Intrinsic::riscv_vasub;
296 PolicyAttrs = 3;
297 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
298 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
299 break;
300case RISCVVector::BI__builtin_rvv_vasub_vv_tum:
301case RISCVVector::BI__builtin_rvv_vasub_vx_tum:
302 ID = Intrinsic::riscv_vasub_mask;
303 PolicyAttrs = 2;
304 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
305 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
306 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
307 break;
308case RISCVVector::BI__builtin_rvv_vasub_vv_tama:
309case RISCVVector::BI__builtin_rvv_vasub_vx_tama:
310 ID = Intrinsic::riscv_vasub_mask;
311 PolicyAttrs = 3;
312 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
313 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
314 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
315 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
316 break;
317case RISCVVector::BI__builtin_rvv_vasub_vv_tumu:
318case RISCVVector::BI__builtin_rvv_vasub_vx_tumu:
319 ID = Intrinsic::riscv_vasub_mask;
320 PolicyAttrs = 0;
321 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
322 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
323 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
324 break;
325case RISCVVector::BI__builtin_rvv_vasub_vv_mu:
326case RISCVVector::BI__builtin_rvv_vasub_vx_mu:
327 ID = Intrinsic::riscv_vasub_mask;
328 PolicyAttrs = 1;
329 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
330 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
331 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
332 break;
333case RISCVVector::BI__builtin_rvv_vasubu_vv_tu:
334case RISCVVector::BI__builtin_rvv_vasubu_vx_tu:
335 ID = Intrinsic::riscv_vasubu;
336 PolicyAttrs = 2;
337 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
338 break;
339case RISCVVector::BI__builtin_rvv_vasubu_vv_ta:
340case RISCVVector::BI__builtin_rvv_vasubu_vx_ta:
341 ID = Intrinsic::riscv_vasubu;
342 PolicyAttrs = 3;
343 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
344 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
345 break;
346case RISCVVector::BI__builtin_rvv_vasubu_vv_tum:
347case RISCVVector::BI__builtin_rvv_vasubu_vx_tum:
348 ID = Intrinsic::riscv_vasubu_mask;
349 PolicyAttrs = 2;
350 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
351 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
352 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
353 break;
354case RISCVVector::BI__builtin_rvv_vasubu_vv_tama:
355case RISCVVector::BI__builtin_rvv_vasubu_vx_tama:
356 ID = Intrinsic::riscv_vasubu_mask;
357 PolicyAttrs = 3;
358 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
359 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
360 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
361 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
362 break;
363case RISCVVector::BI__builtin_rvv_vasubu_vv_tumu:
364case RISCVVector::BI__builtin_rvv_vasubu_vx_tumu:
365 ID = Intrinsic::riscv_vasubu_mask;
366 PolicyAttrs = 0;
367 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
368 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
369 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
370 break;
371case RISCVVector::BI__builtin_rvv_vasubu_vv_mu:
372case RISCVVector::BI__builtin_rvv_vasubu_vx_mu:
373 ID = Intrinsic::riscv_vasubu_mask;
374 PolicyAttrs = 1;
375 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
376 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
377 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
378 break;
379case RISCVVector::BI__builtin_rvv_vcompress_vm_tu:
380 ID = Intrinsic::riscv_vcompress;
381 PolicyAttrs = 2;
382IsMasked = false;
383
384 // insert poison passthru
385 if (PolicyAttrs & RVV_VTA)
386 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
387 IntrinsicTypes = {ResultType, Ops.back()->getType()};
388 break;
389case RISCVVector::BI__builtin_rvv_vcompress_vm_ta:
390 ID = Intrinsic::riscv_vcompress;
391 PolicyAttrs = 3;
392IsMasked = false;
393
394 // insert poison passthru
395 if (PolicyAttrs & RVV_VTA)
396 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
397 IntrinsicTypes = {ResultType, Ops.back()->getType()};
398 break;
399case RISCVVector::BI__builtin_rvv_vcpop_m:
400 ID = Intrinsic::riscv_vcpop;
401 PolicyAttrs = 3;
402 IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()};
403 break;
404case RISCVVector::BI__builtin_rvv_vcpop_m_m:
405 ID = Intrinsic::riscv_vcpop_mask;
406 PolicyAttrs = 3;
407 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
408 IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()};
409 break;
410case RISCVVector::BI__builtin_rvv_vdiv_vv_tu:
411case RISCVVector::BI__builtin_rvv_vdiv_vx_tu:
412 ID = Intrinsic::riscv_vdiv;
413 PolicyAttrs = 2;
414 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
415 break;
416case RISCVVector::BI__builtin_rvv_vdiv_vv_ta:
417case RISCVVector::BI__builtin_rvv_vdiv_vx_ta:
418 ID = Intrinsic::riscv_vdiv;
419 PolicyAttrs = 3;
420 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
421 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
422 break;
423case RISCVVector::BI__builtin_rvv_vdiv_vv_tum:
424case RISCVVector::BI__builtin_rvv_vdiv_vx_tum:
425 ID = Intrinsic::riscv_vdiv_mask;
426 PolicyAttrs = 2;
427 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
428 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
429 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
430 break;
431case RISCVVector::BI__builtin_rvv_vdiv_vv_tama:
432case RISCVVector::BI__builtin_rvv_vdiv_vx_tama:
433 ID = Intrinsic::riscv_vdiv_mask;
434 PolicyAttrs = 3;
435 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
436 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
437 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
438 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
439 break;
440case RISCVVector::BI__builtin_rvv_vdiv_vv_tumu:
441case RISCVVector::BI__builtin_rvv_vdiv_vx_tumu:
442 ID = Intrinsic::riscv_vdiv_mask;
443 PolicyAttrs = 0;
444 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
445 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
446 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
447 break;
448case RISCVVector::BI__builtin_rvv_vdiv_vv_mu:
449case RISCVVector::BI__builtin_rvv_vdiv_vx_mu:
450 ID = Intrinsic::riscv_vdiv_mask;
451 PolicyAttrs = 1;
452 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
454 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
455 break;
456case RISCVVector::BI__builtin_rvv_vdivu_vv_tu:
457case RISCVVector::BI__builtin_rvv_vdivu_vx_tu:
458 ID = Intrinsic::riscv_vdivu;
459 PolicyAttrs = 2;
460 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
461 break;
462case RISCVVector::BI__builtin_rvv_vdivu_vv_ta:
463case RISCVVector::BI__builtin_rvv_vdivu_vx_ta:
464 ID = Intrinsic::riscv_vdivu;
465 PolicyAttrs = 3;
466 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
467 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
468 break;
469case RISCVVector::BI__builtin_rvv_vdivu_vv_tum:
470case RISCVVector::BI__builtin_rvv_vdivu_vx_tum:
471 ID = Intrinsic::riscv_vdivu_mask;
472 PolicyAttrs = 2;
473 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
474 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
475 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
476 break;
477case RISCVVector::BI__builtin_rvv_vdivu_vv_tama:
478case RISCVVector::BI__builtin_rvv_vdivu_vx_tama:
479 ID = Intrinsic::riscv_vdivu_mask;
480 PolicyAttrs = 3;
481 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
482 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
483 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
484 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
485 break;
486case RISCVVector::BI__builtin_rvv_vdivu_vv_tumu:
487case RISCVVector::BI__builtin_rvv_vdivu_vx_tumu:
488 ID = Intrinsic::riscv_vdivu_mask;
489 PolicyAttrs = 0;
490 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
491 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
492 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
493 break;
494case RISCVVector::BI__builtin_rvv_vdivu_vv_mu:
495case RISCVVector::BI__builtin_rvv_vdivu_vx_mu:
496 ID = Intrinsic::riscv_vdivu_mask;
497 PolicyAttrs = 1;
498 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
499 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
500 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
501 break;
502case RISCVVector::BI__builtin_rvv_vfadd_vv_tu:
503case RISCVVector::BI__builtin_rvv_vfadd_vf_tu:
504 ID = Intrinsic::riscv_vfadd;
505 PolicyAttrs = 2;
506 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
507 break;
508case RISCVVector::BI__builtin_rvv_vfadd_vv_ta:
509case RISCVVector::BI__builtin_rvv_vfadd_vf_ta:
510 ID = Intrinsic::riscv_vfadd;
511 PolicyAttrs = 3;
512 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
513 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
514 break;
515case RISCVVector::BI__builtin_rvv_vfadd_vv_tum:
516case RISCVVector::BI__builtin_rvv_vfadd_vf_tum:
517 ID = Intrinsic::riscv_vfadd_mask;
518 PolicyAttrs = 2;
519 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
520 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
521 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
522 break;
523case RISCVVector::BI__builtin_rvv_vfadd_vv_tama:
524case RISCVVector::BI__builtin_rvv_vfadd_vf_tama:
525 ID = Intrinsic::riscv_vfadd_mask;
526 PolicyAttrs = 3;
527 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
528 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
529 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
530 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
531 break;
532case RISCVVector::BI__builtin_rvv_vfadd_vv_tumu:
533case RISCVVector::BI__builtin_rvv_vfadd_vf_tumu:
534 ID = Intrinsic::riscv_vfadd_mask;
535 PolicyAttrs = 0;
536 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
537 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
538 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
539 break;
540case RISCVVector::BI__builtin_rvv_vfadd_vv_mu:
541case RISCVVector::BI__builtin_rvv_vfadd_vf_mu:
542 ID = Intrinsic::riscv_vfadd_mask;
543 PolicyAttrs = 1;
544 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
545 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
546 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
547 break;
548case RISCVVector::BI__builtin_rvv_vfclass_v_tu:
549 ID = Intrinsic::riscv_vfclass;
550 PolicyAttrs = 2;
551 IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()};
552 break;
553case RISCVVector::BI__builtin_rvv_vfclass_v_ta:
554 ID = Intrinsic::riscv_vfclass;
555 PolicyAttrs = 3;
556 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
557 IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()};
558 break;
559case RISCVVector::BI__builtin_rvv_vfclass_v_tum:
560 ID = Intrinsic::riscv_vfclass_mask;
561 PolicyAttrs = 2;
562 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
563 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
564 IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()};
565 break;
566case RISCVVector::BI__builtin_rvv_vfclass_v_tama:
567 ID = Intrinsic::riscv_vfclass_mask;
568 PolicyAttrs = 3;
569 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
570 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
571 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
572 IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()};
573 break;
574case RISCVVector::BI__builtin_rvv_vfclass_v_tumu:
575 ID = Intrinsic::riscv_vfclass_mask;
576 PolicyAttrs = 0;
577 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
578 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
579 IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()};
580 break;
581case RISCVVector::BI__builtin_rvv_vfclass_v_mu:
582 ID = Intrinsic::riscv_vfclass_mask;
583 PolicyAttrs = 1;
584 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
585 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
586 IntrinsicTypes = {Ops[1]->getType(), Ops.back()->getType()};
587 break;
588case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tu:
589 ID = Intrinsic::riscv_vfcvt_f_x_v;
590 PolicyAttrs = 2;
591 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
592 break;
593case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_ta:
594 ID = Intrinsic::riscv_vfcvt_f_x_v;
595 PolicyAttrs = 3;
596 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
597 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
598 break;
599case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tum:
600 ID = Intrinsic::riscv_vfcvt_f_x_v_mask;
601 PolicyAttrs = 2;
602 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
603 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
604 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
605 break;
606case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tama:
607 ID = Intrinsic::riscv_vfcvt_f_x_v_mask;
608 PolicyAttrs = 3;
609 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
610 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
611 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
612 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
613 break;
614case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_tumu:
615 ID = Intrinsic::riscv_vfcvt_f_x_v_mask;
616 PolicyAttrs = 0;
617 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
618 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
619 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
620 break;
621case RISCVVector::BI__builtin_rvv_vfcvt_f_x_v_mu:
622 ID = Intrinsic::riscv_vfcvt_f_x_v_mask;
623 PolicyAttrs = 1;
624 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
625 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
626 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
627 break;
628case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tu:
629 ID = Intrinsic::riscv_vfcvt_f_xu_v;
630 PolicyAttrs = 2;
631 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
632 break;
633case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_ta:
634 ID = Intrinsic::riscv_vfcvt_f_xu_v;
635 PolicyAttrs = 3;
636 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
637 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
638 break;
639case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tum:
640 ID = Intrinsic::riscv_vfcvt_f_xu_v_mask;
641 PolicyAttrs = 2;
642 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
643 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
644 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
645 break;
646case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tama:
647 ID = Intrinsic::riscv_vfcvt_f_xu_v_mask;
648 PolicyAttrs = 3;
649 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
650 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
651 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
652 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
653 break;
654case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_tumu:
655 ID = Intrinsic::riscv_vfcvt_f_xu_v_mask;
656 PolicyAttrs = 0;
657 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
658 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
659 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
660 break;
661case RISCVVector::BI__builtin_rvv_vfcvt_f_xu_v_mu:
662 ID = Intrinsic::riscv_vfcvt_f_xu_v_mask;
663 PolicyAttrs = 1;
664 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
665 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
666 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
667 break;
668case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tu:
669 ID = Intrinsic::riscv_vfcvt_rtz_x_f_v;
670 PolicyAttrs = 2;
671 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
672 break;
673case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_ta:
674 ID = Intrinsic::riscv_vfcvt_rtz_x_f_v;
675 PolicyAttrs = 3;
676 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
677 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
678 break;
679case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tum:
680 ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask;
681 PolicyAttrs = 2;
682 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
683 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
684 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
685 break;
686case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tama:
687 ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask;
688 PolicyAttrs = 3;
689 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
690 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
691 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
692 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
693 break;
694case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_tumu:
695 ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask;
696 PolicyAttrs = 0;
697 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
698 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
699 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
700 break;
701case RISCVVector::BI__builtin_rvv_vfcvt_rtz_x_f_v_mu:
702 ID = Intrinsic::riscv_vfcvt_rtz_x_f_v_mask;
703 PolicyAttrs = 1;
704 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
705 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
706 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
707 break;
708case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tu:
709 ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v;
710 PolicyAttrs = 2;
711 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
712 break;
713case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_ta:
714 ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v;
715 PolicyAttrs = 3;
716 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
717 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
718 break;
719case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tum:
720 ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask;
721 PolicyAttrs = 2;
722 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
723 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
724 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
725 break;
726case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tama:
727 ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask;
728 PolicyAttrs = 3;
729 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
730 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
731 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
732 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
733 break;
734case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_tumu:
735 ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask;
736 PolicyAttrs = 0;
737 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
738 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
739 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
740 break;
741case RISCVVector::BI__builtin_rvv_vfcvt_rtz_xu_f_v_mu:
742 ID = Intrinsic::riscv_vfcvt_rtz_xu_f_v_mask;
743 PolicyAttrs = 1;
744 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
745 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
746 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
747 break;
748case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tu:
749 ID = Intrinsic::riscv_vfcvt_x_f_v;
750 PolicyAttrs = 2;
751 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
752 break;
753case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_ta:
754 ID = Intrinsic::riscv_vfcvt_x_f_v;
755 PolicyAttrs = 3;
756 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
757 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
758 break;
759case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tum:
760 ID = Intrinsic::riscv_vfcvt_x_f_v_mask;
761 PolicyAttrs = 2;
762 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
763 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
764 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
765 break;
766case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tama:
767 ID = Intrinsic::riscv_vfcvt_x_f_v_mask;
768 PolicyAttrs = 3;
769 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
770 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
771 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
772 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
773 break;
774case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_tumu:
775 ID = Intrinsic::riscv_vfcvt_x_f_v_mask;
776 PolicyAttrs = 0;
777 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
778 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
779 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
780 break;
781case RISCVVector::BI__builtin_rvv_vfcvt_x_f_v_mu:
782 ID = Intrinsic::riscv_vfcvt_x_f_v_mask;
783 PolicyAttrs = 1;
784 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
785 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
786 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
787 break;
788case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tu:
789 ID = Intrinsic::riscv_vfcvt_xu_f_v;
790 PolicyAttrs = 2;
791 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
792 break;
793case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_ta:
794 ID = Intrinsic::riscv_vfcvt_xu_f_v;
795 PolicyAttrs = 3;
796 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
797 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
798 break;
799case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tum:
800 ID = Intrinsic::riscv_vfcvt_xu_f_v_mask;
801 PolicyAttrs = 2;
802 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
803 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
804 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
805 break;
806case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tama:
807 ID = Intrinsic::riscv_vfcvt_xu_f_v_mask;
808 PolicyAttrs = 3;
809 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
810 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
811 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
812 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
813 break;
814case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_tumu:
815 ID = Intrinsic::riscv_vfcvt_xu_f_v_mask;
816 PolicyAttrs = 0;
817 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
818 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
819 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
820 break;
821case RISCVVector::BI__builtin_rvv_vfcvt_xu_f_v_mu:
822 ID = Intrinsic::riscv_vfcvt_xu_f_v_mask;
823 PolicyAttrs = 1;
824 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
825 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
826 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
827 break;
828case RISCVVector::BI__builtin_rvv_vfdiv_vv_tu:
829case RISCVVector::BI__builtin_rvv_vfdiv_vf_tu:
830 ID = Intrinsic::riscv_vfdiv;
831 PolicyAttrs = 2;
832 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
833 break;
834case RISCVVector::BI__builtin_rvv_vfdiv_vv_ta:
835case RISCVVector::BI__builtin_rvv_vfdiv_vf_ta:
836 ID = Intrinsic::riscv_vfdiv;
837 PolicyAttrs = 3;
838 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
839 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
840 break;
841case RISCVVector::BI__builtin_rvv_vfdiv_vv_tum:
842case RISCVVector::BI__builtin_rvv_vfdiv_vf_tum:
843 ID = Intrinsic::riscv_vfdiv_mask;
844 PolicyAttrs = 2;
845 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
846 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
847 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
848 break;
849case RISCVVector::BI__builtin_rvv_vfdiv_vv_tama:
850case RISCVVector::BI__builtin_rvv_vfdiv_vf_tama:
851 ID = Intrinsic::riscv_vfdiv_mask;
852 PolicyAttrs = 3;
853 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
854 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
855 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
856 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
857 break;
858case RISCVVector::BI__builtin_rvv_vfdiv_vv_tumu:
859case RISCVVector::BI__builtin_rvv_vfdiv_vf_tumu:
860 ID = Intrinsic::riscv_vfdiv_mask;
861 PolicyAttrs = 0;
862 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
863 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
864 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
865 break;
866case RISCVVector::BI__builtin_rvv_vfdiv_vv_mu:
867case RISCVVector::BI__builtin_rvv_vfdiv_vf_mu:
868 ID = Intrinsic::riscv_vfdiv_mask;
869 PolicyAttrs = 1;
870 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
871 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
872 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
873 break;
874case RISCVVector::BI__builtin_rvv_vfirst_m:
875 ID = Intrinsic::riscv_vfirst;
876 PolicyAttrs = 3;
877 IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()};
878 break;
879case RISCVVector::BI__builtin_rvv_vfirst_m_m:
880 ID = Intrinsic::riscv_vfirst_mask;
881 PolicyAttrs = 3;
882 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
883 IntrinsicTypes = {Ops[0]->getType(), Ops.back()->getType()};
884 break;
885case RISCVVector::BI__builtin_rvv_vfmacc_vv_tu:
886case RISCVVector::BI__builtin_rvv_vfmacc_vf_tu:
887 ID = Intrinsic::riscv_vfmacc;
888 PolicyAttrs = 2;
889 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
890 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
891 break;
892case RISCVVector::BI__builtin_rvv_vfmacc_vv_ta:
893case RISCVVector::BI__builtin_rvv_vfmacc_vf_ta:
894 ID = Intrinsic::riscv_vfmacc;
895 PolicyAttrs = 3;
896 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
897 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
898 break;
899case RISCVVector::BI__builtin_rvv_vfmacc_vv_tum:
900case RISCVVector::BI__builtin_rvv_vfmacc_vf_tum:
901 ID = Intrinsic::riscv_vfmacc_mask;
902 PolicyAttrs = 2;
903 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
904 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
905 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
906 break;
907case RISCVVector::BI__builtin_rvv_vfmacc_vv_tama:
908case RISCVVector::BI__builtin_rvv_vfmacc_vf_tama:
909 ID = Intrinsic::riscv_vfmacc_mask;
910 PolicyAttrs = 3;
911 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
912 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
913 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
914 break;
915case RISCVVector::BI__builtin_rvv_vfmacc_vv_tumu:
916case RISCVVector::BI__builtin_rvv_vfmacc_vf_tumu:
917 ID = Intrinsic::riscv_vfmacc_mask;
918 PolicyAttrs = 0;
919 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
920 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
921 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
922 break;
923case RISCVVector::BI__builtin_rvv_vfmacc_vv_mu:
924case RISCVVector::BI__builtin_rvv_vfmacc_vf_mu:
925 ID = Intrinsic::riscv_vfmacc_mask;
926 PolicyAttrs = 1;
927 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
928 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
929 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
930 break;
931case RISCVVector::BI__builtin_rvv_vfmadd_vv_tu:
932case RISCVVector::BI__builtin_rvv_vfmadd_vf_tu:
933 ID = Intrinsic::riscv_vfmadd;
934 PolicyAttrs = 2;
935 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
936 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
937 break;
938case RISCVVector::BI__builtin_rvv_vfmadd_vv_ta:
939case RISCVVector::BI__builtin_rvv_vfmadd_vf_ta:
940 ID = Intrinsic::riscv_vfmadd;
941 PolicyAttrs = 3;
942 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
943 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
944 break;
945case RISCVVector::BI__builtin_rvv_vfmadd_vv_tum:
946case RISCVVector::BI__builtin_rvv_vfmadd_vf_tum:
947 ID = Intrinsic::riscv_vfmadd_mask;
948 PolicyAttrs = 2;
949 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
950 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
951 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
952 break;
953case RISCVVector::BI__builtin_rvv_vfmadd_vv_tama:
954case RISCVVector::BI__builtin_rvv_vfmadd_vf_tama:
955 ID = Intrinsic::riscv_vfmadd_mask;
956 PolicyAttrs = 3;
957 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
958 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
959 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
960 break;
961case RISCVVector::BI__builtin_rvv_vfmadd_vv_tumu:
962case RISCVVector::BI__builtin_rvv_vfmadd_vf_tumu:
963 ID = Intrinsic::riscv_vfmadd_mask;
964 PolicyAttrs = 0;
965 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
966 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
967 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
968 break;
969case RISCVVector::BI__builtin_rvv_vfmadd_vv_mu:
970case RISCVVector::BI__builtin_rvv_vfmadd_vf_mu:
971 ID = Intrinsic::riscv_vfmadd_mask;
972 PolicyAttrs = 1;
973 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
974 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
975 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
976 break;
977case RISCVVector::BI__builtin_rvv_vfmax_vv_tu:
978case RISCVVector::BI__builtin_rvv_vfmax_vf_tu:
979 ID = Intrinsic::riscv_vfmax;
980 PolicyAttrs = 2;
981 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
982 break;
983case RISCVVector::BI__builtin_rvv_vfmax_vv_ta:
984case RISCVVector::BI__builtin_rvv_vfmax_vf_ta:
985 ID = Intrinsic::riscv_vfmax;
986 PolicyAttrs = 3;
987 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
988 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
989 break;
990case RISCVVector::BI__builtin_rvv_vfmax_vv_tum:
991case RISCVVector::BI__builtin_rvv_vfmax_vf_tum:
992 ID = Intrinsic::riscv_vfmax_mask;
993 PolicyAttrs = 2;
994 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
995 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
996 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
997 break;
998case RISCVVector::BI__builtin_rvv_vfmax_vv_tama:
999case RISCVVector::BI__builtin_rvv_vfmax_vf_tama:
1000 ID = Intrinsic::riscv_vfmax_mask;
1001 PolicyAttrs = 3;
1002 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1003 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1004 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1005 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1006 break;
1007case RISCVVector::BI__builtin_rvv_vfmax_vv_tumu:
1008case RISCVVector::BI__builtin_rvv_vfmax_vf_tumu:
1009 ID = Intrinsic::riscv_vfmax_mask;
1010 PolicyAttrs = 0;
1011 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1012 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1013 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1014 break;
1015case RISCVVector::BI__builtin_rvv_vfmax_vv_mu:
1016case RISCVVector::BI__builtin_rvv_vfmax_vf_mu:
1017 ID = Intrinsic::riscv_vfmax_mask;
1018 PolicyAttrs = 1;
1019 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1020 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1021 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1022 break;
1023case RISCVVector::BI__builtin_rvv_vfmerge_vfm_tu:
1024 ID = Intrinsic::riscv_vfmerge;
1025 PolicyAttrs = 2;
1026IsMasked = false;
1027
1028 // insert poison passthru
1029 if (PolicyAttrs & RVV_VTA)
1030 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1031 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1032 break;
1033case RISCVVector::BI__builtin_rvv_vfmerge_vfm_ta:
1034 ID = Intrinsic::riscv_vfmerge;
1035 PolicyAttrs = 3;
1036IsMasked = false;
1037
1038 // insert poison passthru
1039 if (PolicyAttrs & RVV_VTA)
1040 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1041 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1042 break;
1043case RISCVVector::BI__builtin_rvv_vfmin_vv_tu:
1044case RISCVVector::BI__builtin_rvv_vfmin_vf_tu:
1045 ID = Intrinsic::riscv_vfmin;
1046 PolicyAttrs = 2;
1047 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1048 break;
1049case RISCVVector::BI__builtin_rvv_vfmin_vv_ta:
1050case RISCVVector::BI__builtin_rvv_vfmin_vf_ta:
1051 ID = Intrinsic::riscv_vfmin;
1052 PolicyAttrs = 3;
1053 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1054 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1055 break;
1056case RISCVVector::BI__builtin_rvv_vfmin_vv_tum:
1057case RISCVVector::BI__builtin_rvv_vfmin_vf_tum:
1058 ID = Intrinsic::riscv_vfmin_mask;
1059 PolicyAttrs = 2;
1060 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1061 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1062 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1063 break;
1064case RISCVVector::BI__builtin_rvv_vfmin_vv_tama:
1065case RISCVVector::BI__builtin_rvv_vfmin_vf_tama:
1066 ID = Intrinsic::riscv_vfmin_mask;
1067 PolicyAttrs = 3;
1068 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1069 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1070 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1071 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1072 break;
1073case RISCVVector::BI__builtin_rvv_vfmin_vv_tumu:
1074case RISCVVector::BI__builtin_rvv_vfmin_vf_tumu:
1075 ID = Intrinsic::riscv_vfmin_mask;
1076 PolicyAttrs = 0;
1077 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1078 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1079 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1080 break;
1081case RISCVVector::BI__builtin_rvv_vfmin_vv_mu:
1082case RISCVVector::BI__builtin_rvv_vfmin_vf_mu:
1083 ID = Intrinsic::riscv_vfmin_mask;
1084 PolicyAttrs = 1;
1085 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1086 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1087 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1088 break;
1089case RISCVVector::BI__builtin_rvv_vfmsac_vv_tu:
1090case RISCVVector::BI__builtin_rvv_vfmsac_vf_tu:
1091 ID = Intrinsic::riscv_vfmsac;
1092 PolicyAttrs = 2;
1093 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1094 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1095 break;
1096case RISCVVector::BI__builtin_rvv_vfmsac_vv_ta:
1097case RISCVVector::BI__builtin_rvv_vfmsac_vf_ta:
1098 ID = Intrinsic::riscv_vfmsac;
1099 PolicyAttrs = 3;
1100 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1101 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1102 break;
1103case RISCVVector::BI__builtin_rvv_vfmsac_vv_tum:
1104case RISCVVector::BI__builtin_rvv_vfmsac_vf_tum:
1105 ID = Intrinsic::riscv_vfmsac_mask;
1106 PolicyAttrs = 2;
1107 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1108 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1109 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1110 break;
1111case RISCVVector::BI__builtin_rvv_vfmsac_vv_tama:
1112case RISCVVector::BI__builtin_rvv_vfmsac_vf_tama:
1113 ID = Intrinsic::riscv_vfmsac_mask;
1114 PolicyAttrs = 3;
1115 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1116 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1117 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1118 break;
1119case RISCVVector::BI__builtin_rvv_vfmsac_vv_tumu:
1120case RISCVVector::BI__builtin_rvv_vfmsac_vf_tumu:
1121 ID = Intrinsic::riscv_vfmsac_mask;
1122 PolicyAttrs = 0;
1123 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1124 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1125 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1126 break;
1127case RISCVVector::BI__builtin_rvv_vfmsac_vv_mu:
1128case RISCVVector::BI__builtin_rvv_vfmsac_vf_mu:
1129 ID = Intrinsic::riscv_vfmsac_mask;
1130 PolicyAttrs = 1;
1131 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1132 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1133 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1134 break;
1135case RISCVVector::BI__builtin_rvv_vfmsub_vv_tu:
1136case RISCVVector::BI__builtin_rvv_vfmsub_vf_tu:
1137 ID = Intrinsic::riscv_vfmsub;
1138 PolicyAttrs = 2;
1139 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1140 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1141 break;
1142case RISCVVector::BI__builtin_rvv_vfmsub_vv_ta:
1143case RISCVVector::BI__builtin_rvv_vfmsub_vf_ta:
1144 ID = Intrinsic::riscv_vfmsub;
1145 PolicyAttrs = 3;
1146 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1147 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1148 break;
1149case RISCVVector::BI__builtin_rvv_vfmsub_vv_tum:
1150case RISCVVector::BI__builtin_rvv_vfmsub_vf_tum:
1151 ID = Intrinsic::riscv_vfmsub_mask;
1152 PolicyAttrs = 2;
1153 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1154 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1155 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1156 break;
1157case RISCVVector::BI__builtin_rvv_vfmsub_vv_tama:
1158case RISCVVector::BI__builtin_rvv_vfmsub_vf_tama:
1159 ID = Intrinsic::riscv_vfmsub_mask;
1160 PolicyAttrs = 3;
1161 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1162 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1163 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1164 break;
1165case RISCVVector::BI__builtin_rvv_vfmsub_vv_tumu:
1166case RISCVVector::BI__builtin_rvv_vfmsub_vf_tumu:
1167 ID = Intrinsic::riscv_vfmsub_mask;
1168 PolicyAttrs = 0;
1169 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1170 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1171 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1172 break;
1173case RISCVVector::BI__builtin_rvv_vfmsub_vv_mu:
1174case RISCVVector::BI__builtin_rvv_vfmsub_vf_mu:
1175 ID = Intrinsic::riscv_vfmsub_mask;
1176 PolicyAttrs = 1;
1177 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1178 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1179 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1180 break;
1181case RISCVVector::BI__builtin_rvv_vfmul_vv_tu:
1182case RISCVVector::BI__builtin_rvv_vfmul_vf_tu:
1183 ID = Intrinsic::riscv_vfmul;
1184 PolicyAttrs = 2;
1185 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1186 break;
1187case RISCVVector::BI__builtin_rvv_vfmul_vv_ta:
1188case RISCVVector::BI__builtin_rvv_vfmul_vf_ta:
1189 ID = Intrinsic::riscv_vfmul;
1190 PolicyAttrs = 3;
1191 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1192 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1193 break;
1194case RISCVVector::BI__builtin_rvv_vfmul_vv_tum:
1195case RISCVVector::BI__builtin_rvv_vfmul_vf_tum:
1196 ID = Intrinsic::riscv_vfmul_mask;
1197 PolicyAttrs = 2;
1198 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1199 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1200 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1201 break;
1202case RISCVVector::BI__builtin_rvv_vfmul_vv_tama:
1203case RISCVVector::BI__builtin_rvv_vfmul_vf_tama:
1204 ID = Intrinsic::riscv_vfmul_mask;
1205 PolicyAttrs = 3;
1206 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1207 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1208 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1209 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1210 break;
1211case RISCVVector::BI__builtin_rvv_vfmul_vv_tumu:
1212case RISCVVector::BI__builtin_rvv_vfmul_vf_tumu:
1213 ID = Intrinsic::riscv_vfmul_mask;
1214 PolicyAttrs = 0;
1215 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1216 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1217 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1218 break;
1219case RISCVVector::BI__builtin_rvv_vfmul_vv_mu:
1220case RISCVVector::BI__builtin_rvv_vfmul_vf_mu:
1221 ID = Intrinsic::riscv_vfmul_mask;
1222 PolicyAttrs = 1;
1223 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1224 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1225 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1226 break;
1227case RISCVVector::BI__builtin_rvv_vfmv_f_s:
1228 ID = Intrinsic::riscv_vfmv_f_s;
1229 PolicyAttrs = 3;
1230 IntrinsicTypes = {Ops[0]->getType()};
1231 break;
1232case RISCVVector::BI__builtin_rvv_vfmv_s_f_tu:
1233case RISCVVector::BI__builtin_rvv_vfmv_s_x_tu:
1234 ID = Intrinsic::riscv_vfmv_s_f;
1235 PolicyAttrs = 2;
1236 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1237 break;
1238case RISCVVector::BI__builtin_rvv_vfmv_s_f_ta:
1239case RISCVVector::BI__builtin_rvv_vfmv_s_x_ta:
1240 ID = Intrinsic::riscv_vfmv_s_f;
1241 PolicyAttrs = 3;
1242 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1243 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1244 break;
1245case RISCVVector::BI__builtin_rvv_vfmv_v_f_tu:
1246 ID = Intrinsic::riscv_vfmv_v_f;
1247 PolicyAttrs = 2;
1248 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1249 break;
1250case RISCVVector::BI__builtin_rvv_vfmv_v_f_ta:
1251 ID = Intrinsic::riscv_vfmv_v_f;
1252 PolicyAttrs = 3;
1253 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1254 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1255 break;
1256case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tu:
1257 ID = Intrinsic::riscv_vfncvt_f_f_w;
1258 PolicyAttrs = 2;
1259 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1260 break;
1261case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_ta:
1262 ID = Intrinsic::riscv_vfncvt_f_f_w;
1263 PolicyAttrs = 3;
1264 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1265 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1266 break;
1267case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tum:
1268 ID = Intrinsic::riscv_vfncvt_f_f_w_mask;
1269 PolicyAttrs = 2;
1270 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1271 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1272 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1273 break;
1274case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tama:
1275 ID = Intrinsic::riscv_vfncvt_f_f_w_mask;
1276 PolicyAttrs = 3;
1277 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1278 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1279 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1280 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1281 break;
1282case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_tumu:
1283 ID = Intrinsic::riscv_vfncvt_f_f_w_mask;
1284 PolicyAttrs = 0;
1285 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1286 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1287 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1288 break;
1289case RISCVVector::BI__builtin_rvv_vfncvt_f_f_w_mu:
1290 ID = Intrinsic::riscv_vfncvt_f_f_w_mask;
1291 PolicyAttrs = 1;
1292 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1293 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1294 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1295 break;
1296case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tu:
1297 ID = Intrinsic::riscv_vfncvt_f_x_w;
1298 PolicyAttrs = 2;
1299 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1300 break;
1301case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_ta:
1302 ID = Intrinsic::riscv_vfncvt_f_x_w;
1303 PolicyAttrs = 3;
1304 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1305 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1306 break;
1307case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tum:
1308 ID = Intrinsic::riscv_vfncvt_f_x_w_mask;
1309 PolicyAttrs = 2;
1310 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1311 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1312 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1313 break;
1314case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tama:
1315 ID = Intrinsic::riscv_vfncvt_f_x_w_mask;
1316 PolicyAttrs = 3;
1317 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1318 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1319 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1320 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1321 break;
1322case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_tumu:
1323 ID = Intrinsic::riscv_vfncvt_f_x_w_mask;
1324 PolicyAttrs = 0;
1325 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1326 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1327 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1328 break;
1329case RISCVVector::BI__builtin_rvv_vfncvt_f_x_w_mu:
1330 ID = Intrinsic::riscv_vfncvt_f_x_w_mask;
1331 PolicyAttrs = 1;
1332 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1333 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1334 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1335 break;
1336case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tu:
1337 ID = Intrinsic::riscv_vfncvt_f_xu_w;
1338 PolicyAttrs = 2;
1339 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1340 break;
1341case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_ta:
1342 ID = Intrinsic::riscv_vfncvt_f_xu_w;
1343 PolicyAttrs = 3;
1344 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1345 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1346 break;
1347case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tum:
1348 ID = Intrinsic::riscv_vfncvt_f_xu_w_mask;
1349 PolicyAttrs = 2;
1350 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1351 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1352 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1353 break;
1354case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tama:
1355 ID = Intrinsic::riscv_vfncvt_f_xu_w_mask;
1356 PolicyAttrs = 3;
1357 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1358 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1359 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1360 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1361 break;
1362case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_tumu:
1363 ID = Intrinsic::riscv_vfncvt_f_xu_w_mask;
1364 PolicyAttrs = 0;
1365 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1366 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1367 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1368 break;
1369case RISCVVector::BI__builtin_rvv_vfncvt_f_xu_w_mu:
1370 ID = Intrinsic::riscv_vfncvt_f_xu_w_mask;
1371 PolicyAttrs = 1;
1372 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1373 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1374 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1375 break;
1376case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tu:
1377 ID = Intrinsic::riscv_vfncvt_rod_f_f_w;
1378 PolicyAttrs = 2;
1379 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1380 break;
1381case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_ta:
1382 ID = Intrinsic::riscv_vfncvt_rod_f_f_w;
1383 PolicyAttrs = 3;
1384 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1385 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1386 break;
1387case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tum:
1388 ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask;
1389 PolicyAttrs = 2;
1390 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1391 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1392 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1393 break;
1394case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tama:
1395 ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask;
1396 PolicyAttrs = 3;
1397 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1398 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1399 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1400 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1401 break;
1402case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_tumu:
1403 ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask;
1404 PolicyAttrs = 0;
1405 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1406 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1407 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1408 break;
1409case RISCVVector::BI__builtin_rvv_vfncvt_rod_f_f_w_mu:
1410 ID = Intrinsic::riscv_vfncvt_rod_f_f_w_mask;
1411 PolicyAttrs = 1;
1412 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1413 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1414 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1415 break;
1416case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tu:
1417 ID = Intrinsic::riscv_vfncvt_rtz_x_f_w;
1418 PolicyAttrs = 2;
1419 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1420 break;
1421case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_ta:
1422 ID = Intrinsic::riscv_vfncvt_rtz_x_f_w;
1423 PolicyAttrs = 3;
1424 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1425 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1426 break;
1427case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tum:
1428 ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask;
1429 PolicyAttrs = 2;
1430 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1431 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1432 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1433 break;
1434case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tama:
1435 ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask;
1436 PolicyAttrs = 3;
1437 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1438 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1439 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1440 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1441 break;
1442case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_tumu:
1443 ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask;
1444 PolicyAttrs = 0;
1445 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1446 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1447 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1448 break;
1449case RISCVVector::BI__builtin_rvv_vfncvt_rtz_x_f_w_mu:
1450 ID = Intrinsic::riscv_vfncvt_rtz_x_f_w_mask;
1451 PolicyAttrs = 1;
1452 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1454 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1455 break;
1456case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tu:
1457 ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w;
1458 PolicyAttrs = 2;
1459 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1460 break;
1461case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_ta:
1462 ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w;
1463 PolicyAttrs = 3;
1464 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1465 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1466 break;
1467case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tum:
1468 ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask;
1469 PolicyAttrs = 2;
1470 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1471 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1472 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1473 break;
1474case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tama:
1475 ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask;
1476 PolicyAttrs = 3;
1477 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1478 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1479 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1480 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1481 break;
1482case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_tumu:
1483 ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask;
1484 PolicyAttrs = 0;
1485 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1486 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1487 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1488 break;
1489case RISCVVector::BI__builtin_rvv_vfncvt_rtz_xu_f_w_mu:
1490 ID = Intrinsic::riscv_vfncvt_rtz_xu_f_w_mask;
1491 PolicyAttrs = 1;
1492 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1493 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1494 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1495 break;
1496case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tu:
1497 ID = Intrinsic::riscv_vfncvt_x_f_w;
1498 PolicyAttrs = 2;
1499 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1500 break;
1501case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_ta:
1502 ID = Intrinsic::riscv_vfncvt_x_f_w;
1503 PolicyAttrs = 3;
1504 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1505 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1506 break;
1507case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tum:
1508 ID = Intrinsic::riscv_vfncvt_x_f_w_mask;
1509 PolicyAttrs = 2;
1510 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1511 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1512 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1513 break;
1514case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tama:
1515 ID = Intrinsic::riscv_vfncvt_x_f_w_mask;
1516 PolicyAttrs = 3;
1517 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1518 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1519 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1520 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1521 break;
1522case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_tumu:
1523 ID = Intrinsic::riscv_vfncvt_x_f_w_mask;
1524 PolicyAttrs = 0;
1525 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1526 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1527 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1528 break;
1529case RISCVVector::BI__builtin_rvv_vfncvt_x_f_w_mu:
1530 ID = Intrinsic::riscv_vfncvt_x_f_w_mask;
1531 PolicyAttrs = 1;
1532 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1533 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1534 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1535 break;
1536case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tu:
1537 ID = Intrinsic::riscv_vfncvt_xu_f_w;
1538 PolicyAttrs = 2;
1539 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1540 break;
1541case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_ta:
1542 ID = Intrinsic::riscv_vfncvt_xu_f_w;
1543 PolicyAttrs = 3;
1544 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1545 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1546 break;
1547case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tum:
1548 ID = Intrinsic::riscv_vfncvt_xu_f_w_mask;
1549 PolicyAttrs = 2;
1550 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1551 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1552 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1553 break;
1554case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tama:
1555 ID = Intrinsic::riscv_vfncvt_xu_f_w_mask;
1556 PolicyAttrs = 3;
1557 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1558 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1559 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1560 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1561 break;
1562case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_tumu:
1563 ID = Intrinsic::riscv_vfncvt_xu_f_w_mask;
1564 PolicyAttrs = 0;
1565 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1566 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1567 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1568 break;
1569case RISCVVector::BI__builtin_rvv_vfncvt_xu_f_w_mu:
1570 ID = Intrinsic::riscv_vfncvt_xu_f_w_mask;
1571 PolicyAttrs = 1;
1572 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1573 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1574 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1575 break;
1576case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tu:
1577case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tu:
1578 ID = Intrinsic::riscv_vfnmacc;
1579 PolicyAttrs = 2;
1580 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1581 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1582 break;
1583case RISCVVector::BI__builtin_rvv_vfnmacc_vv_ta:
1584case RISCVVector::BI__builtin_rvv_vfnmacc_vf_ta:
1585 ID = Intrinsic::riscv_vfnmacc;
1586 PolicyAttrs = 3;
1587 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1588 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1589 break;
1590case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tum:
1591case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tum:
1592 ID = Intrinsic::riscv_vfnmacc_mask;
1593 PolicyAttrs = 2;
1594 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1595 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1596 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1597 break;
1598case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tama:
1599case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tama:
1600 ID = Intrinsic::riscv_vfnmacc_mask;
1601 PolicyAttrs = 3;
1602 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1603 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1604 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1605 break;
1606case RISCVVector::BI__builtin_rvv_vfnmacc_vv_tumu:
1607case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tumu:
1608 ID = Intrinsic::riscv_vfnmacc_mask;
1609 PolicyAttrs = 0;
1610 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1611 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1612 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1613 break;
1614case RISCVVector::BI__builtin_rvv_vfnmacc_vv_mu:
1615case RISCVVector::BI__builtin_rvv_vfnmacc_vf_mu:
1616 ID = Intrinsic::riscv_vfnmacc_mask;
1617 PolicyAttrs = 1;
1618 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1619 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1620 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1621 break;
1622case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tu:
1623case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tu:
1624 ID = Intrinsic::riscv_vfnmadd;
1625 PolicyAttrs = 2;
1626 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1627 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1628 break;
1629case RISCVVector::BI__builtin_rvv_vfnmadd_vv_ta:
1630case RISCVVector::BI__builtin_rvv_vfnmadd_vf_ta:
1631 ID = Intrinsic::riscv_vfnmadd;
1632 PolicyAttrs = 3;
1633 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1634 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1635 break;
1636case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tum:
1637case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tum:
1638 ID = Intrinsic::riscv_vfnmadd_mask;
1639 PolicyAttrs = 2;
1640 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1641 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1642 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1643 break;
1644case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tama:
1645case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tama:
1646 ID = Intrinsic::riscv_vfnmadd_mask;
1647 PolicyAttrs = 3;
1648 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1649 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1650 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1651 break;
1652case RISCVVector::BI__builtin_rvv_vfnmadd_vv_tumu:
1653case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tumu:
1654 ID = Intrinsic::riscv_vfnmadd_mask;
1655 PolicyAttrs = 0;
1656 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1657 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1658 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1659 break;
1660case RISCVVector::BI__builtin_rvv_vfnmadd_vv_mu:
1661case RISCVVector::BI__builtin_rvv_vfnmadd_vf_mu:
1662 ID = Intrinsic::riscv_vfnmadd_mask;
1663 PolicyAttrs = 1;
1664 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1665 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1666 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1667 break;
1668case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tu:
1669case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tu:
1670 ID = Intrinsic::riscv_vfnmsac;
1671 PolicyAttrs = 2;
1672 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1673 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1674 break;
1675case RISCVVector::BI__builtin_rvv_vfnmsac_vv_ta:
1676case RISCVVector::BI__builtin_rvv_vfnmsac_vf_ta:
1677 ID = Intrinsic::riscv_vfnmsac;
1678 PolicyAttrs = 3;
1679 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1680 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1681 break;
1682case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tum:
1683case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tum:
1684 ID = Intrinsic::riscv_vfnmsac_mask;
1685 PolicyAttrs = 2;
1686 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1687 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1688 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1689 break;
1690case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tama:
1691case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tama:
1692 ID = Intrinsic::riscv_vfnmsac_mask;
1693 PolicyAttrs = 3;
1694 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1695 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1696 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1697 break;
1698case RISCVVector::BI__builtin_rvv_vfnmsac_vv_tumu:
1699case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tumu:
1700 ID = Intrinsic::riscv_vfnmsac_mask;
1701 PolicyAttrs = 0;
1702 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1703 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1704 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1705 break;
1706case RISCVVector::BI__builtin_rvv_vfnmsac_vv_mu:
1707case RISCVVector::BI__builtin_rvv_vfnmsac_vf_mu:
1708 ID = Intrinsic::riscv_vfnmsac_mask;
1709 PolicyAttrs = 1;
1710 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1711 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1712 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1713 break;
1714case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tu:
1715case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tu:
1716 ID = Intrinsic::riscv_vfnmsub;
1717 PolicyAttrs = 2;
1718 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1719 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1720 break;
1721case RISCVVector::BI__builtin_rvv_vfnmsub_vv_ta:
1722case RISCVVector::BI__builtin_rvv_vfnmsub_vf_ta:
1723 ID = Intrinsic::riscv_vfnmsub;
1724 PolicyAttrs = 3;
1725 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1726 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1727 break;
1728case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tum:
1729case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tum:
1730 ID = Intrinsic::riscv_vfnmsub_mask;
1731 PolicyAttrs = 2;
1732 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1733 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1734 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1735 break;
1736case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tama:
1737case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tama:
1738 ID = Intrinsic::riscv_vfnmsub_mask;
1739 PolicyAttrs = 3;
1740 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1741 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1742 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1743 break;
1744case RISCVVector::BI__builtin_rvv_vfnmsub_vv_tumu:
1745case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tumu:
1746 ID = Intrinsic::riscv_vfnmsub_mask;
1747 PolicyAttrs = 0;
1748 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1749 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1750 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1751 break;
1752case RISCVVector::BI__builtin_rvv_vfnmsub_vv_mu:
1753case RISCVVector::BI__builtin_rvv_vfnmsub_vf_mu:
1754 ID = Intrinsic::riscv_vfnmsub_mask;
1755 PolicyAttrs = 1;
1756 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1757 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1758 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1759 break;
1760case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tu:
1761 ID = Intrinsic::riscv_vfrdiv;
1762 PolicyAttrs = 2;
1763 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1764 break;
1765case RISCVVector::BI__builtin_rvv_vfrdiv_vf_ta:
1766 ID = Intrinsic::riscv_vfrdiv;
1767 PolicyAttrs = 3;
1768 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1769 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1770 break;
1771case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tum:
1772 ID = Intrinsic::riscv_vfrdiv_mask;
1773 PolicyAttrs = 2;
1774 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1775 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1776 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1777 break;
1778case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tama:
1779 ID = Intrinsic::riscv_vfrdiv_mask;
1780 PolicyAttrs = 3;
1781 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1782 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1783 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1784 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1785 break;
1786case RISCVVector::BI__builtin_rvv_vfrdiv_vf_tumu:
1787 ID = Intrinsic::riscv_vfrdiv_mask;
1788 PolicyAttrs = 0;
1789 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1790 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1791 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1792 break;
1793case RISCVVector::BI__builtin_rvv_vfrdiv_vf_mu:
1794 ID = Intrinsic::riscv_vfrdiv_mask;
1795 PolicyAttrs = 1;
1796 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1797 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1798 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1799 break;
1800case RISCVVector::BI__builtin_rvv_vfrec7_v_tu:
1801 ID = Intrinsic::riscv_vfrec7;
1802 PolicyAttrs = 2;
1803 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1804 break;
1805case RISCVVector::BI__builtin_rvv_vfrec7_v_ta:
1806 ID = Intrinsic::riscv_vfrec7;
1807 PolicyAttrs = 3;
1808 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1809 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1810 break;
1811case RISCVVector::BI__builtin_rvv_vfrec7_v_tum:
1812 ID = Intrinsic::riscv_vfrec7_mask;
1813 PolicyAttrs = 2;
1814 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1815 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1816 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1817 break;
1818case RISCVVector::BI__builtin_rvv_vfrec7_v_tama:
1819 ID = Intrinsic::riscv_vfrec7_mask;
1820 PolicyAttrs = 3;
1821 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1822 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1823 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1824 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1825 break;
1826case RISCVVector::BI__builtin_rvv_vfrec7_v_tumu:
1827 ID = Intrinsic::riscv_vfrec7_mask;
1828 PolicyAttrs = 0;
1829 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1830 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1831 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1832 break;
1833case RISCVVector::BI__builtin_rvv_vfrec7_v_mu:
1834 ID = Intrinsic::riscv_vfrec7_mask;
1835 PolicyAttrs = 1;
1836 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1837 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1838 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1839 break;
1840case RISCVVector::BI__builtin_rvv_vfredmax_vs_tu:
1841 ID = Intrinsic::riscv_vfredmax;
1842 PolicyAttrs = 2;
1843 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1844 break;
1845case RISCVVector::BI__builtin_rvv_vfredmax_vs_ta:
1846 ID = Intrinsic::riscv_vfredmax;
1847 PolicyAttrs = 3;
1848 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1849 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1850 break;
1851case RISCVVector::BI__builtin_rvv_vfredmax_vs_tum:
1852 ID = Intrinsic::riscv_vfredmax_mask;
1853 PolicyAttrs = 2;
1854 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1855 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1856 break;
1857case RISCVVector::BI__builtin_rvv_vfredmax_vs_tama:
1858 ID = Intrinsic::riscv_vfredmax_mask;
1859 PolicyAttrs = 3;
1860 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1861 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1862 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1863 break;
1864case RISCVVector::BI__builtin_rvv_vfredmin_vs_tu:
1865 ID = Intrinsic::riscv_vfredmin;
1866 PolicyAttrs = 2;
1867 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1868 break;
1869case RISCVVector::BI__builtin_rvv_vfredmin_vs_ta:
1870 ID = Intrinsic::riscv_vfredmin;
1871 PolicyAttrs = 3;
1872 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1873 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1874 break;
1875case RISCVVector::BI__builtin_rvv_vfredmin_vs_tum:
1876 ID = Intrinsic::riscv_vfredmin_mask;
1877 PolicyAttrs = 2;
1878 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1879 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1880 break;
1881case RISCVVector::BI__builtin_rvv_vfredmin_vs_tama:
1882 ID = Intrinsic::riscv_vfredmin_mask;
1883 PolicyAttrs = 3;
1884 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1885 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1886 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1887 break;
1888case RISCVVector::BI__builtin_rvv_vfredosum_vs_tu:
1889 ID = Intrinsic::riscv_vfredosum;
1890 PolicyAttrs = 2;
1891 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1892 break;
1893case RISCVVector::BI__builtin_rvv_vfredosum_vs_ta:
1894 ID = Intrinsic::riscv_vfredosum;
1895 PolicyAttrs = 3;
1896 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1897 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1898 break;
1899case RISCVVector::BI__builtin_rvv_vfredosum_vs_tum:
1900 ID = Intrinsic::riscv_vfredosum_mask;
1901 PolicyAttrs = 2;
1902 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1903 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1904 break;
1905case RISCVVector::BI__builtin_rvv_vfredosum_vs_tama:
1906 ID = Intrinsic::riscv_vfredosum_mask;
1907 PolicyAttrs = 3;
1908 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1909 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1910 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1911 break;
1912case RISCVVector::BI__builtin_rvv_vfredusum_vs_tu:
1913 ID = Intrinsic::riscv_vfredusum;
1914 PolicyAttrs = 2;
1915 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1916 break;
1917case RISCVVector::BI__builtin_rvv_vfredusum_vs_ta:
1918 ID = Intrinsic::riscv_vfredusum;
1919 PolicyAttrs = 3;
1920 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1921 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1922 break;
1923case RISCVVector::BI__builtin_rvv_vfredusum_vs_tum:
1924 ID = Intrinsic::riscv_vfredusum_mask;
1925 PolicyAttrs = 2;
1926 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1927 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1928 break;
1929case RISCVVector::BI__builtin_rvv_vfredusum_vs_tama:
1930 ID = Intrinsic::riscv_vfredusum_mask;
1931 PolicyAttrs = 3;
1932 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1933 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1934 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1935 break;
1936case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tu:
1937 ID = Intrinsic::riscv_vfrsqrt7;
1938 PolicyAttrs = 2;
1939 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1940 break;
1941case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_ta:
1942 ID = Intrinsic::riscv_vfrsqrt7;
1943 PolicyAttrs = 3;
1944 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1945 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1946 break;
1947case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tum:
1948 ID = Intrinsic::riscv_vfrsqrt7_mask;
1949 PolicyAttrs = 2;
1950 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1951 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1952 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1953 break;
1954case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tama:
1955 ID = Intrinsic::riscv_vfrsqrt7_mask;
1956 PolicyAttrs = 3;
1957 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1958 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1959 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1960 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1961 break;
1962case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tumu:
1963 ID = Intrinsic::riscv_vfrsqrt7_mask;
1964 PolicyAttrs = 0;
1965 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1966 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1967 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1968 break;
1969case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_mu:
1970 ID = Intrinsic::riscv_vfrsqrt7_mask;
1971 PolicyAttrs = 1;
1972 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1973 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1974 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1975 break;
1976case RISCVVector::BI__builtin_rvv_vfrsub_vf_tu:
1977 ID = Intrinsic::riscv_vfrsub;
1978 PolicyAttrs = 2;
1979 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1980 break;
1981case RISCVVector::BI__builtin_rvv_vfrsub_vf_ta:
1982 ID = Intrinsic::riscv_vfrsub;
1983 PolicyAttrs = 3;
1984 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1985 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1986 break;
1987case RISCVVector::BI__builtin_rvv_vfrsub_vf_tum:
1988 ID = Intrinsic::riscv_vfrsub_mask;
1989 PolicyAttrs = 2;
1990 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1991 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1992 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1993 break;
1994case RISCVVector::BI__builtin_rvv_vfrsub_vf_tama:
1995 ID = Intrinsic::riscv_vfrsub_mask;
1996 PolicyAttrs = 3;
1997 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1998 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1999 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2000 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2001 break;
2002case RISCVVector::BI__builtin_rvv_vfrsub_vf_tumu:
2003 ID = Intrinsic::riscv_vfrsub_mask;
2004 PolicyAttrs = 0;
2005 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2006 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2007 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2008 break;
2009case RISCVVector::BI__builtin_rvv_vfrsub_vf_mu:
2010 ID = Intrinsic::riscv_vfrsub_mask;
2011 PolicyAttrs = 1;
2012 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2013 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2014 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2015 break;
2016case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tu:
2017case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tu:
2018 ID = Intrinsic::riscv_vfsgnj;
2019 PolicyAttrs = 2;
2020 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2021 break;
2022case RISCVVector::BI__builtin_rvv_vfsgnj_vv_ta:
2023case RISCVVector::BI__builtin_rvv_vfsgnj_vf_ta:
2024 ID = Intrinsic::riscv_vfsgnj;
2025 PolicyAttrs = 3;
2026 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2027 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2028 break;
2029case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tum:
2030case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tum:
2031 ID = Intrinsic::riscv_vfsgnj_mask;
2032 PolicyAttrs = 2;
2033 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2034 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2035 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2036 break;
2037case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tama:
2038case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tama:
2039 ID = Intrinsic::riscv_vfsgnj_mask;
2040 PolicyAttrs = 3;
2041 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2042 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2043 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2044 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2045 break;
2046case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tumu:
2047case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tumu:
2048 ID = Intrinsic::riscv_vfsgnj_mask;
2049 PolicyAttrs = 0;
2050 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2051 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2052 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2053 break;
2054case RISCVVector::BI__builtin_rvv_vfsgnj_vv_mu:
2055case RISCVVector::BI__builtin_rvv_vfsgnj_vf_mu:
2056 ID = Intrinsic::riscv_vfsgnj_mask;
2057 PolicyAttrs = 1;
2058 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2059 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2060 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2061 break;
2062case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tu:
2063case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tu:
2064 ID = Intrinsic::riscv_vfsgnjn;
2065 PolicyAttrs = 2;
2066 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2067 break;
2068case RISCVVector::BI__builtin_rvv_vfneg_v_tu:
2069 ID = Intrinsic::riscv_vfsgnjn;
2070 PolicyAttrs = 2;
2071IsMasked = false;
2072
2073 {
2074 if (IsMasked) {
2075 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2076 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2077 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2078 Ops.insert(Ops.begin() + 2, Ops[1]);
2079 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2080 // maskedoff, op1, op2, mask, vl
2081 IntrinsicTypes = {ResultType,
2082 Ops[2]->getType(),
2083 Ops.back()->getType()};
2084 } else {
2085 if (PolicyAttrs & RVV_VTA)
2086 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2087 // op1, po2, vl
2088 IntrinsicTypes = {ResultType,
2089 Ops[1]->getType(), Ops[2]->getType()};
2090 Ops.insert(Ops.begin() + 2, Ops[1]);
2091 break;
2092 }
2093 break;
2094 }
2095 break;
2096case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_ta:
2097case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_ta:
2098 ID = Intrinsic::riscv_vfsgnjn;
2099 PolicyAttrs = 3;
2100 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2101 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2102 break;
2103case RISCVVector::BI__builtin_rvv_vfneg_v_ta:
2104 ID = Intrinsic::riscv_vfsgnjn;
2105 PolicyAttrs = 3;
2106IsMasked = false;
2107
2108 {
2109 if (IsMasked) {
2110 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2111 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2112 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2113 Ops.insert(Ops.begin() + 2, Ops[1]);
2114 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2115 // maskedoff, op1, op2, mask, vl
2116 IntrinsicTypes = {ResultType,
2117 Ops[2]->getType(),
2118 Ops.back()->getType()};
2119 } else {
2120 if (PolicyAttrs & RVV_VTA)
2121 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2122 // op1, po2, vl
2123 IntrinsicTypes = {ResultType,
2124 Ops[1]->getType(), Ops[2]->getType()};
2125 Ops.insert(Ops.begin() + 2, Ops[1]);
2126 break;
2127 }
2128 break;
2129 }
2130 break;
2131case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tum:
2132case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tum:
2133 ID = Intrinsic::riscv_vfsgnjn_mask;
2134 PolicyAttrs = 2;
2135 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2136 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2137 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2138 break;
2139case RISCVVector::BI__builtin_rvv_vfneg_v_tum:
2140 ID = Intrinsic::riscv_vfsgnjn_mask;
2141 PolicyAttrs = 2;
2142IsMasked = true;
2143
2144 {
2145 if (IsMasked) {
2146 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2147 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2148 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2149 Ops.insert(Ops.begin() + 2, Ops[1]);
2150 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2151 // maskedoff, op1, op2, mask, vl
2152 IntrinsicTypes = {ResultType,
2153 Ops[2]->getType(),
2154 Ops.back()->getType()};
2155 } else {
2156 if (PolicyAttrs & RVV_VTA)
2157 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2158 // op1, po2, vl
2159 IntrinsicTypes = {ResultType,
2160 Ops[1]->getType(), Ops[2]->getType()};
2161 Ops.insert(Ops.begin() + 2, Ops[1]);
2162 break;
2163 }
2164 break;
2165 }
2166 break;
2167case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tama:
2168case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tama:
2169 ID = Intrinsic::riscv_vfsgnjn_mask;
2170 PolicyAttrs = 3;
2171 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2172 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2173 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2174 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2175 break;
2176case RISCVVector::BI__builtin_rvv_vfneg_v_tama:
2177 ID = Intrinsic::riscv_vfsgnjn_mask;
2178 PolicyAttrs = 3;
2179IsMasked = true;
2180
2181 {
2182 if (IsMasked) {
2183 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2184 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2185 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2186 Ops.insert(Ops.begin() + 2, Ops[1]);
2187 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2188 // maskedoff, op1, op2, mask, vl
2189 IntrinsicTypes = {ResultType,
2190 Ops[2]->getType(),
2191 Ops.back()->getType()};
2192 } else {
2193 if (PolicyAttrs & RVV_VTA)
2194 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2195 // op1, po2, vl
2196 IntrinsicTypes = {ResultType,
2197 Ops[1]->getType(), Ops[2]->getType()};
2198 Ops.insert(Ops.begin() + 2, Ops[1]);
2199 break;
2200 }
2201 break;
2202 }
2203 break;
2204case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tumu:
2205case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tumu:
2206 ID = Intrinsic::riscv_vfsgnjn_mask;
2207 PolicyAttrs = 0;
2208 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2209 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2210 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2211 break;
2212case RISCVVector::BI__builtin_rvv_vfneg_v_tumu:
2213 ID = Intrinsic::riscv_vfsgnjn_mask;
2214 PolicyAttrs = 0;
2215IsMasked = true;
2216
2217 {
2218 if (IsMasked) {
2219 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2220 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2221 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2222 Ops.insert(Ops.begin() + 2, Ops[1]);
2223 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2224 // maskedoff, op1, op2, mask, vl
2225 IntrinsicTypes = {ResultType,
2226 Ops[2]->getType(),
2227 Ops.back()->getType()};
2228 } else {
2229 if (PolicyAttrs & RVV_VTA)
2230 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2231 // op1, po2, vl
2232 IntrinsicTypes = {ResultType,
2233 Ops[1]->getType(), Ops[2]->getType()};
2234 Ops.insert(Ops.begin() + 2, Ops[1]);
2235 break;
2236 }
2237 break;
2238 }
2239 break;
2240case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_mu:
2241case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_mu:
2242 ID = Intrinsic::riscv_vfsgnjn_mask;
2243 PolicyAttrs = 1;
2244 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2245 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2246 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2247 break;
2248case RISCVVector::BI__builtin_rvv_vfneg_v_mu:
2249 ID = Intrinsic::riscv_vfsgnjn_mask;
2250 PolicyAttrs = 1;
2251IsMasked = true;
2252
2253 {
2254 if (IsMasked) {
2255 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2256 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2257 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2258 Ops.insert(Ops.begin() + 2, Ops[1]);
2259 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2260 // maskedoff, op1, op2, mask, vl
2261 IntrinsicTypes = {ResultType,
2262 Ops[2]->getType(),
2263 Ops.back()->getType()};
2264 } else {
2265 if (PolicyAttrs & RVV_VTA)
2266 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2267 // op1, po2, vl
2268 IntrinsicTypes = {ResultType,
2269 Ops[1]->getType(), Ops[2]->getType()};
2270 Ops.insert(Ops.begin() + 2, Ops[1]);
2271 break;
2272 }
2273 break;
2274 }
2275 break;
2276case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tu:
2277case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tu:
2278 ID = Intrinsic::riscv_vfsgnjx;
2279 PolicyAttrs = 2;
2280 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2281 break;
2282case RISCVVector::BI__builtin_rvv_vfabs_v_tu:
2283 ID = Intrinsic::riscv_vfsgnjx;
2284 PolicyAttrs = 2;
2285IsMasked = false;
2286
2287 {
2288 if (IsMasked) {
2289 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2290 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2291 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2292 Ops.insert(Ops.begin() + 2, Ops[1]);
2293 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2294 // maskedoff, op1, op2, mask, vl
2295 IntrinsicTypes = {ResultType,
2296 Ops[2]->getType(),
2297 Ops.back()->getType()};
2298 } else {
2299 if (PolicyAttrs & RVV_VTA)
2300 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2301 // op1, po2, vl
2302 IntrinsicTypes = {ResultType,
2303 Ops[1]->getType(), Ops[2]->getType()};
2304 Ops.insert(Ops.begin() + 2, Ops[1]);
2305 break;
2306 }
2307 break;
2308 }
2309 break;
2310case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_ta:
2311case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_ta:
2312 ID = Intrinsic::riscv_vfsgnjx;
2313 PolicyAttrs = 3;
2314 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2315 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2316 break;
2317case RISCVVector::BI__builtin_rvv_vfabs_v_ta:
2318 ID = Intrinsic::riscv_vfsgnjx;
2319 PolicyAttrs = 3;
2320IsMasked = false;
2321
2322 {
2323 if (IsMasked) {
2324 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2325 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2326 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2327 Ops.insert(Ops.begin() + 2, Ops[1]);
2328 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2329 // maskedoff, op1, op2, mask, vl
2330 IntrinsicTypes = {ResultType,
2331 Ops[2]->getType(),
2332 Ops.back()->getType()};
2333 } else {
2334 if (PolicyAttrs & RVV_VTA)
2335 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2336 // op1, po2, vl
2337 IntrinsicTypes = {ResultType,
2338 Ops[1]->getType(), Ops[2]->getType()};
2339 Ops.insert(Ops.begin() + 2, Ops[1]);
2340 break;
2341 }
2342 break;
2343 }
2344 break;
2345case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tum:
2346case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tum:
2347 ID = Intrinsic::riscv_vfsgnjx_mask;
2348 PolicyAttrs = 2;
2349 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2350 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2351 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2352 break;
2353case RISCVVector::BI__builtin_rvv_vfabs_v_tum:
2354 ID = Intrinsic::riscv_vfsgnjx_mask;
2355 PolicyAttrs = 2;
2356IsMasked = true;
2357
2358 {
2359 if (IsMasked) {
2360 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2361 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2362 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2363 Ops.insert(Ops.begin() + 2, Ops[1]);
2364 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2365 // maskedoff, op1, op2, mask, vl
2366 IntrinsicTypes = {ResultType,
2367 Ops[2]->getType(),
2368 Ops.back()->getType()};
2369 } else {
2370 if (PolicyAttrs & RVV_VTA)
2371 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2372 // op1, po2, vl
2373 IntrinsicTypes = {ResultType,
2374 Ops[1]->getType(), Ops[2]->getType()};
2375 Ops.insert(Ops.begin() + 2, Ops[1]);
2376 break;
2377 }
2378 break;
2379 }
2380 break;
2381case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tama:
2382case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tama:
2383 ID = Intrinsic::riscv_vfsgnjx_mask;
2384 PolicyAttrs = 3;
2385 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2386 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2387 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2388 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2389 break;
2390case RISCVVector::BI__builtin_rvv_vfabs_v_tama:
2391 ID = Intrinsic::riscv_vfsgnjx_mask;
2392 PolicyAttrs = 3;
2393IsMasked = true;
2394
2395 {
2396 if (IsMasked) {
2397 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2398 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2399 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2400 Ops.insert(Ops.begin() + 2, Ops[1]);
2401 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2402 // maskedoff, op1, op2, mask, vl
2403 IntrinsicTypes = {ResultType,
2404 Ops[2]->getType(),
2405 Ops.back()->getType()};
2406 } else {
2407 if (PolicyAttrs & RVV_VTA)
2408 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2409 // op1, po2, vl
2410 IntrinsicTypes = {ResultType,
2411 Ops[1]->getType(), Ops[2]->getType()};
2412 Ops.insert(Ops.begin() + 2, Ops[1]);
2413 break;
2414 }
2415 break;
2416 }
2417 break;
2418case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tumu:
2419case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tumu:
2420 ID = Intrinsic::riscv_vfsgnjx_mask;
2421 PolicyAttrs = 0;
2422 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2423 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2424 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2425 break;
2426case RISCVVector::BI__builtin_rvv_vfabs_v_tumu:
2427 ID = Intrinsic::riscv_vfsgnjx_mask;
2428 PolicyAttrs = 0;
2429IsMasked = true;
2430
2431 {
2432 if (IsMasked) {
2433 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2434 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2435 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2436 Ops.insert(Ops.begin() + 2, Ops[1]);
2437 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2438 // maskedoff, op1, op2, mask, vl
2439 IntrinsicTypes = {ResultType,
2440 Ops[2]->getType(),
2441 Ops.back()->getType()};
2442 } else {
2443 if (PolicyAttrs & RVV_VTA)
2444 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2445 // op1, po2, vl
2446 IntrinsicTypes = {ResultType,
2447 Ops[1]->getType(), Ops[2]->getType()};
2448 Ops.insert(Ops.begin() + 2, Ops[1]);
2449 break;
2450 }
2451 break;
2452 }
2453 break;
2454case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_mu:
2455case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_mu:
2456 ID = Intrinsic::riscv_vfsgnjx_mask;
2457 PolicyAttrs = 1;
2458 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2459 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2460 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2461 break;
2462case RISCVVector::BI__builtin_rvv_vfabs_v_mu:
2463 ID = Intrinsic::riscv_vfsgnjx_mask;
2464 PolicyAttrs = 1;
2465IsMasked = true;
2466
2467 {
2468 if (IsMasked) {
2469 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2470 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2471 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2472 Ops.insert(Ops.begin() + 2, Ops[1]);
2473 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2474 // maskedoff, op1, op2, mask, vl
2475 IntrinsicTypes = {ResultType,
2476 Ops[2]->getType(),
2477 Ops.back()->getType()};
2478 } else {
2479 if (PolicyAttrs & RVV_VTA)
2480 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2481 // op1, po2, vl
2482 IntrinsicTypes = {ResultType,
2483 Ops[1]->getType(), Ops[2]->getType()};
2484 Ops.insert(Ops.begin() + 2, Ops[1]);
2485 break;
2486 }
2487 break;
2488 }
2489 break;
2490case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tu:
2491 ID = Intrinsic::riscv_vfslide1down;
2492 PolicyAttrs = 2;
2493 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2494 break;
2495case RISCVVector::BI__builtin_rvv_vfslide1down_vf_ta:
2496 ID = Intrinsic::riscv_vfslide1down;
2497 PolicyAttrs = 3;
2498 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2499 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2500 break;
2501case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tum:
2502 ID = Intrinsic::riscv_vfslide1down_mask;
2503 PolicyAttrs = 2;
2504 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2505 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2506 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2507 break;
2508case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tama:
2509 ID = Intrinsic::riscv_vfslide1down_mask;
2510 PolicyAttrs = 3;
2511 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2512 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2513 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2514 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2515 break;
2516case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tumu:
2517 ID = Intrinsic::riscv_vfslide1down_mask;
2518 PolicyAttrs = 0;
2519 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2520 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2521 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2522 break;
2523case RISCVVector::BI__builtin_rvv_vfslide1down_vf_mu:
2524 ID = Intrinsic::riscv_vfslide1down_mask;
2525 PolicyAttrs = 1;
2526 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2527 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2528 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2529 break;
2530case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tu:
2531 ID = Intrinsic::riscv_vfslide1up;
2532 PolicyAttrs = 2;
2533 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2534 break;
2535case RISCVVector::BI__builtin_rvv_vfslide1up_vf_ta:
2536 ID = Intrinsic::riscv_vfslide1up;
2537 PolicyAttrs = 3;
2538 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2539 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2540 break;
2541case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tum:
2542 ID = Intrinsic::riscv_vfslide1up_mask;
2543 PolicyAttrs = 2;
2544 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2545 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2546 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2547 break;
2548case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tama:
2549 ID = Intrinsic::riscv_vfslide1up_mask;
2550 PolicyAttrs = 3;
2551 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2552 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2553 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2554 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2555 break;
2556case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tumu:
2557 ID = Intrinsic::riscv_vfslide1up_mask;
2558 PolicyAttrs = 0;
2559 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2560 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2561 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2562 break;
2563case RISCVVector::BI__builtin_rvv_vfslide1up_vf_mu:
2564 ID = Intrinsic::riscv_vfslide1up_mask;
2565 PolicyAttrs = 1;
2566 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2567 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2568 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2569 break;
2570case RISCVVector::BI__builtin_rvv_vfsqrt_v_tu:
2571 ID = Intrinsic::riscv_vfsqrt;
2572 PolicyAttrs = 2;
2573 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2574 break;
2575case RISCVVector::BI__builtin_rvv_vfsqrt_v_ta:
2576 ID = Intrinsic::riscv_vfsqrt;
2577 PolicyAttrs = 3;
2578 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2579 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2580 break;
2581case RISCVVector::BI__builtin_rvv_vfsqrt_v_tum:
2582 ID = Intrinsic::riscv_vfsqrt_mask;
2583 PolicyAttrs = 2;
2584 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2585 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2586 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2587 break;
2588case RISCVVector::BI__builtin_rvv_vfsqrt_v_tama:
2589 ID = Intrinsic::riscv_vfsqrt_mask;
2590 PolicyAttrs = 3;
2591 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2592 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2593 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2594 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2595 break;
2596case RISCVVector::BI__builtin_rvv_vfsqrt_v_tumu:
2597 ID = Intrinsic::riscv_vfsqrt_mask;
2598 PolicyAttrs = 0;
2599 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2600 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2601 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2602 break;
2603case RISCVVector::BI__builtin_rvv_vfsqrt_v_mu:
2604 ID = Intrinsic::riscv_vfsqrt_mask;
2605 PolicyAttrs = 1;
2606 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2607 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2608 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2609 break;
2610case RISCVVector::BI__builtin_rvv_vfsub_vv_tu:
2611case RISCVVector::BI__builtin_rvv_vfsub_vf_tu:
2612 ID = Intrinsic::riscv_vfsub;
2613 PolicyAttrs = 2;
2614 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2615 break;
2616case RISCVVector::BI__builtin_rvv_vfsub_vv_ta:
2617case RISCVVector::BI__builtin_rvv_vfsub_vf_ta:
2618 ID = Intrinsic::riscv_vfsub;
2619 PolicyAttrs = 3;
2620 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2621 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2622 break;
2623case RISCVVector::BI__builtin_rvv_vfsub_vv_tum:
2624case RISCVVector::BI__builtin_rvv_vfsub_vf_tum:
2625 ID = Intrinsic::riscv_vfsub_mask;
2626 PolicyAttrs = 2;
2627 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2628 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2629 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2630 break;
2631case RISCVVector::BI__builtin_rvv_vfsub_vv_tama:
2632case RISCVVector::BI__builtin_rvv_vfsub_vf_tama:
2633 ID = Intrinsic::riscv_vfsub_mask;
2634 PolicyAttrs = 3;
2635 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2636 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2637 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2638 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2639 break;
2640case RISCVVector::BI__builtin_rvv_vfsub_vv_tumu:
2641case RISCVVector::BI__builtin_rvv_vfsub_vf_tumu:
2642 ID = Intrinsic::riscv_vfsub_mask;
2643 PolicyAttrs = 0;
2644 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2645 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2646 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2647 break;
2648case RISCVVector::BI__builtin_rvv_vfsub_vv_mu:
2649case RISCVVector::BI__builtin_rvv_vfsub_vf_mu:
2650 ID = Intrinsic::riscv_vfsub_mask;
2651 PolicyAttrs = 1;
2652 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2653 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2654 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2655 break;
2656case RISCVVector::BI__builtin_rvv_vfwadd_vv_tu:
2657case RISCVVector::BI__builtin_rvv_vfwadd_vf_tu:
2658 ID = Intrinsic::riscv_vfwadd;
2659 PolicyAttrs = 2;
2660 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2661 break;
2662case RISCVVector::BI__builtin_rvv_vfwadd_vv_ta:
2663case RISCVVector::BI__builtin_rvv_vfwadd_vf_ta:
2664 ID = Intrinsic::riscv_vfwadd;
2665 PolicyAttrs = 3;
2666 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2667 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2668 break;
2669case RISCVVector::BI__builtin_rvv_vfwadd_vv_tum:
2670case RISCVVector::BI__builtin_rvv_vfwadd_vf_tum:
2671 ID = Intrinsic::riscv_vfwadd_mask;
2672 PolicyAttrs = 2;
2673 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2674 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2675 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2676 break;
2677case RISCVVector::BI__builtin_rvv_vfwadd_vv_tama:
2678case RISCVVector::BI__builtin_rvv_vfwadd_vf_tama:
2679 ID = Intrinsic::riscv_vfwadd_mask;
2680 PolicyAttrs = 3;
2681 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2682 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2683 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2684 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2685 break;
2686case RISCVVector::BI__builtin_rvv_vfwadd_vv_tumu:
2687case RISCVVector::BI__builtin_rvv_vfwadd_vf_tumu:
2688 ID = Intrinsic::riscv_vfwadd_mask;
2689 PolicyAttrs = 0;
2690 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2691 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2692 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2693 break;
2694case RISCVVector::BI__builtin_rvv_vfwadd_vv_mu:
2695case RISCVVector::BI__builtin_rvv_vfwadd_vf_mu:
2696 ID = Intrinsic::riscv_vfwadd_mask;
2697 PolicyAttrs = 1;
2698 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2699 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2700 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2701 break;
2702case RISCVVector::BI__builtin_rvv_vfwadd_wv_tu:
2703case RISCVVector::BI__builtin_rvv_vfwadd_wf_tu:
2704 ID = Intrinsic::riscv_vfwadd_w;
2705 PolicyAttrs = 2;
2706 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2707 break;
2708case RISCVVector::BI__builtin_rvv_vfwadd_wv_ta:
2709case RISCVVector::BI__builtin_rvv_vfwadd_wf_ta:
2710 ID = Intrinsic::riscv_vfwadd_w;
2711 PolicyAttrs = 3;
2712 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2713 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2714 break;
2715case RISCVVector::BI__builtin_rvv_vfwadd_wv_tum:
2716case RISCVVector::BI__builtin_rvv_vfwadd_wf_tum:
2717 ID = Intrinsic::riscv_vfwadd_w_mask;
2718 PolicyAttrs = 2;
2719 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2720 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2721 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2722 break;
2723case RISCVVector::BI__builtin_rvv_vfwadd_wv_tama:
2724case RISCVVector::BI__builtin_rvv_vfwadd_wf_tama:
2725 ID = Intrinsic::riscv_vfwadd_w_mask;
2726 PolicyAttrs = 3;
2727 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2728 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2729 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2730 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2731 break;
2732case RISCVVector::BI__builtin_rvv_vfwadd_wv_tumu:
2733case RISCVVector::BI__builtin_rvv_vfwadd_wf_tumu:
2734 ID = Intrinsic::riscv_vfwadd_w_mask;
2735 PolicyAttrs = 0;
2736 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2737 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2738 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2739 break;
2740case RISCVVector::BI__builtin_rvv_vfwadd_wv_mu:
2741case RISCVVector::BI__builtin_rvv_vfwadd_wf_mu:
2742 ID = Intrinsic::riscv_vfwadd_w_mask;
2743 PolicyAttrs = 1;
2744 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2745 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2746 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2747 break;
2748case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tu:
2749 ID = Intrinsic::riscv_vfwcvt_f_f_v;
2750 PolicyAttrs = 2;
2751 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2752 break;
2753case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_ta:
2754 ID = Intrinsic::riscv_vfwcvt_f_f_v;
2755 PolicyAttrs = 3;
2756 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2757 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2758 break;
2759case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tum:
2760 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2761 PolicyAttrs = 2;
2762 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2763 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2764 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2765 break;
2766case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tama:
2767 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2768 PolicyAttrs = 3;
2769 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2770 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2771 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2772 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2773 break;
2774case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tumu:
2775 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2776 PolicyAttrs = 0;
2777 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2778 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2779 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2780 break;
2781case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_mu:
2782 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2783 PolicyAttrs = 1;
2784 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2785 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2786 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2787 break;
2788case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tu:
2789 ID = Intrinsic::riscv_vfwcvt_f_x_v;
2790 PolicyAttrs = 2;
2791 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2792 break;
2793case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_ta:
2794 ID = Intrinsic::riscv_vfwcvt_f_x_v;
2795 PolicyAttrs = 3;
2796 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2797 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2798 break;
2799case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tum:
2800 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2801 PolicyAttrs = 2;
2802 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2803 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2804 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2805 break;
2806case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tama:
2807 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2808 PolicyAttrs = 3;
2809 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2810 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2811 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2812 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2813 break;
2814case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tumu:
2815 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2816 PolicyAttrs = 0;
2817 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2818 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2819 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2820 break;
2821case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_mu:
2822 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2823 PolicyAttrs = 1;
2824 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2825 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2826 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2827 break;
2828case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tu:
2829 ID = Intrinsic::riscv_vfwcvt_f_xu_v;
2830 PolicyAttrs = 2;
2831 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2832 break;
2833case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_ta:
2834 ID = Intrinsic::riscv_vfwcvt_f_xu_v;
2835 PolicyAttrs = 3;
2836 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2837 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2838 break;
2839case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tum:
2840 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2841 PolicyAttrs = 2;
2842 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2843 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2844 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2845 break;
2846case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tama:
2847 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2848 PolicyAttrs = 3;
2849 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2850 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2851 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2852 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2853 break;
2854case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tumu:
2855 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2856 PolicyAttrs = 0;
2857 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2858 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2859 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2860 break;
2861case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_mu:
2862 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2863 PolicyAttrs = 1;
2864 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2865 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2866 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2867 break;
2868case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tu:
2869 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v;
2870 PolicyAttrs = 2;
2871 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2872 break;
2873case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_ta:
2874 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v;
2875 PolicyAttrs = 3;
2876 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2877 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2878 break;
2879case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tum:
2880 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2881 PolicyAttrs = 2;
2882 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2883 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2884 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2885 break;
2886case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tama:
2887 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2888 PolicyAttrs = 3;
2889 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2890 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2891 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2892 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2893 break;
2894case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tumu:
2895 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2896 PolicyAttrs = 0;
2897 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2898 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2899 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2900 break;
2901case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_mu:
2902 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2903 PolicyAttrs = 1;
2904 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2905 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2906 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2907 break;
2908case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tu:
2909 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v;
2910 PolicyAttrs = 2;
2911 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2912 break;
2913case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_ta:
2914 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v;
2915 PolicyAttrs = 3;
2916 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2917 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2918 break;
2919case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tum:
2920 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2921 PolicyAttrs = 2;
2922 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2923 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2924 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2925 break;
2926case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tama:
2927 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2928 PolicyAttrs = 3;
2929 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2930 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2931 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2932 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2933 break;
2934case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tumu:
2935 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2936 PolicyAttrs = 0;
2937 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2938 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2939 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2940 break;
2941case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_mu:
2942 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2943 PolicyAttrs = 1;
2944 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2945 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2946 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2947 break;
2948case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tu:
2949 ID = Intrinsic::riscv_vfwcvt_x_f_v;
2950 PolicyAttrs = 2;
2951 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2952 break;
2953case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_ta:
2954 ID = Intrinsic::riscv_vfwcvt_x_f_v;
2955 PolicyAttrs = 3;
2956 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2957 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2958 break;
2959case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tum:
2960 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2961 PolicyAttrs = 2;
2962 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2963 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2964 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2965 break;
2966case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tama:
2967 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2968 PolicyAttrs = 3;
2969 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2970 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2971 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2972 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2973 break;
2974case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tumu:
2975 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2976 PolicyAttrs = 0;
2977 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2978 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2979 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2980 break;
2981case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_mu:
2982 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2983 PolicyAttrs = 1;
2984 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2985 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2986 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2987 break;
2988case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tu:
2989 ID = Intrinsic::riscv_vfwcvt_xu_f_v;
2990 PolicyAttrs = 2;
2991 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2992 break;
2993case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_ta:
2994 ID = Intrinsic::riscv_vfwcvt_xu_f_v;
2995 PolicyAttrs = 3;
2996 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2997 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2998 break;
2999case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tum:
3000 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3001 PolicyAttrs = 2;
3002 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3003 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3004 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3005 break;
3006case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tama:
3007 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3008 PolicyAttrs = 3;
3009 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3010 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3011 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3012 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3013 break;
3014case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tumu:
3015 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3016 PolicyAttrs = 0;
3017 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3018 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3019 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3020 break;
3021case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_mu:
3022 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3023 PolicyAttrs = 1;
3024 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3025 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3026 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3027 break;
3028case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tu:
3029case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tu:
3030 ID = Intrinsic::riscv_vfwmacc;
3031 PolicyAttrs = 2;
3032 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3033 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3034 break;
3035case RISCVVector::BI__builtin_rvv_vfwmacc_vv_ta:
3036case RISCVVector::BI__builtin_rvv_vfwmacc_vf_ta:
3037 ID = Intrinsic::riscv_vfwmacc;
3038 PolicyAttrs = 3;
3039 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3040 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3041 break;
3042case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tum:
3043case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tum:
3044 ID = Intrinsic::riscv_vfwmacc_mask;
3045 PolicyAttrs = 2;
3046 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3047 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3048 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3049 break;
3050case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tama:
3051case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tama:
3052 ID = Intrinsic::riscv_vfwmacc_mask;
3053 PolicyAttrs = 3;
3054 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3055 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3056 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3057 break;
3058case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tumu:
3059case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tumu:
3060 ID = Intrinsic::riscv_vfwmacc_mask;
3061 PolicyAttrs = 0;
3062 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3063 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3064 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3065 break;
3066case RISCVVector::BI__builtin_rvv_vfwmacc_vv_mu:
3067case RISCVVector::BI__builtin_rvv_vfwmacc_vf_mu:
3068 ID = Intrinsic::riscv_vfwmacc_mask;
3069 PolicyAttrs = 1;
3070 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3071 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3072 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3073 break;
3074case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tu:
3075case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tu:
3076 ID = Intrinsic::riscv_vfwmsac;
3077 PolicyAttrs = 2;
3078 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3079 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3080 break;
3081case RISCVVector::BI__builtin_rvv_vfwmsac_vv_ta:
3082case RISCVVector::BI__builtin_rvv_vfwmsac_vf_ta:
3083 ID = Intrinsic::riscv_vfwmsac;
3084 PolicyAttrs = 3;
3085 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3086 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3087 break;
3088case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tum:
3089case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tum:
3090 ID = Intrinsic::riscv_vfwmsac_mask;
3091 PolicyAttrs = 2;
3092 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3093 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3094 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3095 break;
3096case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tama:
3097case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tama:
3098 ID = Intrinsic::riscv_vfwmsac_mask;
3099 PolicyAttrs = 3;
3100 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3101 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3102 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3103 break;
3104case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tumu:
3105case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tumu:
3106 ID = Intrinsic::riscv_vfwmsac_mask;
3107 PolicyAttrs = 0;
3108 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3109 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3110 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3111 break;
3112case RISCVVector::BI__builtin_rvv_vfwmsac_vv_mu:
3113case RISCVVector::BI__builtin_rvv_vfwmsac_vf_mu:
3114 ID = Intrinsic::riscv_vfwmsac_mask;
3115 PolicyAttrs = 1;
3116 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3117 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3118 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3119 break;
3120case RISCVVector::BI__builtin_rvv_vfwmul_vv_tu:
3121case RISCVVector::BI__builtin_rvv_vfwmul_vf_tu:
3122 ID = Intrinsic::riscv_vfwmul;
3123 PolicyAttrs = 2;
3124 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3125 break;
3126case RISCVVector::BI__builtin_rvv_vfwmul_vv_ta:
3127case RISCVVector::BI__builtin_rvv_vfwmul_vf_ta:
3128 ID = Intrinsic::riscv_vfwmul;
3129 PolicyAttrs = 3;
3130 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3131 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3132 break;
3133case RISCVVector::BI__builtin_rvv_vfwmul_vv_tum:
3134case RISCVVector::BI__builtin_rvv_vfwmul_vf_tum:
3135 ID = Intrinsic::riscv_vfwmul_mask;
3136 PolicyAttrs = 2;
3137 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3138 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3139 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3140 break;
3141case RISCVVector::BI__builtin_rvv_vfwmul_vv_tama:
3142case RISCVVector::BI__builtin_rvv_vfwmul_vf_tama:
3143 ID = Intrinsic::riscv_vfwmul_mask;
3144 PolicyAttrs = 3;
3145 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3146 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3147 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3148 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3149 break;
3150case RISCVVector::BI__builtin_rvv_vfwmul_vv_tumu:
3151case RISCVVector::BI__builtin_rvv_vfwmul_vf_tumu:
3152 ID = Intrinsic::riscv_vfwmul_mask;
3153 PolicyAttrs = 0;
3154 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3155 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3156 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3157 break;
3158case RISCVVector::BI__builtin_rvv_vfwmul_vv_mu:
3159case RISCVVector::BI__builtin_rvv_vfwmul_vf_mu:
3160 ID = Intrinsic::riscv_vfwmul_mask;
3161 PolicyAttrs = 1;
3162 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3163 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3164 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3165 break;
3166case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tu:
3167case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tu:
3168 ID = Intrinsic::riscv_vfwnmacc;
3169 PolicyAttrs = 2;
3170 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3171 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3172 break;
3173case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_ta:
3174case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_ta:
3175 ID = Intrinsic::riscv_vfwnmacc;
3176 PolicyAttrs = 3;
3177 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3178 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3179 break;
3180case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tum:
3181case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tum:
3182 ID = Intrinsic::riscv_vfwnmacc_mask;
3183 PolicyAttrs = 2;
3184 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3185 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3186 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3187 break;
3188case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tama:
3189case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tama:
3190 ID = Intrinsic::riscv_vfwnmacc_mask;
3191 PolicyAttrs = 3;
3192 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3193 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3194 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3195 break;
3196case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tumu:
3197case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tumu:
3198 ID = Intrinsic::riscv_vfwnmacc_mask;
3199 PolicyAttrs = 0;
3200 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3201 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3202 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3203 break;
3204case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_mu:
3205case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_mu:
3206 ID = Intrinsic::riscv_vfwnmacc_mask;
3207 PolicyAttrs = 1;
3208 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3209 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3210 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3211 break;
3212case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tu:
3213case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tu:
3214 ID = Intrinsic::riscv_vfwnmsac;
3215 PolicyAttrs = 2;
3216 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3217 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3218 break;
3219case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_ta:
3220case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_ta:
3221 ID = Intrinsic::riscv_vfwnmsac;
3222 PolicyAttrs = 3;
3223 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3224 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3225 break;
3226case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tum:
3227case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tum:
3228 ID = Intrinsic::riscv_vfwnmsac_mask;
3229 PolicyAttrs = 2;
3230 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3231 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3232 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3233 break;
3234case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tama:
3235case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tama:
3236 ID = Intrinsic::riscv_vfwnmsac_mask;
3237 PolicyAttrs = 3;
3238 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3239 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3240 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3241 break;
3242case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tumu:
3243case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tumu:
3244 ID = Intrinsic::riscv_vfwnmsac_mask;
3245 PolicyAttrs = 0;
3246 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3247 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3248 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3249 break;
3250case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_mu:
3251case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_mu:
3252 ID = Intrinsic::riscv_vfwnmsac_mask;
3253 PolicyAttrs = 1;
3254 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3255 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3256 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3257 break;
3258case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tu:
3259 ID = Intrinsic::riscv_vfwredosum;
3260 PolicyAttrs = 2;
3261 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3262 break;
3263case RISCVVector::BI__builtin_rvv_vfwredosum_vs_ta:
3264 ID = Intrinsic::riscv_vfwredosum;
3265 PolicyAttrs = 3;
3266 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3267 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3268 break;
3269case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tum:
3270 ID = Intrinsic::riscv_vfwredosum_mask;
3271 PolicyAttrs = 2;
3272 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3273 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3274 break;
3275case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tama:
3276 ID = Intrinsic::riscv_vfwredosum_mask;
3277 PolicyAttrs = 3;
3278 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3279 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3280 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3281 break;
3282case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tu:
3283 ID = Intrinsic::riscv_vfwredusum;
3284 PolicyAttrs = 2;
3285 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3286 break;
3287case RISCVVector::BI__builtin_rvv_vfwredusum_vs_ta:
3288 ID = Intrinsic::riscv_vfwredusum;
3289 PolicyAttrs = 3;
3290 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3291 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3292 break;
3293case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tum:
3294 ID = Intrinsic::riscv_vfwredusum_mask;
3295 PolicyAttrs = 2;
3296 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3297 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3298 break;
3299case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tama:
3300 ID = Intrinsic::riscv_vfwredusum_mask;
3301 PolicyAttrs = 3;
3302 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3303 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3304 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3305 break;
3306case RISCVVector::BI__builtin_rvv_vfwsub_vv_tu:
3307case RISCVVector::BI__builtin_rvv_vfwsub_vf_tu:
3308 ID = Intrinsic::riscv_vfwsub;
3309 PolicyAttrs = 2;
3310 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3311 break;
3312case RISCVVector::BI__builtin_rvv_vfwsub_vv_ta:
3313case RISCVVector::BI__builtin_rvv_vfwsub_vf_ta:
3314 ID = Intrinsic::riscv_vfwsub;
3315 PolicyAttrs = 3;
3316 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3317 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3318 break;
3319case RISCVVector::BI__builtin_rvv_vfwsub_vv_tum:
3320case RISCVVector::BI__builtin_rvv_vfwsub_vf_tum:
3321 ID = Intrinsic::riscv_vfwsub_mask;
3322 PolicyAttrs = 2;
3323 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3324 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3325 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3326 break;
3327case RISCVVector::BI__builtin_rvv_vfwsub_vv_tama:
3328case RISCVVector::BI__builtin_rvv_vfwsub_vf_tama:
3329 ID = Intrinsic::riscv_vfwsub_mask;
3330 PolicyAttrs = 3;
3331 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3332 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3333 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3334 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3335 break;
3336case RISCVVector::BI__builtin_rvv_vfwsub_vv_tumu:
3337case RISCVVector::BI__builtin_rvv_vfwsub_vf_tumu:
3338 ID = Intrinsic::riscv_vfwsub_mask;
3339 PolicyAttrs = 0;
3340 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3341 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3342 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3343 break;
3344case RISCVVector::BI__builtin_rvv_vfwsub_vv_mu:
3345case RISCVVector::BI__builtin_rvv_vfwsub_vf_mu:
3346 ID = Intrinsic::riscv_vfwsub_mask;
3347 PolicyAttrs = 1;
3348 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3349 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3350 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3351 break;
3352case RISCVVector::BI__builtin_rvv_vfwsub_wv_tu:
3353case RISCVVector::BI__builtin_rvv_vfwsub_wf_tu:
3354 ID = Intrinsic::riscv_vfwsub_w;
3355 PolicyAttrs = 2;
3356 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3357 break;
3358case RISCVVector::BI__builtin_rvv_vfwsub_wv_ta:
3359case RISCVVector::BI__builtin_rvv_vfwsub_wf_ta:
3360 ID = Intrinsic::riscv_vfwsub_w;
3361 PolicyAttrs = 3;
3362 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3363 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3364 break;
3365case RISCVVector::BI__builtin_rvv_vfwsub_wv_tum:
3366case RISCVVector::BI__builtin_rvv_vfwsub_wf_tum:
3367 ID = Intrinsic::riscv_vfwsub_w_mask;
3368 PolicyAttrs = 2;
3369 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3370 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3371 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3372 break;
3373case RISCVVector::BI__builtin_rvv_vfwsub_wv_tama:
3374case RISCVVector::BI__builtin_rvv_vfwsub_wf_tama:
3375 ID = Intrinsic::riscv_vfwsub_w_mask;
3376 PolicyAttrs = 3;
3377 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3378 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3379 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3380 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3381 break;
3382case RISCVVector::BI__builtin_rvv_vfwsub_wv_tumu:
3383case RISCVVector::BI__builtin_rvv_vfwsub_wf_tumu:
3384 ID = Intrinsic::riscv_vfwsub_w_mask;
3385 PolicyAttrs = 0;
3386 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3387 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3388 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3389 break;
3390case RISCVVector::BI__builtin_rvv_vfwsub_wv_mu:
3391case RISCVVector::BI__builtin_rvv_vfwsub_wf_mu:
3392 ID = Intrinsic::riscv_vfwsub_w_mask;
3393 PolicyAttrs = 1;
3394 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3395 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3396 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3397 break;
3398case RISCVVector::BI__builtin_rvv_vid_v_tu:
3399 ID = Intrinsic::riscv_vid;
3400 PolicyAttrs = 2;
3401 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3402 break;
3403case RISCVVector::BI__builtin_rvv_vid_v_ta:
3404 ID = Intrinsic::riscv_vid;
3405 PolicyAttrs = 3;
3406 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3407 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3408 break;
3409case RISCVVector::BI__builtin_rvv_vid_v_tum:
3410 ID = Intrinsic::riscv_vid_mask;
3411 PolicyAttrs = 2;
3412 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3413 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3414 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3415 break;
3416case RISCVVector::BI__builtin_rvv_vid_v_tama:
3417 ID = Intrinsic::riscv_vid_mask;
3418 PolicyAttrs = 3;
3419 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3420 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3421 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3422 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3423 break;
3424case RISCVVector::BI__builtin_rvv_vid_v_tumu:
3425 ID = Intrinsic::riscv_vid_mask;
3426 PolicyAttrs = 0;
3427 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3428 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3429 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3430 break;
3431case RISCVVector::BI__builtin_rvv_vid_v_mu:
3432 ID = Intrinsic::riscv_vid_mask;
3433 PolicyAttrs = 1;
3434 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3435 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3436 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3437 break;
3438case RISCVVector::BI__builtin_rvv_viota_m_tu:
3439 ID = Intrinsic::riscv_viota;
3440 PolicyAttrs = 2;
3441 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3442 break;
3443case RISCVVector::BI__builtin_rvv_viota_m_ta:
3444 ID = Intrinsic::riscv_viota;
3445 PolicyAttrs = 3;
3446 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3447 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3448 break;
3449case RISCVVector::BI__builtin_rvv_viota_m_tum:
3450 ID = Intrinsic::riscv_viota_mask;
3451 PolicyAttrs = 2;
3452 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3454 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3455 break;
3456case RISCVVector::BI__builtin_rvv_viota_m_tama:
3457 ID = Intrinsic::riscv_viota_mask;
3458 PolicyAttrs = 3;
3459 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3460 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3461 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3462 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3463 break;
3464case RISCVVector::BI__builtin_rvv_viota_m_tumu:
3465 ID = Intrinsic::riscv_viota_mask;
3466 PolicyAttrs = 0;
3467 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3468 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3469 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3470 break;
3471case RISCVVector::BI__builtin_rvv_viota_m_mu:
3472 ID = Intrinsic::riscv_viota_mask;
3473 PolicyAttrs = 1;
3474 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3475 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3476 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3477 break;
3478case RISCVVector::BI__builtin_rvv_vle8_v_tu:
3479case RISCVVector::BI__builtin_rvv_vle16_v_tu:
3480case RISCVVector::BI__builtin_rvv_vle32_v_tu:
3481case RISCVVector::BI__builtin_rvv_vle64_v_tu:
3482 ID = Intrinsic::riscv_vle;
3483 PolicyAttrs = 2;
3484 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3485 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3486 break;
3487case RISCVVector::BI__builtin_rvv_vle8_v_ta:
3488case RISCVVector::BI__builtin_rvv_vle16_v_ta:
3489case RISCVVector::BI__builtin_rvv_vle32_v_ta:
3490case RISCVVector::BI__builtin_rvv_vle64_v_ta:
3491 ID = Intrinsic::riscv_vle;
3492 PolicyAttrs = 3;
3493 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
3494 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3495 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3496 break;
3497case RISCVVector::BI__builtin_rvv_vle8_v_tum:
3498case RISCVVector::BI__builtin_rvv_vle16_v_tum:
3499case RISCVVector::BI__builtin_rvv_vle32_v_tum:
3500case RISCVVector::BI__builtin_rvv_vle64_v_tum:
3501 ID = Intrinsic::riscv_vle_mask;
3502 PolicyAttrs = 2;
3503 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3504 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3505 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3506 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3507 break;
3508case RISCVVector::BI__builtin_rvv_vle8_v_tama:
3509case RISCVVector::BI__builtin_rvv_vle16_v_tama:
3510case RISCVVector::BI__builtin_rvv_vle32_v_tama:
3511case RISCVVector::BI__builtin_rvv_vle64_v_tama:
3512 ID = Intrinsic::riscv_vle_mask;
3513 PolicyAttrs = 3;
3514 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3515 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3516 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3517 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3518 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3519 break;
3520case RISCVVector::BI__builtin_rvv_vle8_v_tumu:
3521case RISCVVector::BI__builtin_rvv_vle16_v_tumu:
3522case RISCVVector::BI__builtin_rvv_vle32_v_tumu:
3523case RISCVVector::BI__builtin_rvv_vle64_v_tumu:
3524 ID = Intrinsic::riscv_vle_mask;
3525 PolicyAttrs = 0;
3526 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3527 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3528 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3529 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3530 break;
3531case RISCVVector::BI__builtin_rvv_vle8_v_mu:
3532case RISCVVector::BI__builtin_rvv_vle16_v_mu:
3533case RISCVVector::BI__builtin_rvv_vle32_v_mu:
3534case RISCVVector::BI__builtin_rvv_vle64_v_mu:
3535 ID = Intrinsic::riscv_vle_mask;
3536 PolicyAttrs = 1;
3537 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3538 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3539 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3540 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3541 break;
3542case RISCVVector::BI__builtin_rvv_vle16ff_v_tu:
3543case RISCVVector::BI__builtin_rvv_vle32ff_v_tu:
3544case RISCVVector::BI__builtin_rvv_vle64ff_v_tu:
3545case RISCVVector::BI__builtin_rvv_vle8ff_v_tu:
3546 ID = Intrinsic::riscv_vleff;
3547 PolicyAttrs = 2;
3548IsMasked = false;
3549
3550 {
3551 if (IsMasked) {
3552 // Move mask to right before vl.
3553 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3554 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3555 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3556 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3557 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3558 } else {
3559 if (PolicyAttrs & RVV_VTA)
3560 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3561 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3562 }
3563 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3564 Value *NewVL = Ops[2];
3565 Ops.erase(Ops.begin() + 2);
3566 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3567 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3568 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3569 // Store new_vl.
3570 clang::CharUnits Align;
3571 if (IsMasked)
3572 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3573 else
3574 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3575 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3576 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3577 return V;
3578 }
3579 break;
3580case RISCVVector::BI__builtin_rvv_vle16ff_v_ta:
3581case RISCVVector::BI__builtin_rvv_vle32ff_v_ta:
3582case RISCVVector::BI__builtin_rvv_vle64ff_v_ta:
3583case RISCVVector::BI__builtin_rvv_vle8ff_v_ta:
3584 ID = Intrinsic::riscv_vleff;
3585 PolicyAttrs = 3;
3586IsMasked = false;
3587
3588 {
3589 if (IsMasked) {
3590 // Move mask to right before vl.
3591 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3592 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3593 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3594 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3595 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3596 } else {
3597 if (PolicyAttrs & RVV_VTA)
3598 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3599 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3600 }
3601 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3602 Value *NewVL = Ops[2];
3603 Ops.erase(Ops.begin() + 2);
3604 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3605 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3606 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3607 // Store new_vl.
3608 clang::CharUnits Align;
3609 if (IsMasked)
3610 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3611 else
3612 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3613 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3614 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3615 return V;
3616 }
3617 break;
3618case RISCVVector::BI__builtin_rvv_vle16ff_v_tum:
3619case RISCVVector::BI__builtin_rvv_vle32ff_v_tum:
3620case RISCVVector::BI__builtin_rvv_vle64ff_v_tum:
3621case RISCVVector::BI__builtin_rvv_vle8ff_v_tum:
3622 ID = Intrinsic::riscv_vleff_mask;
3623 PolicyAttrs = 2;
3624IsMasked = true;
3625
3626 {
3627 if (IsMasked) {
3628 // Move mask to right before vl.
3629 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3630 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3631 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3632 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3633 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3634 } else {
3635 if (PolicyAttrs & RVV_VTA)
3636 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3637 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3638 }
3639 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3640 Value *NewVL = Ops[2];
3641 Ops.erase(Ops.begin() + 2);
3642 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3643 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3644 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3645 // Store new_vl.
3646 clang::CharUnits Align;
3647 if (IsMasked)
3648 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3649 else
3650 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3651 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3652 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3653 return V;
3654 }
3655 break;
3656case RISCVVector::BI__builtin_rvv_vle16ff_v_tama:
3657case RISCVVector::BI__builtin_rvv_vle32ff_v_tama:
3658case RISCVVector::BI__builtin_rvv_vle64ff_v_tama:
3659case RISCVVector::BI__builtin_rvv_vle8ff_v_tama:
3660 ID = Intrinsic::riscv_vleff_mask;
3661 PolicyAttrs = 3;
3662IsMasked = true;
3663
3664 {
3665 if (IsMasked) {
3666 // Move mask to right before vl.
3667 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3668 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3669 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3670 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3671 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3672 } else {
3673 if (PolicyAttrs & RVV_VTA)
3674 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3675 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3676 }
3677 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3678 Value *NewVL = Ops[2];
3679 Ops.erase(Ops.begin() + 2);
3680 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3681 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3682 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3683 // Store new_vl.
3684 clang::CharUnits Align;
3685 if (IsMasked)
3686 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3687 else
3688 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3689 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3690 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3691 return V;
3692 }
3693 break;
3694case RISCVVector::BI__builtin_rvv_vle16ff_v_tumu:
3695case RISCVVector::BI__builtin_rvv_vle32ff_v_tumu:
3696case RISCVVector::BI__builtin_rvv_vle64ff_v_tumu:
3697case RISCVVector::BI__builtin_rvv_vle8ff_v_tumu:
3698 ID = Intrinsic::riscv_vleff_mask;
3699 PolicyAttrs = 0;
3700IsMasked = true;
3701
3702 {
3703 if (IsMasked) {
3704 // Move mask to right before vl.
3705 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3706 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3707 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3708 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3709 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3710 } else {
3711 if (PolicyAttrs & RVV_VTA)
3712 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3713 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3714 }
3715 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3716 Value *NewVL = Ops[2];
3717 Ops.erase(Ops.begin() + 2);
3718 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3719 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3720 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3721 // Store new_vl.
3722 clang::CharUnits Align;
3723 if (IsMasked)
3724 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3725 else
3726 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3727 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3728 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3729 return V;
3730 }
3731 break;
3732case RISCVVector::BI__builtin_rvv_vle16ff_v_mu:
3733case RISCVVector::BI__builtin_rvv_vle32ff_v_mu:
3734case RISCVVector::BI__builtin_rvv_vle64ff_v_mu:
3735case RISCVVector::BI__builtin_rvv_vle8ff_v_mu:
3736 ID = Intrinsic::riscv_vleff_mask;
3737 PolicyAttrs = 1;
3738IsMasked = true;
3739
3740 {
3741 if (IsMasked) {
3742 // Move mask to right before vl.
3743 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3744 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3745 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3746 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3747 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3748 } else {
3749 if (PolicyAttrs & RVV_VTA)
3750 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3751 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3752 }
3753 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3754 Value *NewVL = Ops[2];
3755 Ops.erase(Ops.begin() + 2);
3756 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3757 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3758 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3759 // Store new_vl.
3760 clang::CharUnits Align;
3761 if (IsMasked)
3762 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3763 else
3764 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3765 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3766 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3767 return V;
3768 }
3769 break;
3770case RISCVVector::BI__builtin_rvv_vlm_v:
3771 ID = Intrinsic::riscv_vlm;
3772 PolicyAttrs = 3;
3773 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
3774 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3775 break;
3776case RISCVVector::BI__builtin_rvv_vloxei8_v_tu:
3777case RISCVVector::BI__builtin_rvv_vloxei16_v_tu:
3778case RISCVVector::BI__builtin_rvv_vloxei32_v_tu:
3779case RISCVVector::BI__builtin_rvv_vloxei64_v_tu:
3780 ID = Intrinsic::riscv_vloxei;
3781 PolicyAttrs = 2;
3782 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3783 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3784 break;
3785case RISCVVector::BI__builtin_rvv_vloxei8_v_ta:
3786case RISCVVector::BI__builtin_rvv_vloxei16_v_ta:
3787case RISCVVector::BI__builtin_rvv_vloxei32_v_ta:
3788case RISCVVector::BI__builtin_rvv_vloxei64_v_ta:
3789 ID = Intrinsic::riscv_vloxei;
3790 PolicyAttrs = 3;
3791 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
3792 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3793 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3794 break;
3795case RISCVVector::BI__builtin_rvv_vloxei8_v_tum:
3796case RISCVVector::BI__builtin_rvv_vloxei16_v_tum:
3797case RISCVVector::BI__builtin_rvv_vloxei32_v_tum:
3798case RISCVVector::BI__builtin_rvv_vloxei64_v_tum:
3799 ID = Intrinsic::riscv_vloxei_mask;
3800 PolicyAttrs = 2;
3801 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3802 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3803 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3804 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3805 break;
3806case RISCVVector::BI__builtin_rvv_vloxei8_v_tama:
3807case RISCVVector::BI__builtin_rvv_vloxei16_v_tama:
3808case RISCVVector::BI__builtin_rvv_vloxei32_v_tama:
3809case RISCVVector::BI__builtin_rvv_vloxei64_v_tama:
3810 ID = Intrinsic::riscv_vloxei_mask;
3811 PolicyAttrs = 3;
3812 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3813 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3814 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3815 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3816 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3817 break;
3818case RISCVVector::BI__builtin_rvv_vloxei8_v_tumu:
3819case RISCVVector::BI__builtin_rvv_vloxei16_v_tumu:
3820case RISCVVector::BI__builtin_rvv_vloxei32_v_tumu:
3821case RISCVVector::BI__builtin_rvv_vloxei64_v_tumu:
3822 ID = Intrinsic::riscv_vloxei_mask;
3823 PolicyAttrs = 0;
3824 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3825 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3826 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3827 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3828 break;
3829case RISCVVector::BI__builtin_rvv_vloxei8_v_mu:
3830case RISCVVector::BI__builtin_rvv_vloxei16_v_mu:
3831case RISCVVector::BI__builtin_rvv_vloxei32_v_mu:
3832case RISCVVector::BI__builtin_rvv_vloxei64_v_mu:
3833 ID = Intrinsic::riscv_vloxei_mask;
3834 PolicyAttrs = 1;
3835 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3836 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3837 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3838 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3839 break;
3840case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tu:
3841case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tu:
3842case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tu:
3843case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tu:
3844 ID = Intrinsic::riscv_vloxseg2;
3845 NF = 2;
3846 PolicyAttrs = 2;
3847IsMasked = false;
3848
3849 {
3850 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
3851 SmallVector<llvm::Value*, 12> Operands;
3852
3853 // Please refer to comment under 'defvar NFList' in this file
3854 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
3855 (!IsMasked && PolicyAttrs & RVV_VTA))
3856 Operands.append(NF, llvm::PoisonValue::get(ResultType));
3857 else {
3858 if (IsMasked)
3859 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
3860 else // Unmasked
3861 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
3862 }
3863 unsigned PtrOperandIdx = IsMasked ?
3864 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
3865 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
3866 Value *PtrOperand = Ops[PtrOperandIdx];
3867 Value *IndexOperand = Ops[PtrOperandIdx + 1];
3868 Value *VLOperand = Ops[PtrOperandIdx + 2];
3869 Operands.push_back(PtrOperand);
3870 Operands.push_back(IndexOperand);
3871 if (IsMasked)
3872 Operands.push_back(Ops[NF]);
3873 Operands.push_back(VLOperand);
3874 if (IsMasked)
3875 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3876 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
3877
3878 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3879 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
3880 clang::CharUnits Align =
3881 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
3882 llvm::Value *V;
3883 for (unsigned I = 0; I < NF; ++I) {
3884 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
3885 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
3886 }
3887 return V;
3888 }
3889 break;
3890case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_ta:
3891case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_ta:
3892case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_ta:
3893case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_ta:
3894 ID = Intrinsic::riscv_vloxseg2;
3895 NF = 2;
3896 PolicyAttrs = 3;
3897IsMasked = false;
3898
3899 {
3900 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
3901 SmallVector<llvm::Value*, 12> Operands;
3902
3903 // Please refer to comment under 'defvar NFList' in this file
3904 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
3905 (!IsMasked && PolicyAttrs & RVV_VTA))
3906 Operands.append(NF, llvm::PoisonValue::get(ResultType));
3907 else {
3908 if (IsMasked)
3909 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
3910 else // Unmasked
3911 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
3912 }
3913 unsigned PtrOperandIdx = IsMasked ?
3914 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
3915 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
3916 Value *PtrOperand = Ops[PtrOperandIdx];
3917 Value *IndexOperand = Ops[PtrOperandIdx + 1];
3918 Value *VLOperand = Ops[PtrOperandIdx + 2];
3919 Operands.push_back(PtrOperand);
3920 Operands.push_back(IndexOperand);
3921 if (IsMasked)
3922 Operands.push_back(Ops[NF]);
3923 Operands.push_back(VLOperand);
3924 if (IsMasked)
3925 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3926 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
3927
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;
3940case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tum:
3941case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tum:
3942case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tum:
3943case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tum:
3944 ID = Intrinsic::riscv_vloxseg2_mask;
3945 NF = 2;
3946 PolicyAttrs = 2;
3947IsMasked = true;
3948
3949 {
3950 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
3951 SmallVector<llvm::Value*, 12> Operands;
3952
3953 // Please refer to comment under 'defvar NFList' in this file
3954 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
3955 (!IsMasked && PolicyAttrs & RVV_VTA))
3956 Operands.append(NF, llvm::PoisonValue::get(ResultType));
3957 else {
3958 if (IsMasked)
3959 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
3960 else // Unmasked
3961 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
3962 }
3963 unsigned PtrOperandIdx = IsMasked ?
3964 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
3965 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
3966 Value *PtrOperand = Ops[PtrOperandIdx];
3967 Value *IndexOperand = Ops[PtrOperandIdx + 1];
3968 Value *VLOperand = Ops[PtrOperandIdx + 2];
3969 Operands.push_back(PtrOperand);
3970 Operands.push_back(IndexOperand);
3971 if (IsMasked)
3972 Operands.push_back(Ops[NF]);
3973 Operands.push_back(VLOperand);
3974 if (IsMasked)
3975 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3976 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
3977
3978 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3979 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
3980 clang::CharUnits Align =
3981 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
3982 llvm::Value *V;
3983 for (unsigned I = 0; I < NF; ++I) {
3984 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
3985 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
3986 }
3987 return V;
3988 }
3989 break;
3990case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tama:
3991case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tama:
3992case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tama:
3993case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tama:
3994 ID = Intrinsic::riscv_vloxseg2_mask;
3995 NF = 2;
3996 PolicyAttrs = 3;
3997IsMasked = true;
3998
3999 {
4000 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4001 SmallVector<llvm::Value*, 12> Operands;
4002
4003 // Please refer to comment under 'defvar NFList' in this file
4004 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4005 (!IsMasked && PolicyAttrs & RVV_VTA))
4006 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4007 else {
4008 if (IsMasked)
4009 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4010 else // Unmasked
4011 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4012 }
4013 unsigned PtrOperandIdx = IsMasked ?
4014 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4015 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4016 Value *PtrOperand = Ops[PtrOperandIdx];
4017 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4018 Value *VLOperand = Ops[PtrOperandIdx + 2];
4019 Operands.push_back(PtrOperand);
4020 Operands.push_back(IndexOperand);
4021 if (IsMasked)
4022 Operands.push_back(Ops[NF]);
4023 Operands.push_back(VLOperand);
4024 if (IsMasked)
4025 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4026 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4027
4028 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4029 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4030 clang::CharUnits Align =
4031 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4032 llvm::Value *V;
4033 for (unsigned I = 0; I < NF; ++I) {
4034 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4035 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4036 }
4037 return V;
4038 }
4039 break;
4040case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tumu:
4041case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tumu:
4042case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tumu:
4043case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tumu:
4044 ID = Intrinsic::riscv_vloxseg2_mask;
4045 NF = 2;
4046 PolicyAttrs = 0;
4047IsMasked = true;
4048
4049 {
4050 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4051 SmallVector<llvm::Value*, 12> Operands;
4052
4053 // Please refer to comment under 'defvar NFList' in this file
4054 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4055 (!IsMasked && PolicyAttrs & RVV_VTA))
4056 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4057 else {
4058 if (IsMasked)
4059 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4060 else // Unmasked
4061 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4062 }
4063 unsigned PtrOperandIdx = IsMasked ?
4064 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4065 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4066 Value *PtrOperand = Ops[PtrOperandIdx];
4067 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4068 Value *VLOperand = Ops[PtrOperandIdx + 2];
4069 Operands.push_back(PtrOperand);
4070 Operands.push_back(IndexOperand);
4071 if (IsMasked)
4072 Operands.push_back(Ops[NF]);
4073 Operands.push_back(VLOperand);
4074 if (IsMasked)
4075 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4076 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4077
4078 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4079 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4080 clang::CharUnits Align =
4081 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4082 llvm::Value *V;
4083 for (unsigned I = 0; I < NF; ++I) {
4084 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4085 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4086 }
4087 return V;
4088 }
4089 break;
4090case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_mu:
4091case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_mu:
4092case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_mu:
4093case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_mu:
4094 ID = Intrinsic::riscv_vloxseg2_mask;
4095 NF = 2;
4096 PolicyAttrs = 1;
4097IsMasked = true;
4098
4099 {
4100 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4101 SmallVector<llvm::Value*, 12> Operands;
4102
4103 // Please refer to comment under 'defvar NFList' in this file
4104 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4105 (!IsMasked && PolicyAttrs & RVV_VTA))
4106 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4107 else {
4108 if (IsMasked)
4109 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4110 else // Unmasked
4111 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4112 }
4113 unsigned PtrOperandIdx = IsMasked ?
4114 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4115 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4116 Value *PtrOperand = Ops[PtrOperandIdx];
4117 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4118 Value *VLOperand = Ops[PtrOperandIdx + 2];
4119 Operands.push_back(PtrOperand);
4120 Operands.push_back(IndexOperand);
4121 if (IsMasked)
4122 Operands.push_back(Ops[NF]);
4123 Operands.push_back(VLOperand);
4124 if (IsMasked)
4125 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4126 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4127
4128 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4129 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4130 clang::CharUnits Align =
4131 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4132 llvm::Value *V;
4133 for (unsigned I = 0; I < NF; ++I) {
4134 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4135 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4136 }
4137 return V;
4138 }
4139 break;
4140case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tu:
4141case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tu:
4142case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tu:
4143case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tu:
4144 ID = Intrinsic::riscv_vloxseg3;
4145 NF = 3;
4146 PolicyAttrs = 2;
4147IsMasked = false;
4148
4149 {
4150 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4151 SmallVector<llvm::Value*, 12> Operands;
4152
4153 // Please refer to comment under 'defvar NFList' in this file
4154 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4155 (!IsMasked && PolicyAttrs & RVV_VTA))
4156 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4157 else {
4158 if (IsMasked)
4159 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4160 else // Unmasked
4161 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4162 }
4163 unsigned PtrOperandIdx = IsMasked ?
4164 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4165 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4166 Value *PtrOperand = Ops[PtrOperandIdx];
4167 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4168 Value *VLOperand = Ops[PtrOperandIdx + 2];
4169 Operands.push_back(PtrOperand);
4170 Operands.push_back(IndexOperand);
4171 if (IsMasked)
4172 Operands.push_back(Ops[NF]);
4173 Operands.push_back(VLOperand);
4174 if (IsMasked)
4175 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4176 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4177
4178 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4179 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4180 clang::CharUnits Align =
4181 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4182 llvm::Value *V;
4183 for (unsigned I = 0; I < NF; ++I) {
4184 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4185 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4186 }
4187 return V;
4188 }
4189 break;
4190case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_ta:
4191case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_ta:
4192case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_ta:
4193case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_ta:
4194 ID = Intrinsic::riscv_vloxseg3;
4195 NF = 3;
4196 PolicyAttrs = 3;
4197IsMasked = false;
4198
4199 {
4200 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4201 SmallVector<llvm::Value*, 12> Operands;
4202
4203 // Please refer to comment under 'defvar NFList' in this file
4204 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4205 (!IsMasked && PolicyAttrs & RVV_VTA))
4206 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4207 else {
4208 if (IsMasked)
4209 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4210 else // Unmasked
4211 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4212 }
4213 unsigned PtrOperandIdx = IsMasked ?
4214 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4215 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4216 Value *PtrOperand = Ops[PtrOperandIdx];
4217 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4218 Value *VLOperand = Ops[PtrOperandIdx + 2];
4219 Operands.push_back(PtrOperand);
4220 Operands.push_back(IndexOperand);
4221 if (IsMasked)
4222 Operands.push_back(Ops[NF]);
4223 Operands.push_back(VLOperand);
4224 if (IsMasked)
4225 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4226 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4227
4228 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4229 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4230 clang::CharUnits Align =
4231 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4232 llvm::Value *V;
4233 for (unsigned I = 0; I < NF; ++I) {
4234 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4235 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4236 }
4237 return V;
4238 }
4239 break;
4240case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tum:
4241case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tum:
4242case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tum:
4243case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tum:
4244 ID = Intrinsic::riscv_vloxseg3_mask;
4245 NF = 3;
4246 PolicyAttrs = 2;
4247IsMasked = true;
4248
4249 {
4250 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4251 SmallVector<llvm::Value*, 12> Operands;
4252
4253 // Please refer to comment under 'defvar NFList' in this file
4254 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4255 (!IsMasked && PolicyAttrs & RVV_VTA))
4256 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4257 else {
4258 if (IsMasked)
4259 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4260 else // Unmasked
4261 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4262 }
4263 unsigned PtrOperandIdx = IsMasked ?
4264 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4265 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4266 Value *PtrOperand = Ops[PtrOperandIdx];
4267 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4268 Value *VLOperand = Ops[PtrOperandIdx + 2];
4269 Operands.push_back(PtrOperand);
4270 Operands.push_back(IndexOperand);
4271 if (IsMasked)
4272 Operands.push_back(Ops[NF]);
4273 Operands.push_back(VLOperand);
4274 if (IsMasked)
4275 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4276 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4277
4278 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4279 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4280 clang::CharUnits Align =
4281 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4282 llvm::Value *V;
4283 for (unsigned I = 0; I < NF; ++I) {
4284 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4285 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4286 }
4287 return V;
4288 }
4289 break;
4290case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tama:
4291case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tama:
4292case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tama:
4293case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tama:
4294 ID = Intrinsic::riscv_vloxseg3_mask;
4295 NF = 3;
4296 PolicyAttrs = 3;
4297IsMasked = true;
4298
4299 {
4300 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4301 SmallVector<llvm::Value*, 12> Operands;
4302
4303 // Please refer to comment under 'defvar NFList' in this file
4304 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4305 (!IsMasked && PolicyAttrs & RVV_VTA))
4306 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4307 else {
4308 if (IsMasked)
4309 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4310 else // Unmasked
4311 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4312 }
4313 unsigned PtrOperandIdx = IsMasked ?
4314 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4315 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4316 Value *PtrOperand = Ops[PtrOperandIdx];
4317 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4318 Value *VLOperand = Ops[PtrOperandIdx + 2];
4319 Operands.push_back(PtrOperand);
4320 Operands.push_back(IndexOperand);
4321 if (IsMasked)
4322 Operands.push_back(Ops[NF]);
4323 Operands.push_back(VLOperand);
4324 if (IsMasked)
4325 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4326 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4327
4328 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4329 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4330 clang::CharUnits Align =
4331 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4332 llvm::Value *V;
4333 for (unsigned I = 0; I < NF; ++I) {
4334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4335 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4336 }
4337 return V;
4338 }
4339 break;
4340case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tumu:
4341case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tumu:
4342case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tumu:
4343case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tumu:
4344 ID = Intrinsic::riscv_vloxseg3_mask;
4345 NF = 3;
4346 PolicyAttrs = 0;
4347IsMasked = true;
4348
4349 {
4350 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4351 SmallVector<llvm::Value*, 12> Operands;
4352
4353 // Please refer to comment under 'defvar NFList' in this file
4354 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4355 (!IsMasked && PolicyAttrs & RVV_VTA))
4356 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4357 else {
4358 if (IsMasked)
4359 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4360 else // Unmasked
4361 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4362 }
4363 unsigned PtrOperandIdx = IsMasked ?
4364 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4365 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4366 Value *PtrOperand = Ops[PtrOperandIdx];
4367 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4368 Value *VLOperand = Ops[PtrOperandIdx + 2];
4369 Operands.push_back(PtrOperand);
4370 Operands.push_back(IndexOperand);
4371 if (IsMasked)
4372 Operands.push_back(Ops[NF]);
4373 Operands.push_back(VLOperand);
4374 if (IsMasked)
4375 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4376 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4377
4378 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4379 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4380 clang::CharUnits Align =
4381 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4382 llvm::Value *V;
4383 for (unsigned I = 0; I < NF; ++I) {
4384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4385 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4386 }
4387 return V;
4388 }
4389 break;
4390case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_mu:
4391case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_mu:
4392case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_mu:
4393case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_mu:
4394 ID = Intrinsic::riscv_vloxseg3_mask;
4395 NF = 3;
4396 PolicyAttrs = 1;
4397IsMasked = true;
4398
4399 {
4400 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4401 SmallVector<llvm::Value*, 12> Operands;
4402
4403 // Please refer to comment under 'defvar NFList' in this file
4404 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4405 (!IsMasked && PolicyAttrs & RVV_VTA))
4406 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4407 else {
4408 if (IsMasked)
4409 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4410 else // Unmasked
4411 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4412 }
4413 unsigned PtrOperandIdx = IsMasked ?
4414 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4415 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4416 Value *PtrOperand = Ops[PtrOperandIdx];
4417 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4418 Value *VLOperand = Ops[PtrOperandIdx + 2];
4419 Operands.push_back(PtrOperand);
4420 Operands.push_back(IndexOperand);
4421 if (IsMasked)
4422 Operands.push_back(Ops[NF]);
4423 Operands.push_back(VLOperand);
4424 if (IsMasked)
4425 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4426 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4427
4428 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4429 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4430 clang::CharUnits Align =
4431 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4432 llvm::Value *V;
4433 for (unsigned I = 0; I < NF; ++I) {
4434 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4435 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4436 }
4437 return V;
4438 }
4439 break;
4440case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tu:
4441case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tu:
4442case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tu:
4443case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tu:
4444 ID = Intrinsic::riscv_vloxseg4;
4445 NF = 4;
4446 PolicyAttrs = 2;
4447IsMasked = false;
4448
4449 {
4450 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4451 SmallVector<llvm::Value*, 12> Operands;
4452
4453 // Please refer to comment under 'defvar NFList' in this file
4454 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4455 (!IsMasked && PolicyAttrs & RVV_VTA))
4456 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4457 else {
4458 if (IsMasked)
4459 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4460 else // Unmasked
4461 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4462 }
4463 unsigned PtrOperandIdx = IsMasked ?
4464 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4465 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4466 Value *PtrOperand = Ops[PtrOperandIdx];
4467 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4468 Value *VLOperand = Ops[PtrOperandIdx + 2];
4469 Operands.push_back(PtrOperand);
4470 Operands.push_back(IndexOperand);
4471 if (IsMasked)
4472 Operands.push_back(Ops[NF]);
4473 Operands.push_back(VLOperand);
4474 if (IsMasked)
4475 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4476 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4477
4478 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4479 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4480 clang::CharUnits Align =
4481 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4482 llvm::Value *V;
4483 for (unsigned I = 0; I < NF; ++I) {
4484 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4485 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4486 }
4487 return V;
4488 }
4489 break;
4490case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_ta:
4491case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_ta:
4492case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_ta:
4493case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_ta:
4494 ID = Intrinsic::riscv_vloxseg4;
4495 NF = 4;
4496 PolicyAttrs = 3;
4497IsMasked = false;
4498
4499 {
4500 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4501 SmallVector<llvm::Value*, 12> Operands;
4502
4503 // Please refer to comment under 'defvar NFList' in this file
4504 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4505 (!IsMasked && PolicyAttrs & RVV_VTA))
4506 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4507 else {
4508 if (IsMasked)
4509 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4510 else // Unmasked
4511 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4512 }
4513 unsigned PtrOperandIdx = IsMasked ?
4514 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4515 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4516 Value *PtrOperand = Ops[PtrOperandIdx];
4517 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4518 Value *VLOperand = Ops[PtrOperandIdx + 2];
4519 Operands.push_back(PtrOperand);
4520 Operands.push_back(IndexOperand);
4521 if (IsMasked)
4522 Operands.push_back(Ops[NF]);
4523 Operands.push_back(VLOperand);
4524 if (IsMasked)
4525 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4526 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4527
4528 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4529 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4530 clang::CharUnits Align =
4531 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4532 llvm::Value *V;
4533 for (unsigned I = 0; I < NF; ++I) {
4534 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4535 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4536 }
4537 return V;
4538 }
4539 break;
4540case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tum:
4541case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tum:
4542case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tum:
4543case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tum:
4544 ID = Intrinsic::riscv_vloxseg4_mask;
4545 NF = 4;
4546 PolicyAttrs = 2;
4547IsMasked = true;
4548
4549 {
4550 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4551 SmallVector<llvm::Value*, 12> Operands;
4552
4553 // Please refer to comment under 'defvar NFList' in this file
4554 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4555 (!IsMasked && PolicyAttrs & RVV_VTA))
4556 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4557 else {
4558 if (IsMasked)
4559 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4560 else // Unmasked
4561 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4562 }
4563 unsigned PtrOperandIdx = IsMasked ?
4564 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4565 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4566 Value *PtrOperand = Ops[PtrOperandIdx];
4567 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4568 Value *VLOperand = Ops[PtrOperandIdx + 2];
4569 Operands.push_back(PtrOperand);
4570 Operands.push_back(IndexOperand);
4571 if (IsMasked)
4572 Operands.push_back(Ops[NF]);
4573 Operands.push_back(VLOperand);
4574 if (IsMasked)
4575 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4576 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4577
4578 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4579 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4580 clang::CharUnits Align =
4581 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4582 llvm::Value *V;
4583 for (unsigned I = 0; I < NF; ++I) {
4584 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4585 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4586 }
4587 return V;
4588 }
4589 break;
4590case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tama:
4591case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tama:
4592case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tama:
4593case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tama:
4594 ID = Intrinsic::riscv_vloxseg4_mask;
4595 NF = 4;
4596 PolicyAttrs = 3;
4597IsMasked = true;
4598
4599 {
4600 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4601 SmallVector<llvm::Value*, 12> Operands;
4602
4603 // Please refer to comment under 'defvar NFList' in this file
4604 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4605 (!IsMasked && PolicyAttrs & RVV_VTA))
4606 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4607 else {
4608 if (IsMasked)
4609 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4610 else // Unmasked
4611 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4612 }
4613 unsigned PtrOperandIdx = IsMasked ?
4614 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4615 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4616 Value *PtrOperand = Ops[PtrOperandIdx];
4617 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4618 Value *VLOperand = Ops[PtrOperandIdx + 2];
4619 Operands.push_back(PtrOperand);
4620 Operands.push_back(IndexOperand);
4621 if (IsMasked)
4622 Operands.push_back(Ops[NF]);
4623 Operands.push_back(VLOperand);
4624 if (IsMasked)
4625 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4626 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4627
4628 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4629 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4630 clang::CharUnits Align =
4631 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4632 llvm::Value *V;
4633 for (unsigned I = 0; I < NF; ++I) {
4634 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4635 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4636 }
4637 return V;
4638 }
4639 break;
4640case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tumu:
4641case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tumu:
4642case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tumu:
4643case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tumu:
4644 ID = Intrinsic::riscv_vloxseg4_mask;
4645 NF = 4;
4646 PolicyAttrs = 0;
4647IsMasked = true;
4648
4649 {
4650 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4651 SmallVector<llvm::Value*, 12> Operands;
4652
4653 // Please refer to comment under 'defvar NFList' in this file
4654 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4655 (!IsMasked && PolicyAttrs & RVV_VTA))
4656 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4657 else {
4658 if (IsMasked)
4659 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4660 else // Unmasked
4661 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4662 }
4663 unsigned PtrOperandIdx = IsMasked ?
4664 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4665 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4666 Value *PtrOperand = Ops[PtrOperandIdx];
4667 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4668 Value *VLOperand = Ops[PtrOperandIdx + 2];
4669 Operands.push_back(PtrOperand);
4670 Operands.push_back(IndexOperand);
4671 if (IsMasked)
4672 Operands.push_back(Ops[NF]);
4673 Operands.push_back(VLOperand);
4674 if (IsMasked)
4675 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4676 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4677
4678 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4679 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4680 clang::CharUnits Align =
4681 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4682 llvm::Value *V;
4683 for (unsigned I = 0; I < NF; ++I) {
4684 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4685 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4686 }
4687 return V;
4688 }
4689 break;
4690case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_mu:
4691case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_mu:
4692case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_mu:
4693case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_mu:
4694 ID = Intrinsic::riscv_vloxseg4_mask;
4695 NF = 4;
4696 PolicyAttrs = 1;
4697IsMasked = true;
4698
4699 {
4700 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4701 SmallVector<llvm::Value*, 12> Operands;
4702
4703 // Please refer to comment under 'defvar NFList' in this file
4704 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4705 (!IsMasked && PolicyAttrs & RVV_VTA))
4706 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4707 else {
4708 if (IsMasked)
4709 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4710 else // Unmasked
4711 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4712 }
4713 unsigned PtrOperandIdx = IsMasked ?
4714 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4715 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4716 Value *PtrOperand = Ops[PtrOperandIdx];
4717 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4718 Value *VLOperand = Ops[PtrOperandIdx + 2];
4719 Operands.push_back(PtrOperand);
4720 Operands.push_back(IndexOperand);
4721 if (IsMasked)
4722 Operands.push_back(Ops[NF]);
4723 Operands.push_back(VLOperand);
4724 if (IsMasked)
4725 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4726 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4727
4728 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4729 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4730 clang::CharUnits Align =
4731 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4732 llvm::Value *V;
4733 for (unsigned I = 0; I < NF; ++I) {
4734 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4735 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4736 }
4737 return V;
4738 }
4739 break;
4740case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tu:
4741case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tu:
4742case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tu:
4743case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tu:
4744 ID = Intrinsic::riscv_vloxseg5;
4745 NF = 5;
4746 PolicyAttrs = 2;
4747IsMasked = false;
4748
4749 {
4750 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4751 SmallVector<llvm::Value*, 12> Operands;
4752
4753 // Please refer to comment under 'defvar NFList' in this file
4754 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4755 (!IsMasked && PolicyAttrs & RVV_VTA))
4756 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4757 else {
4758 if (IsMasked)
4759 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4760 else // Unmasked
4761 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4762 }
4763 unsigned PtrOperandIdx = IsMasked ?
4764 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4765 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4766 Value *PtrOperand = Ops[PtrOperandIdx];
4767 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4768 Value *VLOperand = Ops[PtrOperandIdx + 2];
4769 Operands.push_back(PtrOperand);
4770 Operands.push_back(IndexOperand);
4771 if (IsMasked)
4772 Operands.push_back(Ops[NF]);
4773 Operands.push_back(VLOperand);
4774 if (IsMasked)
4775 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4776 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4777
4778 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4779 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4780 clang::CharUnits Align =
4781 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4782 llvm::Value *V;
4783 for (unsigned I = 0; I < NF; ++I) {
4784 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4785 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4786 }
4787 return V;
4788 }
4789 break;
4790case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_ta:
4791case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_ta:
4792case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_ta:
4793case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_ta:
4794 ID = Intrinsic::riscv_vloxseg5;
4795 NF = 5;
4796 PolicyAttrs = 3;
4797IsMasked = false;
4798
4799 {
4800 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4801 SmallVector<llvm::Value*, 12> Operands;
4802
4803 // Please refer to comment under 'defvar NFList' in this file
4804 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4805 (!IsMasked && PolicyAttrs & RVV_VTA))
4806 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4807 else {
4808 if (IsMasked)
4809 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4810 else // Unmasked
4811 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4812 }
4813 unsigned PtrOperandIdx = IsMasked ?
4814 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4815 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4816 Value *PtrOperand = Ops[PtrOperandIdx];
4817 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4818 Value *VLOperand = Ops[PtrOperandIdx + 2];
4819 Operands.push_back(PtrOperand);
4820 Operands.push_back(IndexOperand);
4821 if (IsMasked)
4822 Operands.push_back(Ops[NF]);
4823 Operands.push_back(VLOperand);
4824 if (IsMasked)
4825 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4826 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4827
4828 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4829 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4830 clang::CharUnits Align =
4831 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4832 llvm::Value *V;
4833 for (unsigned I = 0; I < NF; ++I) {
4834 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4835 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4836 }
4837 return V;
4838 }
4839 break;
4840case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tum:
4841case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tum:
4842case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tum:
4843case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tum:
4844 ID = Intrinsic::riscv_vloxseg5_mask;
4845 NF = 5;
4846 PolicyAttrs = 2;
4847IsMasked = true;
4848
4849 {
4850 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4851 SmallVector<llvm::Value*, 12> Operands;
4852
4853 // Please refer to comment under 'defvar NFList' in this file
4854 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4855 (!IsMasked && PolicyAttrs & RVV_VTA))
4856 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4857 else {
4858 if (IsMasked)
4859 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4860 else // Unmasked
4861 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4862 }
4863 unsigned PtrOperandIdx = IsMasked ?
4864 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4865 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4866 Value *PtrOperand = Ops[PtrOperandIdx];
4867 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4868 Value *VLOperand = Ops[PtrOperandIdx + 2];
4869 Operands.push_back(PtrOperand);
4870 Operands.push_back(IndexOperand);
4871 if (IsMasked)
4872 Operands.push_back(Ops[NF]);
4873 Operands.push_back(VLOperand);
4874 if (IsMasked)
4875 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4876 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4877
4878 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4879 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4880 clang::CharUnits Align =
4881 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4882 llvm::Value *V;
4883 for (unsigned I = 0; I < NF; ++I) {
4884 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4885 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4886 }
4887 return V;
4888 }
4889 break;
4890case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tama:
4891case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tama:
4892case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tama:
4893case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tama:
4894 ID = Intrinsic::riscv_vloxseg5_mask;
4895 NF = 5;
4896 PolicyAttrs = 3;
4897IsMasked = true;
4898
4899 {
4900 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4901 SmallVector<llvm::Value*, 12> Operands;
4902
4903 // Please refer to comment under 'defvar NFList' in this file
4904 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4905 (!IsMasked && PolicyAttrs & RVV_VTA))
4906 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4907 else {
4908 if (IsMasked)
4909 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4910 else // Unmasked
4911 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4912 }
4913 unsigned PtrOperandIdx = IsMasked ?
4914 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4915 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4916 Value *PtrOperand = Ops[PtrOperandIdx];
4917 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4918 Value *VLOperand = Ops[PtrOperandIdx + 2];
4919 Operands.push_back(PtrOperand);
4920 Operands.push_back(IndexOperand);
4921 if (IsMasked)
4922 Operands.push_back(Ops[NF]);
4923 Operands.push_back(VLOperand);
4924 if (IsMasked)
4925 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4926 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4927
4928 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4929 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4930 clang::CharUnits Align =
4931 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4932 llvm::Value *V;
4933 for (unsigned I = 0; I < NF; ++I) {
4934 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4935 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4936 }
4937 return V;
4938 }
4939 break;
4940case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tumu:
4941case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tumu:
4942case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tumu:
4943case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tumu:
4944 ID = Intrinsic::riscv_vloxseg5_mask;
4945 NF = 5;
4946 PolicyAttrs = 0;
4947IsMasked = true;
4948
4949 {
4950 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4951 SmallVector<llvm::Value*, 12> Operands;
4952
4953 // Please refer to comment under 'defvar NFList' in this file
4954 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4955 (!IsMasked && PolicyAttrs & RVV_VTA))
4956 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4957 else {
4958 if (IsMasked)
4959 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4960 else // Unmasked
4961 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4962 }
4963 unsigned PtrOperandIdx = IsMasked ?
4964 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4965 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4966 Value *PtrOperand = Ops[PtrOperandIdx];
4967 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4968 Value *VLOperand = Ops[PtrOperandIdx + 2];
4969 Operands.push_back(PtrOperand);
4970 Operands.push_back(IndexOperand);
4971 if (IsMasked)
4972 Operands.push_back(Ops[NF]);
4973 Operands.push_back(VLOperand);
4974 if (IsMasked)
4975 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4976 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4977
4978 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4979 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4980 clang::CharUnits Align =
4981 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4982 llvm::Value *V;
4983 for (unsigned I = 0; I < NF; ++I) {
4984 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4985 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4986 }
4987 return V;
4988 }
4989 break;
4990case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_mu:
4991case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_mu:
4992case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_mu:
4993case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_mu:
4994 ID = Intrinsic::riscv_vloxseg5_mask;
4995 NF = 5;
4996 PolicyAttrs = 1;
4997IsMasked = true;
4998
4999 {
5000 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5001 SmallVector<llvm::Value*, 12> Operands;
5002
5003 // Please refer to comment under 'defvar NFList' in this file
5004 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5005 (!IsMasked && PolicyAttrs & RVV_VTA))
5006 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5007 else {
5008 if (IsMasked)
5009 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5010 else // Unmasked
5011 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5012 }
5013 unsigned PtrOperandIdx = IsMasked ?
5014 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5015 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5016 Value *PtrOperand = Ops[PtrOperandIdx];
5017 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5018 Value *VLOperand = Ops[PtrOperandIdx + 2];
5019 Operands.push_back(PtrOperand);
5020 Operands.push_back(IndexOperand);
5021 if (IsMasked)
5022 Operands.push_back(Ops[NF]);
5023 Operands.push_back(VLOperand);
5024 if (IsMasked)
5025 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5026 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5027
5028 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5029 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5030 clang::CharUnits Align =
5031 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5032 llvm::Value *V;
5033 for (unsigned I = 0; I < NF; ++I) {
5034 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5035 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5036 }
5037 return V;
5038 }
5039 break;
5040case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tu:
5041case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tu:
5042case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tu:
5043case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tu:
5044 ID = Intrinsic::riscv_vloxseg6;
5045 NF = 6;
5046 PolicyAttrs = 2;
5047IsMasked = false;
5048
5049 {
5050 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5051 SmallVector<llvm::Value*, 12> Operands;
5052
5053 // Please refer to comment under 'defvar NFList' in this file
5054 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5055 (!IsMasked && PolicyAttrs & RVV_VTA))
5056 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5057 else {
5058 if (IsMasked)
5059 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5060 else // Unmasked
5061 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5062 }
5063 unsigned PtrOperandIdx = IsMasked ?
5064 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5065 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5066 Value *PtrOperand = Ops[PtrOperandIdx];
5067 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5068 Value *VLOperand = Ops[PtrOperandIdx + 2];
5069 Operands.push_back(PtrOperand);
5070 Operands.push_back(IndexOperand);
5071 if (IsMasked)
5072 Operands.push_back(Ops[NF]);
5073 Operands.push_back(VLOperand);
5074 if (IsMasked)
5075 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5076 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5077
5078 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5079 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5080 clang::CharUnits Align =
5081 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5082 llvm::Value *V;
5083 for (unsigned I = 0; I < NF; ++I) {
5084 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5085 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5086 }
5087 return V;
5088 }
5089 break;
5090case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_ta:
5091case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_ta:
5092case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_ta:
5093case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_ta:
5094 ID = Intrinsic::riscv_vloxseg6;
5095 NF = 6;
5096 PolicyAttrs = 3;
5097IsMasked = false;
5098
5099 {
5100 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5101 SmallVector<llvm::Value*, 12> Operands;
5102
5103 // Please refer to comment under 'defvar NFList' in this file
5104 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5105 (!IsMasked && PolicyAttrs & RVV_VTA))
5106 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5107 else {
5108 if (IsMasked)
5109 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5110 else // Unmasked
5111 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5112 }
5113 unsigned PtrOperandIdx = IsMasked ?
5114 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5115 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5116 Value *PtrOperand = Ops[PtrOperandIdx];
5117 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5118 Value *VLOperand = Ops[PtrOperandIdx + 2];
5119 Operands.push_back(PtrOperand);
5120 Operands.push_back(IndexOperand);
5121 if (IsMasked)
5122 Operands.push_back(Ops[NF]);
5123 Operands.push_back(VLOperand);
5124 if (IsMasked)
5125 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5126 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5127
5128 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5129 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5130 clang::CharUnits Align =
5131 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5132 llvm::Value *V;
5133 for (unsigned I = 0; I < NF; ++I) {
5134 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5135 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5136 }
5137 return V;
5138 }
5139 break;
5140case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tum:
5141case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tum:
5142case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tum:
5143case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tum:
5144 ID = Intrinsic::riscv_vloxseg6_mask;
5145 NF = 6;
5146 PolicyAttrs = 2;
5147IsMasked = true;
5148
5149 {
5150 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5151 SmallVector<llvm::Value*, 12> Operands;
5152
5153 // Please refer to comment under 'defvar NFList' in this file
5154 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5155 (!IsMasked && PolicyAttrs & RVV_VTA))
5156 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5157 else {
5158 if (IsMasked)
5159 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5160 else // Unmasked
5161 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5162 }
5163 unsigned PtrOperandIdx = IsMasked ?
5164 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5165 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5166 Value *PtrOperand = Ops[PtrOperandIdx];
5167 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5168 Value *VLOperand = Ops[PtrOperandIdx + 2];
5169 Operands.push_back(PtrOperand);
5170 Operands.push_back(IndexOperand);
5171 if (IsMasked)
5172 Operands.push_back(Ops[NF]);
5173 Operands.push_back(VLOperand);
5174 if (IsMasked)
5175 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5176 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5177
5178 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5179 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5180 clang::CharUnits Align =
5181 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5182 llvm::Value *V;
5183 for (unsigned I = 0; I < NF; ++I) {
5184 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5185 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5186 }
5187 return V;
5188 }
5189 break;
5190case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tama:
5191case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tama:
5192case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tama:
5193case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tama:
5194 ID = Intrinsic::riscv_vloxseg6_mask;
5195 NF = 6;
5196 PolicyAttrs = 3;
5197IsMasked = true;
5198
5199 {
5200 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5201 SmallVector<llvm::Value*, 12> Operands;
5202
5203 // Please refer to comment under 'defvar NFList' in this file
5204 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5205 (!IsMasked && PolicyAttrs & RVV_VTA))
5206 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5207 else {
5208 if (IsMasked)
5209 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5210 else // Unmasked
5211 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5212 }
5213 unsigned PtrOperandIdx = IsMasked ?
5214 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5215 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5216 Value *PtrOperand = Ops[PtrOperandIdx];
5217 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5218 Value *VLOperand = Ops[PtrOperandIdx + 2];
5219 Operands.push_back(PtrOperand);
5220 Operands.push_back(IndexOperand);
5221 if (IsMasked)
5222 Operands.push_back(Ops[NF]);
5223 Operands.push_back(VLOperand);
5224 if (IsMasked)
5225 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5226 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5227
5228 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5229 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5230 clang::CharUnits Align =
5231 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5232 llvm::Value *V;
5233 for (unsigned I = 0; I < NF; ++I) {
5234 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5235 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5236 }
5237 return V;
5238 }
5239 break;
5240case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tumu:
5241case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tumu:
5242case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tumu:
5243case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tumu:
5244 ID = Intrinsic::riscv_vloxseg6_mask;
5245 NF = 6;
5246 PolicyAttrs = 0;
5247IsMasked = true;
5248
5249 {
5250 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5251 SmallVector<llvm::Value*, 12> Operands;
5252
5253 // Please refer to comment under 'defvar NFList' in this file
5254 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5255 (!IsMasked && PolicyAttrs & RVV_VTA))
5256 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5257 else {
5258 if (IsMasked)
5259 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5260 else // Unmasked
5261 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5262 }
5263 unsigned PtrOperandIdx = IsMasked ?
5264 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5265 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5266 Value *PtrOperand = Ops[PtrOperandIdx];
5267 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5268 Value *VLOperand = Ops[PtrOperandIdx + 2];
5269 Operands.push_back(PtrOperand);
5270 Operands.push_back(IndexOperand);
5271 if (IsMasked)
5272 Operands.push_back(Ops[NF]);
5273 Operands.push_back(VLOperand);
5274 if (IsMasked)
5275 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5276 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5277
5278 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5279 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5280 clang::CharUnits Align =
5281 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5282 llvm::Value *V;
5283 for (unsigned I = 0; I < NF; ++I) {
5284 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5285 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5286 }
5287 return V;
5288 }
5289 break;
5290case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_mu:
5291case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_mu:
5292case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_mu:
5293case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_mu:
5294 ID = Intrinsic::riscv_vloxseg6_mask;
5295 NF = 6;
5296 PolicyAttrs = 1;
5297IsMasked = true;
5298
5299 {
5300 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5301 SmallVector<llvm::Value*, 12> Operands;
5302
5303 // Please refer to comment under 'defvar NFList' in this file
5304 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5305 (!IsMasked && PolicyAttrs & RVV_VTA))
5306 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5307 else {
5308 if (IsMasked)
5309 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5310 else // Unmasked
5311 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5312 }
5313 unsigned PtrOperandIdx = IsMasked ?
5314 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5315 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5316 Value *PtrOperand = Ops[PtrOperandIdx];
5317 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5318 Value *VLOperand = Ops[PtrOperandIdx + 2];
5319 Operands.push_back(PtrOperand);
5320 Operands.push_back(IndexOperand);
5321 if (IsMasked)
5322 Operands.push_back(Ops[NF]);
5323 Operands.push_back(VLOperand);
5324 if (IsMasked)
5325 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5326 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5327
5328 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5329 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5330 clang::CharUnits Align =
5331 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5332 llvm::Value *V;
5333 for (unsigned I = 0; I < NF; ++I) {
5334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5335 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5336 }
5337 return V;
5338 }
5339 break;
5340case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tu:
5341case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tu:
5342case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tu:
5343case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tu:
5344 ID = Intrinsic::riscv_vloxseg7;
5345 NF = 7;
5346 PolicyAttrs = 2;
5347IsMasked = false;
5348
5349 {
5350 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5351 SmallVector<llvm::Value*, 12> Operands;
5352
5353 // Please refer to comment under 'defvar NFList' in this file
5354 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5355 (!IsMasked && PolicyAttrs & RVV_VTA))
5356 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5357 else {
5358 if (IsMasked)
5359 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5360 else // Unmasked
5361 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5362 }
5363 unsigned PtrOperandIdx = IsMasked ?
5364 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5365 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5366 Value *PtrOperand = Ops[PtrOperandIdx];
5367 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5368 Value *VLOperand = Ops[PtrOperandIdx + 2];
5369 Operands.push_back(PtrOperand);
5370 Operands.push_back(IndexOperand);
5371 if (IsMasked)
5372 Operands.push_back(Ops[NF]);
5373 Operands.push_back(VLOperand);
5374 if (IsMasked)
5375 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5376 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5377
5378 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5379 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5380 clang::CharUnits Align =
5381 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5382 llvm::Value *V;
5383 for (unsigned I = 0; I < NF; ++I) {
5384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5385 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5386 }
5387 return V;
5388 }
5389 break;
5390case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_ta:
5391case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_ta:
5392case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_ta:
5393case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_ta:
5394 ID = Intrinsic::riscv_vloxseg7;
5395 NF = 7;
5396 PolicyAttrs = 3;
5397IsMasked = false;
5398
5399 {
5400 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5401 SmallVector<llvm::Value*, 12> Operands;
5402
5403 // Please refer to comment under 'defvar NFList' in this file
5404 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5405 (!IsMasked && PolicyAttrs & RVV_VTA))
5406 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5407 else {
5408 if (IsMasked)
5409 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5410 else // Unmasked
5411 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5412 }
5413 unsigned PtrOperandIdx = IsMasked ?
5414 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5415 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5416 Value *PtrOperand = Ops[PtrOperandIdx];
5417 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5418 Value *VLOperand = Ops[PtrOperandIdx + 2];
5419 Operands.push_back(PtrOperand);
5420 Operands.push_back(IndexOperand);
5421 if (IsMasked)
5422 Operands.push_back(Ops[NF]);
5423 Operands.push_back(VLOperand);
5424 if (IsMasked)
5425 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5426 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5427
5428 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5429 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5430 clang::CharUnits Align =
5431 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5432 llvm::Value *V;
5433 for (unsigned I = 0; I < NF; ++I) {
5434 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5435 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5436 }
5437 return V;
5438 }
5439 break;
5440case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tum:
5441case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tum:
5442case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tum:
5443case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tum:
5444 ID = Intrinsic::riscv_vloxseg7_mask;
5445 NF = 7;
5446 PolicyAttrs = 2;
5447IsMasked = true;
5448
5449 {
5450 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5451 SmallVector<llvm::Value*, 12> Operands;
5452
5453 // Please refer to comment under 'defvar NFList' in this file
5454 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5455 (!IsMasked && PolicyAttrs & RVV_VTA))
5456 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5457 else {
5458 if (IsMasked)
5459 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5460 else // Unmasked
5461 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5462 }
5463 unsigned PtrOperandIdx = IsMasked ?
5464 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5465 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5466 Value *PtrOperand = Ops[PtrOperandIdx];
5467 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5468 Value *VLOperand = Ops[PtrOperandIdx + 2];
5469 Operands.push_back(PtrOperand);
5470 Operands.push_back(IndexOperand);
5471 if (IsMasked)
5472 Operands.push_back(Ops[NF]);
5473 Operands.push_back(VLOperand);
5474 if (IsMasked)
5475 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5476 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5477
5478 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5479 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5480 clang::CharUnits Align =
5481 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5482 llvm::Value *V;
5483 for (unsigned I = 0; I < NF; ++I) {
5484 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5485 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5486 }
5487 return V;
5488 }
5489 break;
5490case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tama:
5491case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tama:
5492case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tama:
5493case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tama:
5494 ID = Intrinsic::riscv_vloxseg7_mask;
5495 NF = 7;
5496 PolicyAttrs = 3;
5497IsMasked = true;
5498
5499 {
5500 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5501 SmallVector<llvm::Value*, 12> Operands;
5502
5503 // Please refer to comment under 'defvar NFList' in this file
5504 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5505 (!IsMasked && PolicyAttrs & RVV_VTA))
5506 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5507 else {
5508 if (IsMasked)
5509 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5510 else // Unmasked
5511 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5512 }
5513 unsigned PtrOperandIdx = IsMasked ?
5514 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5515 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5516 Value *PtrOperand = Ops[PtrOperandIdx];
5517 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5518 Value *VLOperand = Ops[PtrOperandIdx + 2];
5519 Operands.push_back(PtrOperand);
5520 Operands.push_back(IndexOperand);
5521 if (IsMasked)
5522 Operands.push_back(Ops[NF]);
5523 Operands.push_back(VLOperand);
5524 if (IsMasked)
5525 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5526 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5527
5528 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5529 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5530 clang::CharUnits Align =
5531 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5532 llvm::Value *V;
5533 for (unsigned I = 0; I < NF; ++I) {
5534 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5535 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5536 }
5537 return V;
5538 }
5539 break;
5540case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tumu:
5541case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tumu:
5542case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tumu:
5543case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tumu:
5544 ID = Intrinsic::riscv_vloxseg7_mask;
5545 NF = 7;
5546 PolicyAttrs = 0;
5547IsMasked = true;
5548
5549 {
5550 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5551 SmallVector<llvm::Value*, 12> Operands;
5552
5553 // Please refer to comment under 'defvar NFList' in this file
5554 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5555 (!IsMasked && PolicyAttrs & RVV_VTA))
5556 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5557 else {
5558 if (IsMasked)
5559 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5560 else // Unmasked
5561 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5562 }
5563 unsigned PtrOperandIdx = IsMasked ?
5564 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5565 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5566 Value *PtrOperand = Ops[PtrOperandIdx];
5567 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5568 Value *VLOperand = Ops[PtrOperandIdx + 2];
5569 Operands.push_back(PtrOperand);
5570 Operands.push_back(IndexOperand);
5571 if (IsMasked)
5572 Operands.push_back(Ops[NF]);
5573 Operands.push_back(VLOperand);
5574 if (IsMasked)
5575 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5576 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5577
5578 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5579 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5580 clang::CharUnits Align =
5581 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5582 llvm::Value *V;
5583 for (unsigned I = 0; I < NF; ++I) {
5584 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5585 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5586 }
5587 return V;
5588 }
5589 break;
5590case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_mu:
5591case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_mu:
5592case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_mu:
5593case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_mu:
5594 ID = Intrinsic::riscv_vloxseg7_mask;
5595 NF = 7;
5596 PolicyAttrs = 1;
5597IsMasked = true;
5598
5599 {
5600 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5601 SmallVector<llvm::Value*, 12> Operands;
5602
5603 // Please refer to comment under 'defvar NFList' in this file
5604 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5605 (!IsMasked && PolicyAttrs & RVV_VTA))
5606 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5607 else {
5608 if (IsMasked)
5609 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5610 else // Unmasked
5611 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5612 }
5613 unsigned PtrOperandIdx = IsMasked ?
5614 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5615 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5616 Value *PtrOperand = Ops[PtrOperandIdx];
5617 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5618 Value *VLOperand = Ops[PtrOperandIdx + 2];
5619 Operands.push_back(PtrOperand);
5620 Operands.push_back(IndexOperand);
5621 if (IsMasked)
5622 Operands.push_back(Ops[NF]);
5623 Operands.push_back(VLOperand);
5624 if (IsMasked)
5625 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5626 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5627
5628 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5629 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5630 clang::CharUnits Align =
5631 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5632 llvm::Value *V;
5633 for (unsigned I = 0; I < NF; ++I) {
5634 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5635 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5636 }
5637 return V;
5638 }
5639 break;
5640case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tu:
5641case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tu:
5642case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tu:
5643case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tu:
5644 ID = Intrinsic::riscv_vloxseg8;
5645 NF = 8;
5646 PolicyAttrs = 2;
5647IsMasked = false;
5648
5649 {
5650 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5651 SmallVector<llvm::Value*, 12> Operands;
5652
5653 // Please refer to comment under 'defvar NFList' in this file
5654 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5655 (!IsMasked && PolicyAttrs & RVV_VTA))
5656 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5657 else {
5658 if (IsMasked)
5659 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5660 else // Unmasked
5661 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5662 }
5663 unsigned PtrOperandIdx = IsMasked ?
5664 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5665 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5666 Value *PtrOperand = Ops[PtrOperandIdx];
5667 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5668 Value *VLOperand = Ops[PtrOperandIdx + 2];
5669 Operands.push_back(PtrOperand);
5670 Operands.push_back(IndexOperand);
5671 if (IsMasked)
5672 Operands.push_back(Ops[NF]);
5673 Operands.push_back(VLOperand);
5674 if (IsMasked)
5675 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5676 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5677
5678 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5679 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5680 clang::CharUnits Align =
5681 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5682 llvm::Value *V;
5683 for (unsigned I = 0; I < NF; ++I) {
5684 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5685 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5686 }
5687 return V;
5688 }
5689 break;
5690case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_ta:
5691case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_ta:
5692case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_ta:
5693case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_ta:
5694 ID = Intrinsic::riscv_vloxseg8;
5695 NF = 8;
5696 PolicyAttrs = 3;
5697IsMasked = false;
5698
5699 {
5700 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5701 SmallVector<llvm::Value*, 12> Operands;
5702
5703 // Please refer to comment under 'defvar NFList' in this file
5704 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5705 (!IsMasked && PolicyAttrs & RVV_VTA))
5706 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5707 else {
5708 if (IsMasked)
5709 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5710 else // Unmasked
5711 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5712 }
5713 unsigned PtrOperandIdx = IsMasked ?
5714 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5715 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5716 Value *PtrOperand = Ops[PtrOperandIdx];
5717 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5718 Value *VLOperand = Ops[PtrOperandIdx + 2];
5719 Operands.push_back(PtrOperand);
5720 Operands.push_back(IndexOperand);
5721 if (IsMasked)
5722 Operands.push_back(Ops[NF]);
5723 Operands.push_back(VLOperand);
5724 if (IsMasked)
5725 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5726 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5727
5728 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5729 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5730 clang::CharUnits Align =
5731 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5732 llvm::Value *V;
5733 for (unsigned I = 0; I < NF; ++I) {
5734 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5735 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5736 }
5737 return V;
5738 }
5739 break;
5740case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tum:
5741case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tum:
5742case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tum:
5743case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tum:
5744 ID = Intrinsic::riscv_vloxseg8_mask;
5745 NF = 8;
5746 PolicyAttrs = 2;
5747IsMasked = true;
5748
5749 {
5750 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5751 SmallVector<llvm::Value*, 12> Operands;
5752
5753 // Please refer to comment under 'defvar NFList' in this file
5754 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5755 (!IsMasked && PolicyAttrs & RVV_VTA))
5756 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5757 else {
5758 if (IsMasked)
5759 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5760 else // Unmasked
5761 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5762 }
5763 unsigned PtrOperandIdx = IsMasked ?
5764 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5765 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5766 Value *PtrOperand = Ops[PtrOperandIdx];
5767 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5768 Value *VLOperand = Ops[PtrOperandIdx + 2];
5769 Operands.push_back(PtrOperand);
5770 Operands.push_back(IndexOperand);
5771 if (IsMasked)
5772 Operands.push_back(Ops[NF]);
5773 Operands.push_back(VLOperand);
5774 if (IsMasked)
5775 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5776 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5777
5778 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5779 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5780 clang::CharUnits Align =
5781 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5782 llvm::Value *V;
5783 for (unsigned I = 0; I < NF; ++I) {
5784 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5785 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5786 }
5787 return V;
5788 }
5789 break;
5790case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tama:
5791case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tama:
5792case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tama:
5793case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tama:
5794 ID = Intrinsic::riscv_vloxseg8_mask;
5795 NF = 8;
5796 PolicyAttrs = 3;
5797IsMasked = true;
5798
5799 {
5800 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5801 SmallVector<llvm::Value*, 12> Operands;
5802
5803 // Please refer to comment under 'defvar NFList' in this file
5804 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5805 (!IsMasked && PolicyAttrs & RVV_VTA))
5806 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5807 else {
5808 if (IsMasked)
5809 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5810 else // Unmasked
5811 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5812 }
5813 unsigned PtrOperandIdx = IsMasked ?
5814 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5815 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5816 Value *PtrOperand = Ops[PtrOperandIdx];
5817 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5818 Value *VLOperand = Ops[PtrOperandIdx + 2];
5819 Operands.push_back(PtrOperand);
5820 Operands.push_back(IndexOperand);
5821 if (IsMasked)
5822 Operands.push_back(Ops[NF]);
5823 Operands.push_back(VLOperand);
5824 if (IsMasked)
5825 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5826 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5827
5828 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5829 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5830 clang::CharUnits Align =
5831 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5832 llvm::Value *V;
5833 for (unsigned I = 0; I < NF; ++I) {
5834 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5835 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5836 }
5837 return V;
5838 }
5839 break;
5840case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tumu:
5841case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tumu:
5842case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tumu:
5843case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tumu:
5844 ID = Intrinsic::riscv_vloxseg8_mask;
5845 NF = 8;
5846 PolicyAttrs = 0;
5847IsMasked = true;
5848
5849 {
5850 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5851 SmallVector<llvm::Value*, 12> Operands;
5852
5853 // Please refer to comment under 'defvar NFList' in this file
5854 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5855 (!IsMasked && PolicyAttrs & RVV_VTA))
5856 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5857 else {
5858 if (IsMasked)
5859 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5860 else // Unmasked
5861 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5862 }
5863 unsigned PtrOperandIdx = IsMasked ?
5864 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5865 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5866 Value *PtrOperand = Ops[PtrOperandIdx];
5867 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5868 Value *VLOperand = Ops[PtrOperandIdx + 2];
5869 Operands.push_back(PtrOperand);
5870 Operands.push_back(IndexOperand);
5871 if (IsMasked)
5872 Operands.push_back(Ops[NF]);
5873 Operands.push_back(VLOperand);
5874 if (IsMasked)
5875 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5876 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5877
5878 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5879 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5880 clang::CharUnits Align =
5881 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5882 llvm::Value *V;
5883 for (unsigned I = 0; I < NF; ++I) {
5884 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5885 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5886 }
5887 return V;
5888 }
5889 break;
5890case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_mu:
5891case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_mu:
5892case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_mu:
5893case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_mu:
5894 ID = Intrinsic::riscv_vloxseg8_mask;
5895 NF = 8;
5896 PolicyAttrs = 1;
5897IsMasked = true;
5898
5899 {
5900 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5901 SmallVector<llvm::Value*, 12> Operands;
5902
5903 // Please refer to comment under 'defvar NFList' in this file
5904 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5905 (!IsMasked && PolicyAttrs & RVV_VTA))
5906 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5907 else {
5908 if (IsMasked)
5909 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5910 else // Unmasked
5911 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5912 }
5913 unsigned PtrOperandIdx = IsMasked ?
5914 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5915 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5916 Value *PtrOperand = Ops[PtrOperandIdx];
5917 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5918 Value *VLOperand = Ops[PtrOperandIdx + 2];
5919 Operands.push_back(PtrOperand);
5920 Operands.push_back(IndexOperand);
5921 if (IsMasked)
5922 Operands.push_back(Ops[NF]);
5923 Operands.push_back(VLOperand);
5924 if (IsMasked)
5925 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5926 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5927
5928 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5929 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5930 clang::CharUnits Align =
5931 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5932 llvm::Value *V;
5933 for (unsigned I = 0; I < NF; ++I) {
5934 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5935 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5936 }
5937 return V;
5938 }
5939 break;
5940case RISCVVector::BI__builtin_rvv_vlse32_v_tu:
5941case RISCVVector::BI__builtin_rvv_vlse64_v_tu:
5942case RISCVVector::BI__builtin_rvv_vlse8_v_tu:
5943case RISCVVector::BI__builtin_rvv_vlse16_v_tu:
5944 ID = Intrinsic::riscv_vlse;
5945 PolicyAttrs = 2;
5946 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
5947 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5948 break;
5949case RISCVVector::BI__builtin_rvv_vlse32_v_ta:
5950case RISCVVector::BI__builtin_rvv_vlse64_v_ta:
5951case RISCVVector::BI__builtin_rvv_vlse8_v_ta:
5952case RISCVVector::BI__builtin_rvv_vlse16_v_ta:
5953 ID = Intrinsic::riscv_vlse;
5954 PolicyAttrs = 3;
5955 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
5956 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
5957 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5958 break;
5959case RISCVVector::BI__builtin_rvv_vlse32_v_tum:
5960case RISCVVector::BI__builtin_rvv_vlse64_v_tum:
5961case RISCVVector::BI__builtin_rvv_vlse8_v_tum:
5962case RISCVVector::BI__builtin_rvv_vlse16_v_tum:
5963 ID = Intrinsic::riscv_vlse_mask;
5964 PolicyAttrs = 2;
5965 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
5966 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
5967 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5968 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5969 break;
5970case RISCVVector::BI__builtin_rvv_vlse32_v_tama:
5971case RISCVVector::BI__builtin_rvv_vlse64_v_tama:
5972case RISCVVector::BI__builtin_rvv_vlse8_v_tama:
5973case RISCVVector::BI__builtin_rvv_vlse16_v_tama:
5974 ID = Intrinsic::riscv_vlse_mask;
5975 PolicyAttrs = 3;
5976 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
5977 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
5978 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5979 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
5980 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5981 break;
5982case RISCVVector::BI__builtin_rvv_vlse32_v_tumu:
5983case RISCVVector::BI__builtin_rvv_vlse64_v_tumu:
5984case RISCVVector::BI__builtin_rvv_vlse8_v_tumu:
5985case RISCVVector::BI__builtin_rvv_vlse16_v_tumu:
5986 ID = Intrinsic::riscv_vlse_mask;
5987 PolicyAttrs = 0;
5988 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
5989 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
5990 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5991 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5992 break;
5993case RISCVVector::BI__builtin_rvv_vlse32_v_mu:
5994case RISCVVector::BI__builtin_rvv_vlse64_v_mu:
5995case RISCVVector::BI__builtin_rvv_vlse8_v_mu:
5996case RISCVVector::BI__builtin_rvv_vlse16_v_mu:
5997 ID = Intrinsic::riscv_vlse_mask;
5998 PolicyAttrs = 1;
5999 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
6000 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
6001 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6002 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6003 break;
6004case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tu:
6005case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tu:
6006case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tu:
6007case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tu:
6008 ID = Intrinsic::riscv_vlseg2;
6009 NF = 2;
6010 PolicyAttrs = 2;
6011IsMasked = false;
6012
6013 {
6014 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6015 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6016 SmallVector<llvm::Value*, 12> Operands;
6017
6018 // Please refer to comment under 'defvar NFList' in this file
6019 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6020 (!IsMasked && PolicyAttrs & RVV_VTA))
6021 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6022 else {
6023 if (IsMasked)
6024 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6025 else // Unmasked
6026 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6027 }
6028 unsigned PtrOperandIdx = IsMasked ?
6029 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6030 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6031 Value *PtrOperand = Ops[PtrOperandIdx];
6032 Value *VLOperand = Ops[PtrOperandIdx + 1];
6033 Operands.push_back(PtrOperand);
6034 if (IsMasked)
6035 Operands.push_back(Ops[NF]);
6036 Operands.push_back(VLOperand);
6037 if (IsMasked)
6038 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6039
6040 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6041 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6042 clang::CharUnits Align =
6043 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6044 llvm::Value *V;
6045 for (unsigned I = 0; I < NF; ++I) {
6046 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6047 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6048 }
6049 return V;
6050 }
6051 break;
6052case RISCVVector::BI__builtin_rvv_vlseg2e8_v_ta:
6053case RISCVVector::BI__builtin_rvv_vlseg2e16_v_ta:
6054case RISCVVector::BI__builtin_rvv_vlseg2e32_v_ta:
6055case RISCVVector::BI__builtin_rvv_vlseg2e64_v_ta:
6056 ID = Intrinsic::riscv_vlseg2;
6057 NF = 2;
6058 PolicyAttrs = 3;
6059IsMasked = false;
6060
6061 {
6062 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6063 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6064 SmallVector<llvm::Value*, 12> Operands;
6065
6066 // Please refer to comment under 'defvar NFList' in this file
6067 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6068 (!IsMasked && PolicyAttrs & RVV_VTA))
6069 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6070 else {
6071 if (IsMasked)
6072 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6073 else // Unmasked
6074 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6075 }
6076 unsigned PtrOperandIdx = IsMasked ?
6077 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6078 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6079 Value *PtrOperand = Ops[PtrOperandIdx];
6080 Value *VLOperand = Ops[PtrOperandIdx + 1];
6081 Operands.push_back(PtrOperand);
6082 if (IsMasked)
6083 Operands.push_back(Ops[NF]);
6084 Operands.push_back(VLOperand);
6085 if (IsMasked)
6086 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6087
6088 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6089 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6090 clang::CharUnits Align =
6091 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6092 llvm::Value *V;
6093 for (unsigned I = 0; I < NF; ++I) {
6094 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6095 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6096 }
6097 return V;
6098 }
6099 break;
6100case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tum:
6101case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tum:
6102case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tum:
6103case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tum:
6104 ID = Intrinsic::riscv_vlseg2_mask;
6105 NF = 2;
6106 PolicyAttrs = 2;
6107IsMasked = true;
6108
6109 {
6110 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6111 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6112 SmallVector<llvm::Value*, 12> Operands;
6113
6114 // Please refer to comment under 'defvar NFList' in this file
6115 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6116 (!IsMasked && PolicyAttrs & RVV_VTA))
6117 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6118 else {
6119 if (IsMasked)
6120 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6121 else // Unmasked
6122 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6123 }
6124 unsigned PtrOperandIdx = IsMasked ?
6125 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6126 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6127 Value *PtrOperand = Ops[PtrOperandIdx];
6128 Value *VLOperand = Ops[PtrOperandIdx + 1];
6129 Operands.push_back(PtrOperand);
6130 if (IsMasked)
6131 Operands.push_back(Ops[NF]);
6132 Operands.push_back(VLOperand);
6133 if (IsMasked)
6134 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6135
6136 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6137 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6138 clang::CharUnits Align =
6139 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6140 llvm::Value *V;
6141 for (unsigned I = 0; I < NF; ++I) {
6142 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6143 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6144 }
6145 return V;
6146 }
6147 break;
6148case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tama:
6149case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tama:
6150case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tama:
6151case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tama:
6152 ID = Intrinsic::riscv_vlseg2_mask;
6153 NF = 2;
6154 PolicyAttrs = 3;
6155IsMasked = true;
6156
6157 {
6158 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6159 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6160 SmallVector<llvm::Value*, 12> Operands;
6161
6162 // Please refer to comment under 'defvar NFList' in this file
6163 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6164 (!IsMasked && PolicyAttrs & RVV_VTA))
6165 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6166 else {
6167 if (IsMasked)
6168 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6169 else // Unmasked
6170 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6171 }
6172 unsigned PtrOperandIdx = IsMasked ?
6173 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6174 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6175 Value *PtrOperand = Ops[PtrOperandIdx];
6176 Value *VLOperand = Ops[PtrOperandIdx + 1];
6177 Operands.push_back(PtrOperand);
6178 if (IsMasked)
6179 Operands.push_back(Ops[NF]);
6180 Operands.push_back(VLOperand);
6181 if (IsMasked)
6182 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6183
6184 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6185 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6186 clang::CharUnits Align =
6187 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6188 llvm::Value *V;
6189 for (unsigned I = 0; I < NF; ++I) {
6190 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6191 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6192 }
6193 return V;
6194 }
6195 break;
6196case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tumu:
6197case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tumu:
6198case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tumu:
6199case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tumu:
6200 ID = Intrinsic::riscv_vlseg2_mask;
6201 NF = 2;
6202 PolicyAttrs = 0;
6203IsMasked = true;
6204
6205 {
6206 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6207 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6208 SmallVector<llvm::Value*, 12> Operands;
6209
6210 // Please refer to comment under 'defvar NFList' in this file
6211 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6212 (!IsMasked && PolicyAttrs & RVV_VTA))
6213 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6214 else {
6215 if (IsMasked)
6216 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6217 else // Unmasked
6218 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6219 }
6220 unsigned PtrOperandIdx = IsMasked ?
6221 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6222 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6223 Value *PtrOperand = Ops[PtrOperandIdx];
6224 Value *VLOperand = Ops[PtrOperandIdx + 1];
6225 Operands.push_back(PtrOperand);
6226 if (IsMasked)
6227 Operands.push_back(Ops[NF]);
6228 Operands.push_back(VLOperand);
6229 if (IsMasked)
6230 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6231
6232 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6233 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6234 clang::CharUnits Align =
6235 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6236 llvm::Value *V;
6237 for (unsigned I = 0; I < NF; ++I) {
6238 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6239 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6240 }
6241 return V;
6242 }
6243 break;
6244case RISCVVector::BI__builtin_rvv_vlseg2e8_v_mu:
6245case RISCVVector::BI__builtin_rvv_vlseg2e16_v_mu:
6246case RISCVVector::BI__builtin_rvv_vlseg2e32_v_mu:
6247case RISCVVector::BI__builtin_rvv_vlseg2e64_v_mu:
6248 ID = Intrinsic::riscv_vlseg2_mask;
6249 NF = 2;
6250 PolicyAttrs = 1;
6251IsMasked = true;
6252
6253 {
6254 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6255 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6256 SmallVector<llvm::Value*, 12> Operands;
6257
6258 // Please refer to comment under 'defvar NFList' in this file
6259 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6260 (!IsMasked && PolicyAttrs & RVV_VTA))
6261 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6262 else {
6263 if (IsMasked)
6264 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6265 else // Unmasked
6266 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6267 }
6268 unsigned PtrOperandIdx = IsMasked ?
6269 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6270 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6271 Value *PtrOperand = Ops[PtrOperandIdx];
6272 Value *VLOperand = Ops[PtrOperandIdx + 1];
6273 Operands.push_back(PtrOperand);
6274 if (IsMasked)
6275 Operands.push_back(Ops[NF]);
6276 Operands.push_back(VLOperand);
6277 if (IsMasked)
6278 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6279
6280 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6281 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6282 clang::CharUnits Align =
6283 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6284 llvm::Value *V;
6285 for (unsigned I = 0; I < NF; ++I) {
6286 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6287 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6288 }
6289 return V;
6290 }
6291 break;
6292case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tu:
6293case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tu:
6294case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tu:
6295case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tu:
6296 ID = Intrinsic::riscv_vlseg2ff;
6297 NF = 2;
6298 PolicyAttrs = 2;
6299IsMasked = false;
6300
6301 {
6302 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6303 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6304 SmallVector<llvm::Value*, 12> Operands;
6305
6306 // Please refer to comment under 'defvar NFList' in this file
6307 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6308 (!IsMasked && PolicyAttrs & RVV_VTA))
6309 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6310 else {
6311 if (IsMasked)
6312 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6313 else // Unmasked
6314 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6315 }
6316 unsigned PtrOperandIdx = IsMasked ?
6317 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6318 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6319 Value *PtrOperand = Ops[PtrOperandIdx];
6320 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6321 Value *VLOperand = Ops[PtrOperandIdx + 2];
6322 Operands.push_back(PtrOperand);
6323 if (IsMasked)
6324 Operands.push_back(Ops[NF]);
6325 Operands.push_back(VLOperand);
6326 if (IsMasked)
6327 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6328
6329 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6330 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6331 clang::CharUnits Align =
6332 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6333 for (unsigned I = 0; I < NF; ++I) {
6334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6335 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6336 }
6337 // Store new_vl.
6338 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6339 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6340 }
6341 break;
6342case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_ta:
6343case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_ta:
6344case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_ta:
6345case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_ta:
6346 ID = Intrinsic::riscv_vlseg2ff;
6347 NF = 2;
6348 PolicyAttrs = 3;
6349IsMasked = false;
6350
6351 {
6352 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6353 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6354 SmallVector<llvm::Value*, 12> Operands;
6355
6356 // Please refer to comment under 'defvar NFList' in this file
6357 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6358 (!IsMasked && PolicyAttrs & RVV_VTA))
6359 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6360 else {
6361 if (IsMasked)
6362 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6363 else // Unmasked
6364 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6365 }
6366 unsigned PtrOperandIdx = IsMasked ?
6367 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6368 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6369 Value *PtrOperand = Ops[PtrOperandIdx];
6370 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6371 Value *VLOperand = Ops[PtrOperandIdx + 2];
6372 Operands.push_back(PtrOperand);
6373 if (IsMasked)
6374 Operands.push_back(Ops[NF]);
6375 Operands.push_back(VLOperand);
6376 if (IsMasked)
6377 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6378
6379 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6380 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6381 clang::CharUnits Align =
6382 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6383 for (unsigned I = 0; I < NF; ++I) {
6384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6385 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6386 }
6387 // Store new_vl.
6388 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6389 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6390 }
6391 break;
6392case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tum:
6393case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tum:
6394case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tum:
6395case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tum:
6396 ID = Intrinsic::riscv_vlseg2ff_mask;
6397 NF = 2;
6398 PolicyAttrs = 2;
6399IsMasked = true;
6400
6401 {
6402 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6403 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6404 SmallVector<llvm::Value*, 12> Operands;
6405
6406 // Please refer to comment under 'defvar NFList' in this file
6407 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6408 (!IsMasked && PolicyAttrs & RVV_VTA))
6409 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6410 else {
6411 if (IsMasked)
6412 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6413 else // Unmasked
6414 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6415 }
6416 unsigned PtrOperandIdx = IsMasked ?
6417 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6418 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6419 Value *PtrOperand = Ops[PtrOperandIdx];
6420 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6421 Value *VLOperand = Ops[PtrOperandIdx + 2];
6422 Operands.push_back(PtrOperand);
6423 if (IsMasked)
6424 Operands.push_back(Ops[NF]);
6425 Operands.push_back(VLOperand);
6426 if (IsMasked)
6427 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6428
6429 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6430 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6431 clang::CharUnits Align =
6432 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6433 for (unsigned I = 0; I < NF; ++I) {
6434 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6435 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6436 }
6437 // Store new_vl.
6438 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6439 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6440 }
6441 break;
6442case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tama:
6443case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tama:
6444case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tama:
6445case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tama:
6446 ID = Intrinsic::riscv_vlseg2ff_mask;
6447 NF = 2;
6448 PolicyAttrs = 3;
6449IsMasked = true;
6450
6451 {
6452 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6453 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6454 SmallVector<llvm::Value*, 12> Operands;
6455
6456 // Please refer to comment under 'defvar NFList' in this file
6457 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6458 (!IsMasked && PolicyAttrs & RVV_VTA))
6459 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6460 else {
6461 if (IsMasked)
6462 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6463 else // Unmasked
6464 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6465 }
6466 unsigned PtrOperandIdx = IsMasked ?
6467 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6468 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6469 Value *PtrOperand = Ops[PtrOperandIdx];
6470 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6471 Value *VLOperand = Ops[PtrOperandIdx + 2];
6472 Operands.push_back(PtrOperand);
6473 if (IsMasked)
6474 Operands.push_back(Ops[NF]);
6475 Operands.push_back(VLOperand);
6476 if (IsMasked)
6477 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6478
6479 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6480 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6481 clang::CharUnits Align =
6482 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6483 for (unsigned I = 0; I < NF; ++I) {
6484 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6485 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6486 }
6487 // Store new_vl.
6488 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6489 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6490 }
6491 break;
6492case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tumu:
6493case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tumu:
6494case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tumu:
6495case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tumu:
6496 ID = Intrinsic::riscv_vlseg2ff_mask;
6497 NF = 2;
6498 PolicyAttrs = 0;
6499IsMasked = true;
6500
6501 {
6502 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6503 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6504 SmallVector<llvm::Value*, 12> Operands;
6505
6506 // Please refer to comment under 'defvar NFList' in this file
6507 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6508 (!IsMasked && PolicyAttrs & RVV_VTA))
6509 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6510 else {
6511 if (IsMasked)
6512 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6513 else // Unmasked
6514 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6515 }
6516 unsigned PtrOperandIdx = IsMasked ?
6517 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6518 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6519 Value *PtrOperand = Ops[PtrOperandIdx];
6520 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6521 Value *VLOperand = Ops[PtrOperandIdx + 2];
6522 Operands.push_back(PtrOperand);
6523 if (IsMasked)
6524 Operands.push_back(Ops[NF]);
6525 Operands.push_back(VLOperand);
6526 if (IsMasked)
6527 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6528
6529 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6530 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6531 clang::CharUnits Align =
6532 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6533 for (unsigned I = 0; I < NF; ++I) {
6534 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6535 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6536 }
6537 // Store new_vl.
6538 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6539 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6540 }
6541 break;
6542case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_mu:
6543case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_mu:
6544case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_mu:
6545case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_mu:
6546 ID = Intrinsic::riscv_vlseg2ff_mask;
6547 NF = 2;
6548 PolicyAttrs = 1;
6549IsMasked = true;
6550
6551 {
6552 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6553 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6554 SmallVector<llvm::Value*, 12> Operands;
6555
6556 // Please refer to comment under 'defvar NFList' in this file
6557 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6558 (!IsMasked && PolicyAttrs & RVV_VTA))
6559 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6560 else {
6561 if (IsMasked)
6562 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6563 else // Unmasked
6564 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6565 }
6566 unsigned PtrOperandIdx = IsMasked ?
6567 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6568 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6569 Value *PtrOperand = Ops[PtrOperandIdx];
6570 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6571 Value *VLOperand = Ops[PtrOperandIdx + 2];
6572 Operands.push_back(PtrOperand);
6573 if (IsMasked)
6574 Operands.push_back(Ops[NF]);
6575 Operands.push_back(VLOperand);
6576 if (IsMasked)
6577 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6578
6579 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6580 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6581 clang::CharUnits Align =
6582 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6583 for (unsigned I = 0; I < NF; ++I) {
6584 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6585 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6586 }
6587 // Store new_vl.
6588 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6589 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6590 }
6591 break;
6592case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tu:
6593case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tu:
6594case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tu:
6595case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tu:
6596 ID = Intrinsic::riscv_vlseg3;
6597 NF = 3;
6598 PolicyAttrs = 2;
6599IsMasked = false;
6600
6601 {
6602 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6603 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6604 SmallVector<llvm::Value*, 12> Operands;
6605
6606 // Please refer to comment under 'defvar NFList' in this file
6607 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6608 (!IsMasked && PolicyAttrs & RVV_VTA))
6609 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6610 else {
6611 if (IsMasked)
6612 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6613 else // Unmasked
6614 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6615 }
6616 unsigned PtrOperandIdx = IsMasked ?
6617 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6618 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6619 Value *PtrOperand = Ops[PtrOperandIdx];
6620 Value *VLOperand = Ops[PtrOperandIdx + 1];
6621 Operands.push_back(PtrOperand);
6622 if (IsMasked)
6623 Operands.push_back(Ops[NF]);
6624 Operands.push_back(VLOperand);
6625 if (IsMasked)
6626 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6627
6628 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6629 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6630 clang::CharUnits Align =
6631 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6632 llvm::Value *V;
6633 for (unsigned I = 0; I < NF; ++I) {
6634 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6635 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6636 }
6637 return V;
6638 }
6639 break;
6640case RISCVVector::BI__builtin_rvv_vlseg3e8_v_ta:
6641case RISCVVector::BI__builtin_rvv_vlseg3e16_v_ta:
6642case RISCVVector::BI__builtin_rvv_vlseg3e32_v_ta:
6643case RISCVVector::BI__builtin_rvv_vlseg3e64_v_ta:
6644 ID = Intrinsic::riscv_vlseg3;
6645 NF = 3;
6646 PolicyAttrs = 3;
6647IsMasked = false;
6648
6649 {
6650 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6651 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6652 SmallVector<llvm::Value*, 12> Operands;
6653
6654 // Please refer to comment under 'defvar NFList' in this file
6655 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6656 (!IsMasked && PolicyAttrs & RVV_VTA))
6657 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6658 else {
6659 if (IsMasked)
6660 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6661 else // Unmasked
6662 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6663 }
6664 unsigned PtrOperandIdx = IsMasked ?
6665 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6666 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6667 Value *PtrOperand = Ops[PtrOperandIdx];
6668 Value *VLOperand = Ops[PtrOperandIdx + 1];
6669 Operands.push_back(PtrOperand);
6670 if (IsMasked)
6671 Operands.push_back(Ops[NF]);
6672 Operands.push_back(VLOperand);
6673 if (IsMasked)
6674 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6675
6676 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6677 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6678 clang::CharUnits Align =
6679 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6680 llvm::Value *V;
6681 for (unsigned I = 0; I < NF; ++I) {
6682 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6683 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6684 }
6685 return V;
6686 }
6687 break;
6688case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tum:
6689case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tum:
6690case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tum:
6691case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tum:
6692 ID = Intrinsic::riscv_vlseg3_mask;
6693 NF = 3;
6694 PolicyAttrs = 2;
6695IsMasked = true;
6696
6697 {
6698 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6699 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6700 SmallVector<llvm::Value*, 12> Operands;
6701
6702 // Please refer to comment under 'defvar NFList' in this file
6703 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6704 (!IsMasked && PolicyAttrs & RVV_VTA))
6705 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6706 else {
6707 if (IsMasked)
6708 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6709 else // Unmasked
6710 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6711 }
6712 unsigned PtrOperandIdx = IsMasked ?
6713 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6714 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6715 Value *PtrOperand = Ops[PtrOperandIdx];
6716 Value *VLOperand = Ops[PtrOperandIdx + 1];
6717 Operands.push_back(PtrOperand);
6718 if (IsMasked)
6719 Operands.push_back(Ops[NF]);
6720 Operands.push_back(VLOperand);
6721 if (IsMasked)
6722 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6723
6724 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6725 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6726 clang::CharUnits Align =
6727 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6728 llvm::Value *V;
6729 for (unsigned I = 0; I < NF; ++I) {
6730 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6731 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6732 }
6733 return V;
6734 }
6735 break;
6736case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tama:
6737case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tama:
6738case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tama:
6739case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tama:
6740 ID = Intrinsic::riscv_vlseg3_mask;
6741 NF = 3;
6742 PolicyAttrs = 3;
6743IsMasked = true;
6744
6745 {
6746 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6747 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6748 SmallVector<llvm::Value*, 12> Operands;
6749
6750 // Please refer to comment under 'defvar NFList' in this file
6751 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6752 (!IsMasked && PolicyAttrs & RVV_VTA))
6753 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6754 else {
6755 if (IsMasked)
6756 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6757 else // Unmasked
6758 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6759 }
6760 unsigned PtrOperandIdx = IsMasked ?
6761 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6762 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6763 Value *PtrOperand = Ops[PtrOperandIdx];
6764 Value *VLOperand = Ops[PtrOperandIdx + 1];
6765 Operands.push_back(PtrOperand);
6766 if (IsMasked)
6767 Operands.push_back(Ops[NF]);
6768 Operands.push_back(VLOperand);
6769 if (IsMasked)
6770 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6771
6772 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6773 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6774 clang::CharUnits Align =
6775 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6776 llvm::Value *V;
6777 for (unsigned I = 0; I < NF; ++I) {
6778 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6779 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6780 }
6781 return V;
6782 }
6783 break;
6784case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tumu:
6785case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tumu:
6786case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tumu:
6787case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tumu:
6788 ID = Intrinsic::riscv_vlseg3_mask;
6789 NF = 3;
6790 PolicyAttrs = 0;
6791IsMasked = true;
6792
6793 {
6794 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6795 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6796 SmallVector<llvm::Value*, 12> Operands;
6797
6798 // Please refer to comment under 'defvar NFList' in this file
6799 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6800 (!IsMasked && PolicyAttrs & RVV_VTA))
6801 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6802 else {
6803 if (IsMasked)
6804 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6805 else // Unmasked
6806 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6807 }
6808 unsigned PtrOperandIdx = IsMasked ?
6809 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6810 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6811 Value *PtrOperand = Ops[PtrOperandIdx];
6812 Value *VLOperand = Ops[PtrOperandIdx + 1];
6813 Operands.push_back(PtrOperand);
6814 if (IsMasked)
6815 Operands.push_back(Ops[NF]);
6816 Operands.push_back(VLOperand);
6817 if (IsMasked)
6818 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6819
6820 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6821 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6822 clang::CharUnits Align =
6823 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6824 llvm::Value *V;
6825 for (unsigned I = 0; I < NF; ++I) {
6826 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6827 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6828 }
6829 return V;
6830 }
6831 break;
6832case RISCVVector::BI__builtin_rvv_vlseg3e8_v_mu:
6833case RISCVVector::BI__builtin_rvv_vlseg3e16_v_mu:
6834case RISCVVector::BI__builtin_rvv_vlseg3e32_v_mu:
6835case RISCVVector::BI__builtin_rvv_vlseg3e64_v_mu:
6836 ID = Intrinsic::riscv_vlseg3_mask;
6837 NF = 3;
6838 PolicyAttrs = 1;
6839IsMasked = true;
6840
6841 {
6842 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6843 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6844 SmallVector<llvm::Value*, 12> Operands;
6845
6846 // Please refer to comment under 'defvar NFList' in this file
6847 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6848 (!IsMasked && PolicyAttrs & RVV_VTA))
6849 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6850 else {
6851 if (IsMasked)
6852 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6853 else // Unmasked
6854 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6855 }
6856 unsigned PtrOperandIdx = IsMasked ?
6857 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6858 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6859 Value *PtrOperand = Ops[PtrOperandIdx];
6860 Value *VLOperand = Ops[PtrOperandIdx + 1];
6861 Operands.push_back(PtrOperand);
6862 if (IsMasked)
6863 Operands.push_back(Ops[NF]);
6864 Operands.push_back(VLOperand);
6865 if (IsMasked)
6866 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6867
6868 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6869 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6870 clang::CharUnits Align =
6871 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6872 llvm::Value *V;
6873 for (unsigned I = 0; I < NF; ++I) {
6874 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6875 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6876 }
6877 return V;
6878 }
6879 break;
6880case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tu:
6881case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tu:
6882case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tu:
6883case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tu:
6884 ID = Intrinsic::riscv_vlseg3ff;
6885 NF = 3;
6886 PolicyAttrs = 2;
6887IsMasked = false;
6888
6889 {
6890 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6891 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6892 SmallVector<llvm::Value*, 12> Operands;
6893
6894 // Please refer to comment under 'defvar NFList' in this file
6895 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6896 (!IsMasked && PolicyAttrs & RVV_VTA))
6897 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6898 else {
6899 if (IsMasked)
6900 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6901 else // Unmasked
6902 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6903 }
6904 unsigned PtrOperandIdx = IsMasked ?
6905 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6906 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6907 Value *PtrOperand = Ops[PtrOperandIdx];
6908 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6909 Value *VLOperand = Ops[PtrOperandIdx + 2];
6910 Operands.push_back(PtrOperand);
6911 if (IsMasked)
6912 Operands.push_back(Ops[NF]);
6913 Operands.push_back(VLOperand);
6914 if (IsMasked)
6915 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6916
6917 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6918 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6919 clang::CharUnits Align =
6920 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6921 for (unsigned I = 0; I < NF; ++I) {
6922 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6923 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6924 }
6925 // Store new_vl.
6926 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6927 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6928 }
6929 break;
6930case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_ta:
6931case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_ta:
6932case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_ta:
6933case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_ta:
6934 ID = Intrinsic::riscv_vlseg3ff;
6935 NF = 3;
6936 PolicyAttrs = 3;
6937IsMasked = false;
6938
6939 {
6940 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6941 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6942 SmallVector<llvm::Value*, 12> Operands;
6943
6944 // Please refer to comment under 'defvar NFList' in this file
6945 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6946 (!IsMasked && PolicyAttrs & RVV_VTA))
6947 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6948 else {
6949 if (IsMasked)
6950 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6951 else // Unmasked
6952 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6953 }
6954 unsigned PtrOperandIdx = IsMasked ?
6955 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6956 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6957 Value *PtrOperand = Ops[PtrOperandIdx];
6958 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6959 Value *VLOperand = Ops[PtrOperandIdx + 2];
6960 Operands.push_back(PtrOperand);
6961 if (IsMasked)
6962 Operands.push_back(Ops[NF]);
6963 Operands.push_back(VLOperand);
6964 if (IsMasked)
6965 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6966
6967 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6968 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6969 clang::CharUnits Align =
6970 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6971 for (unsigned I = 0; I < NF; ++I) {
6972 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6973 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6974 }
6975 // Store new_vl.
6976 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6977 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6978 }
6979 break;
6980case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tum:
6981case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tum:
6982case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tum:
6983case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tum:
6984 ID = Intrinsic::riscv_vlseg3ff_mask;
6985 NF = 3;
6986 PolicyAttrs = 2;
6987IsMasked = true;
6988
6989 {
6990 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6991 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6992 SmallVector<llvm::Value*, 12> Operands;
6993
6994 // Please refer to comment under 'defvar NFList' in this file
6995 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6996 (!IsMasked && PolicyAttrs & RVV_VTA))
6997 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6998 else {
6999 if (IsMasked)
7000 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7001 else // Unmasked
7002 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7003 }
7004 unsigned PtrOperandIdx = IsMasked ?
7005 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7006 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7007 Value *PtrOperand = Ops[PtrOperandIdx];
7008 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7009 Value *VLOperand = Ops[PtrOperandIdx + 2];
7010 Operands.push_back(PtrOperand);
7011 if (IsMasked)
7012 Operands.push_back(Ops[NF]);
7013 Operands.push_back(VLOperand);
7014 if (IsMasked)
7015 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7016
7017 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7018 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7019 clang::CharUnits Align =
7020 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7021 for (unsigned I = 0; I < NF; ++I) {
7022 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7023 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7024 }
7025 // Store new_vl.
7026 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7027 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7028 }
7029 break;
7030case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tama:
7031case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tama:
7032case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tama:
7033case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tama:
7034 ID = Intrinsic::riscv_vlseg3ff_mask;
7035 NF = 3;
7036 PolicyAttrs = 3;
7037IsMasked = true;
7038
7039 {
7040 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7041 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7042 SmallVector<llvm::Value*, 12> Operands;
7043
7044 // Please refer to comment under 'defvar NFList' in this file
7045 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7046 (!IsMasked && PolicyAttrs & RVV_VTA))
7047 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7048 else {
7049 if (IsMasked)
7050 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7051 else // Unmasked
7052 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7053 }
7054 unsigned PtrOperandIdx = IsMasked ?
7055 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7056 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7057 Value *PtrOperand = Ops[PtrOperandIdx];
7058 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7059 Value *VLOperand = Ops[PtrOperandIdx + 2];
7060 Operands.push_back(PtrOperand);
7061 if (IsMasked)
7062 Operands.push_back(Ops[NF]);
7063 Operands.push_back(VLOperand);
7064 if (IsMasked)
7065 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7066
7067 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7068 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7069 clang::CharUnits Align =
7070 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7071 for (unsigned I = 0; I < NF; ++I) {
7072 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7073 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7074 }
7075 // Store new_vl.
7076 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7077 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7078 }
7079 break;
7080case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tumu:
7081case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tumu:
7082case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tumu:
7083case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tumu:
7084 ID = Intrinsic::riscv_vlseg3ff_mask;
7085 NF = 3;
7086 PolicyAttrs = 0;
7087IsMasked = true;
7088
7089 {
7090 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7091 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7092 SmallVector<llvm::Value*, 12> Operands;
7093
7094 // Please refer to comment under 'defvar NFList' in this file
7095 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7096 (!IsMasked && PolicyAttrs & RVV_VTA))
7097 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7098 else {
7099 if (IsMasked)
7100 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7101 else // Unmasked
7102 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7103 }
7104 unsigned PtrOperandIdx = IsMasked ?
7105 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7106 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7107 Value *PtrOperand = Ops[PtrOperandIdx];
7108 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7109 Value *VLOperand = Ops[PtrOperandIdx + 2];
7110 Operands.push_back(PtrOperand);
7111 if (IsMasked)
7112 Operands.push_back(Ops[NF]);
7113 Operands.push_back(VLOperand);
7114 if (IsMasked)
7115 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7116
7117 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7118 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7119 clang::CharUnits Align =
7120 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7121 for (unsigned I = 0; I < NF; ++I) {
7122 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7123 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7124 }
7125 // Store new_vl.
7126 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7127 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7128 }
7129 break;
7130case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_mu:
7131case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_mu:
7132case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_mu:
7133case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_mu:
7134 ID = Intrinsic::riscv_vlseg3ff_mask;
7135 NF = 3;
7136 PolicyAttrs = 1;
7137IsMasked = true;
7138
7139 {
7140 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7141 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7142 SmallVector<llvm::Value*, 12> Operands;
7143
7144 // Please refer to comment under 'defvar NFList' in this file
7145 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7146 (!IsMasked && PolicyAttrs & RVV_VTA))
7147 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7148 else {
7149 if (IsMasked)
7150 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7151 else // Unmasked
7152 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7153 }
7154 unsigned PtrOperandIdx = IsMasked ?
7155 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7156 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7157 Value *PtrOperand = Ops[PtrOperandIdx];
7158 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7159 Value *VLOperand = Ops[PtrOperandIdx + 2];
7160 Operands.push_back(PtrOperand);
7161 if (IsMasked)
7162 Operands.push_back(Ops[NF]);
7163 Operands.push_back(VLOperand);
7164 if (IsMasked)
7165 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7166
7167 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7168 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7169 clang::CharUnits Align =
7170 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7171 for (unsigned I = 0; I < NF; ++I) {
7172 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7173 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7174 }
7175 // Store new_vl.
7176 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7177 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7178 }
7179 break;
7180case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tu:
7181case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tu:
7182case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tu:
7183case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tu:
7184 ID = Intrinsic::riscv_vlseg4;
7185 NF = 4;
7186 PolicyAttrs = 2;
7187IsMasked = false;
7188
7189 {
7190 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7191 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7192 SmallVector<llvm::Value*, 12> Operands;
7193
7194 // Please refer to comment under 'defvar NFList' in this file
7195 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7196 (!IsMasked && PolicyAttrs & RVV_VTA))
7197 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7198 else {
7199 if (IsMasked)
7200 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7201 else // Unmasked
7202 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7203 }
7204 unsigned PtrOperandIdx = IsMasked ?
7205 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7206 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7207 Value *PtrOperand = Ops[PtrOperandIdx];
7208 Value *VLOperand = Ops[PtrOperandIdx + 1];
7209 Operands.push_back(PtrOperand);
7210 if (IsMasked)
7211 Operands.push_back(Ops[NF]);
7212 Operands.push_back(VLOperand);
7213 if (IsMasked)
7214 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7215
7216 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7217 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7218 clang::CharUnits Align =
7219 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7220 llvm::Value *V;
7221 for (unsigned I = 0; I < NF; ++I) {
7222 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7223 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7224 }
7225 return V;
7226 }
7227 break;
7228case RISCVVector::BI__builtin_rvv_vlseg4e8_v_ta:
7229case RISCVVector::BI__builtin_rvv_vlseg4e16_v_ta:
7230case RISCVVector::BI__builtin_rvv_vlseg4e32_v_ta:
7231case RISCVVector::BI__builtin_rvv_vlseg4e64_v_ta:
7232 ID = Intrinsic::riscv_vlseg4;
7233 NF = 4;
7234 PolicyAttrs = 3;
7235IsMasked = false;
7236
7237 {
7238 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7239 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7240 SmallVector<llvm::Value*, 12> Operands;
7241
7242 // Please refer to comment under 'defvar NFList' in this file
7243 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7244 (!IsMasked && PolicyAttrs & RVV_VTA))
7245 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7246 else {
7247 if (IsMasked)
7248 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7249 else // Unmasked
7250 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7251 }
7252 unsigned PtrOperandIdx = IsMasked ?
7253 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7254 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7255 Value *PtrOperand = Ops[PtrOperandIdx];
7256 Value *VLOperand = Ops[PtrOperandIdx + 1];
7257 Operands.push_back(PtrOperand);
7258 if (IsMasked)
7259 Operands.push_back(Ops[NF]);
7260 Operands.push_back(VLOperand);
7261 if (IsMasked)
7262 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7263
7264 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7265 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7266 clang::CharUnits Align =
7267 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7268 llvm::Value *V;
7269 for (unsigned I = 0; I < NF; ++I) {
7270 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7271 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7272 }
7273 return V;
7274 }
7275 break;
7276case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tum:
7277case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tum:
7278case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tum:
7279case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tum:
7280 ID = Intrinsic::riscv_vlseg4_mask;
7281 NF = 4;
7282 PolicyAttrs = 2;
7283IsMasked = true;
7284
7285 {
7286 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7287 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7288 SmallVector<llvm::Value*, 12> Operands;
7289
7290 // Please refer to comment under 'defvar NFList' in this file
7291 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7292 (!IsMasked && PolicyAttrs & RVV_VTA))
7293 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7294 else {
7295 if (IsMasked)
7296 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7297 else // Unmasked
7298 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7299 }
7300 unsigned PtrOperandIdx = IsMasked ?
7301 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7302 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7303 Value *PtrOperand = Ops[PtrOperandIdx];
7304 Value *VLOperand = Ops[PtrOperandIdx + 1];
7305 Operands.push_back(PtrOperand);
7306 if (IsMasked)
7307 Operands.push_back(Ops[NF]);
7308 Operands.push_back(VLOperand);
7309 if (IsMasked)
7310 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7311
7312 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7313 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7314 clang::CharUnits Align =
7315 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7316 llvm::Value *V;
7317 for (unsigned I = 0; I < NF; ++I) {
7318 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7319 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7320 }
7321 return V;
7322 }
7323 break;
7324case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tama:
7325case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tama:
7326case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tama:
7327case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tama:
7328 ID = Intrinsic::riscv_vlseg4_mask;
7329 NF = 4;
7330 PolicyAttrs = 3;
7331IsMasked = true;
7332
7333 {
7334 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7335 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7336 SmallVector<llvm::Value*, 12> Operands;
7337
7338 // Please refer to comment under 'defvar NFList' in this file
7339 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7340 (!IsMasked && PolicyAttrs & RVV_VTA))
7341 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7342 else {
7343 if (IsMasked)
7344 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7345 else // Unmasked
7346 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7347 }
7348 unsigned PtrOperandIdx = IsMasked ?
7349 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7350 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7351 Value *PtrOperand = Ops[PtrOperandIdx];
7352 Value *VLOperand = Ops[PtrOperandIdx + 1];
7353 Operands.push_back(PtrOperand);
7354 if (IsMasked)
7355 Operands.push_back(Ops[NF]);
7356 Operands.push_back(VLOperand);
7357 if (IsMasked)
7358 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7359
7360 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7361 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7362 clang::CharUnits Align =
7363 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7364 llvm::Value *V;
7365 for (unsigned I = 0; I < NF; ++I) {
7366 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7367 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7368 }
7369 return V;
7370 }
7371 break;
7372case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tumu:
7373case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tumu:
7374case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tumu:
7375case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tumu:
7376 ID = Intrinsic::riscv_vlseg4_mask;
7377 NF = 4;
7378 PolicyAttrs = 0;
7379IsMasked = true;
7380
7381 {
7382 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7383 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7384 SmallVector<llvm::Value*, 12> Operands;
7385
7386 // Please refer to comment under 'defvar NFList' in this file
7387 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7388 (!IsMasked && PolicyAttrs & RVV_VTA))
7389 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7390 else {
7391 if (IsMasked)
7392 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7393 else // Unmasked
7394 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7395 }
7396 unsigned PtrOperandIdx = IsMasked ?
7397 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7398 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7399 Value *PtrOperand = Ops[PtrOperandIdx];
7400 Value *VLOperand = Ops[PtrOperandIdx + 1];
7401 Operands.push_back(PtrOperand);
7402 if (IsMasked)
7403 Operands.push_back(Ops[NF]);
7404 Operands.push_back(VLOperand);
7405 if (IsMasked)
7406 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7407
7408 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7409 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7410 clang::CharUnits Align =
7411 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7412 llvm::Value *V;
7413 for (unsigned I = 0; I < NF; ++I) {
7414 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7415 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7416 }
7417 return V;
7418 }
7419 break;
7420case RISCVVector::BI__builtin_rvv_vlseg4e8_v_mu:
7421case RISCVVector::BI__builtin_rvv_vlseg4e16_v_mu:
7422case RISCVVector::BI__builtin_rvv_vlseg4e32_v_mu:
7423case RISCVVector::BI__builtin_rvv_vlseg4e64_v_mu:
7424 ID = Intrinsic::riscv_vlseg4_mask;
7425 NF = 4;
7426 PolicyAttrs = 1;
7427IsMasked = true;
7428
7429 {
7430 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7431 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7432 SmallVector<llvm::Value*, 12> Operands;
7433
7434 // Please refer to comment under 'defvar NFList' in this file
7435 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7436 (!IsMasked && PolicyAttrs & RVV_VTA))
7437 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7438 else {
7439 if (IsMasked)
7440 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7441 else // Unmasked
7442 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7443 }
7444 unsigned PtrOperandIdx = IsMasked ?
7445 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7446 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7447 Value *PtrOperand = Ops[PtrOperandIdx];
7448 Value *VLOperand = Ops[PtrOperandIdx + 1];
7449 Operands.push_back(PtrOperand);
7450 if (IsMasked)
7451 Operands.push_back(Ops[NF]);
7452 Operands.push_back(VLOperand);
7453 if (IsMasked)
7454 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7455
7456 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7457 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7458 clang::CharUnits Align =
7459 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7460 llvm::Value *V;
7461 for (unsigned I = 0; I < NF; ++I) {
7462 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7463 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7464 }
7465 return V;
7466 }
7467 break;
7468case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tu:
7469case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tu:
7470case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tu:
7471case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tu:
7472 ID = Intrinsic::riscv_vlseg4ff;
7473 NF = 4;
7474 PolicyAttrs = 2;
7475IsMasked = false;
7476
7477 {
7478 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7479 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7480 SmallVector<llvm::Value*, 12> Operands;
7481
7482 // Please refer to comment under 'defvar NFList' in this file
7483 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7484 (!IsMasked && PolicyAttrs & RVV_VTA))
7485 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7486 else {
7487 if (IsMasked)
7488 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7489 else // Unmasked
7490 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7491 }
7492 unsigned PtrOperandIdx = IsMasked ?
7493 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7494 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7495 Value *PtrOperand = Ops[PtrOperandIdx];
7496 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7497 Value *VLOperand = Ops[PtrOperandIdx + 2];
7498 Operands.push_back(PtrOperand);
7499 if (IsMasked)
7500 Operands.push_back(Ops[NF]);
7501 Operands.push_back(VLOperand);
7502 if (IsMasked)
7503 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7504
7505 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7506 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7507 clang::CharUnits Align =
7508 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7509 for (unsigned I = 0; I < NF; ++I) {
7510 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7511 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7512 }
7513 // Store new_vl.
7514 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7515 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7516 }
7517 break;
7518case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_ta:
7519case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_ta:
7520case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_ta:
7521case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_ta:
7522 ID = Intrinsic::riscv_vlseg4ff;
7523 NF = 4;
7524 PolicyAttrs = 3;
7525IsMasked = false;
7526
7527 {
7528 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7529 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7530 SmallVector<llvm::Value*, 12> Operands;
7531
7532 // Please refer to comment under 'defvar NFList' in this file
7533 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7534 (!IsMasked && PolicyAttrs & RVV_VTA))
7535 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7536 else {
7537 if (IsMasked)
7538 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7539 else // Unmasked
7540 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7541 }
7542 unsigned PtrOperandIdx = IsMasked ?
7543 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7544 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7545 Value *PtrOperand = Ops[PtrOperandIdx];
7546 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7547 Value *VLOperand = Ops[PtrOperandIdx + 2];
7548 Operands.push_back(PtrOperand);
7549 if (IsMasked)
7550 Operands.push_back(Ops[NF]);
7551 Operands.push_back(VLOperand);
7552 if (IsMasked)
7553 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7554
7555 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7556 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7557 clang::CharUnits Align =
7558 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7559 for (unsigned I = 0; I < NF; ++I) {
7560 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7561 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7562 }
7563 // Store new_vl.
7564 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7565 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7566 }
7567 break;
7568case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tum:
7569case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tum:
7570case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tum:
7571case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tum:
7572 ID = Intrinsic::riscv_vlseg4ff_mask;
7573 NF = 4;
7574 PolicyAttrs = 2;
7575IsMasked = true;
7576
7577 {
7578 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7579 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7580 SmallVector<llvm::Value*, 12> Operands;
7581
7582 // Please refer to comment under 'defvar NFList' in this file
7583 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7584 (!IsMasked && PolicyAttrs & RVV_VTA))
7585 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7586 else {
7587 if (IsMasked)
7588 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7589 else // Unmasked
7590 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7591 }
7592 unsigned PtrOperandIdx = IsMasked ?
7593 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7594 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7595 Value *PtrOperand = Ops[PtrOperandIdx];
7596 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7597 Value *VLOperand = Ops[PtrOperandIdx + 2];
7598 Operands.push_back(PtrOperand);
7599 if (IsMasked)
7600 Operands.push_back(Ops[NF]);
7601 Operands.push_back(VLOperand);
7602 if (IsMasked)
7603 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7604
7605 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7606 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7607 clang::CharUnits Align =
7608 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7609 for (unsigned I = 0; I < NF; ++I) {
7610 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7611 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7612 }
7613 // Store new_vl.
7614 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7615 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7616 }
7617 break;
7618case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tama:
7619case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tama:
7620case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tama:
7621case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tama:
7622 ID = Intrinsic::riscv_vlseg4ff_mask;
7623 NF = 4;
7624 PolicyAttrs = 3;
7625IsMasked = true;
7626
7627 {
7628 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7629 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7630 SmallVector<llvm::Value*, 12> Operands;
7631
7632 // Please refer to comment under 'defvar NFList' in this file
7633 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7634 (!IsMasked && PolicyAttrs & RVV_VTA))
7635 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7636 else {
7637 if (IsMasked)
7638 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7639 else // Unmasked
7640 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7641 }
7642 unsigned PtrOperandIdx = IsMasked ?
7643 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7644 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7645 Value *PtrOperand = Ops[PtrOperandIdx];
7646 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7647 Value *VLOperand = Ops[PtrOperandIdx + 2];
7648 Operands.push_back(PtrOperand);
7649 if (IsMasked)
7650 Operands.push_back(Ops[NF]);
7651 Operands.push_back(VLOperand);
7652 if (IsMasked)
7653 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7654
7655 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7656 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7657 clang::CharUnits Align =
7658 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7659 for (unsigned I = 0; I < NF; ++I) {
7660 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7661 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7662 }
7663 // Store new_vl.
7664 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7665 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7666 }
7667 break;
7668case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tumu:
7669case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tumu:
7670case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tumu:
7671case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tumu:
7672 ID = Intrinsic::riscv_vlseg4ff_mask;
7673 NF = 4;
7674 PolicyAttrs = 0;
7675IsMasked = true;
7676
7677 {
7678 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7679 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7680 SmallVector<llvm::Value*, 12> Operands;
7681
7682 // Please refer to comment under 'defvar NFList' in this file
7683 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7684 (!IsMasked && PolicyAttrs & RVV_VTA))
7685 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7686 else {
7687 if (IsMasked)
7688 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7689 else // Unmasked
7690 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7691 }
7692 unsigned PtrOperandIdx = IsMasked ?
7693 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7694 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7695 Value *PtrOperand = Ops[PtrOperandIdx];
7696 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7697 Value *VLOperand = Ops[PtrOperandIdx + 2];
7698 Operands.push_back(PtrOperand);
7699 if (IsMasked)
7700 Operands.push_back(Ops[NF]);
7701 Operands.push_back(VLOperand);
7702 if (IsMasked)
7703 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7704
7705 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7706 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7707 clang::CharUnits Align =
7708 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7709 for (unsigned I = 0; I < NF; ++I) {
7710 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7711 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7712 }
7713 // Store new_vl.
7714 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7715 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7716 }
7717 break;
7718case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_mu:
7719case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_mu:
7720case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_mu:
7721case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_mu:
7722 ID = Intrinsic::riscv_vlseg4ff_mask;
7723 NF = 4;
7724 PolicyAttrs = 1;
7725IsMasked = true;
7726
7727 {
7728 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7729 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7730 SmallVector<llvm::Value*, 12> Operands;
7731
7732 // Please refer to comment under 'defvar NFList' in this file
7733 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7734 (!IsMasked && PolicyAttrs & RVV_VTA))
7735 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7736 else {
7737 if (IsMasked)
7738 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7739 else // Unmasked
7740 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7741 }
7742 unsigned PtrOperandIdx = IsMasked ?
7743 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7744 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7745 Value *PtrOperand = Ops[PtrOperandIdx];
7746 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7747 Value *VLOperand = Ops[PtrOperandIdx + 2];
7748 Operands.push_back(PtrOperand);
7749 if (IsMasked)
7750 Operands.push_back(Ops[NF]);
7751 Operands.push_back(VLOperand);
7752 if (IsMasked)
7753 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7754
7755 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7756 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7757 clang::CharUnits Align =
7758 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7759 for (unsigned I = 0; I < NF; ++I) {
7760 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7761 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7762 }
7763 // Store new_vl.
7764 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7765 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7766 }
7767 break;
7768case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tu:
7769case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tu:
7770case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tu:
7771case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tu:
7772 ID = Intrinsic::riscv_vlseg5;
7773 NF = 5;
7774 PolicyAttrs = 2;
7775IsMasked = false;
7776
7777 {
7778 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7779 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7780 SmallVector<llvm::Value*, 12> Operands;
7781
7782 // Please refer to comment under 'defvar NFList' in this file
7783 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7784 (!IsMasked && PolicyAttrs & RVV_VTA))
7785 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7786 else {
7787 if (IsMasked)
7788 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7789 else // Unmasked
7790 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7791 }
7792 unsigned PtrOperandIdx = IsMasked ?
7793 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7794 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7795 Value *PtrOperand = Ops[PtrOperandIdx];
7796 Value *VLOperand = Ops[PtrOperandIdx + 1];
7797 Operands.push_back(PtrOperand);
7798 if (IsMasked)
7799 Operands.push_back(Ops[NF]);
7800 Operands.push_back(VLOperand);
7801 if (IsMasked)
7802 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7803
7804 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7805 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7806 clang::CharUnits Align =
7807 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7808 llvm::Value *V;
7809 for (unsigned I = 0; I < NF; ++I) {
7810 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7811 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7812 }
7813 return V;
7814 }
7815 break;
7816case RISCVVector::BI__builtin_rvv_vlseg5e8_v_ta:
7817case RISCVVector::BI__builtin_rvv_vlseg5e16_v_ta:
7818case RISCVVector::BI__builtin_rvv_vlseg5e32_v_ta:
7819case RISCVVector::BI__builtin_rvv_vlseg5e64_v_ta:
7820 ID = Intrinsic::riscv_vlseg5;
7821 NF = 5;
7822 PolicyAttrs = 3;
7823IsMasked = false;
7824
7825 {
7826 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7827 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7828 SmallVector<llvm::Value*, 12> Operands;
7829
7830 // Please refer to comment under 'defvar NFList' in this file
7831 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7832 (!IsMasked && PolicyAttrs & RVV_VTA))
7833 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7834 else {
7835 if (IsMasked)
7836 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7837 else // Unmasked
7838 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7839 }
7840 unsigned PtrOperandIdx = IsMasked ?
7841 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7842 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7843 Value *PtrOperand = Ops[PtrOperandIdx];
7844 Value *VLOperand = Ops[PtrOperandIdx + 1];
7845 Operands.push_back(PtrOperand);
7846 if (IsMasked)
7847 Operands.push_back(Ops[NF]);
7848 Operands.push_back(VLOperand);
7849 if (IsMasked)
7850 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7851
7852 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7853 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7854 clang::CharUnits Align =
7855 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7856 llvm::Value *V;
7857 for (unsigned I = 0; I < NF; ++I) {
7858 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7859 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7860 }
7861 return V;
7862 }
7863 break;
7864case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tum:
7865case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tum:
7866case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tum:
7867case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tum:
7868 ID = Intrinsic::riscv_vlseg5_mask;
7869 NF = 5;
7870 PolicyAttrs = 2;
7871IsMasked = true;
7872
7873 {
7874 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7875 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7876 SmallVector<llvm::Value*, 12> Operands;
7877
7878 // Please refer to comment under 'defvar NFList' in this file
7879 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7880 (!IsMasked && PolicyAttrs & RVV_VTA))
7881 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7882 else {
7883 if (IsMasked)
7884 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7885 else // Unmasked
7886 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7887 }
7888 unsigned PtrOperandIdx = IsMasked ?
7889 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7890 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7891 Value *PtrOperand = Ops[PtrOperandIdx];
7892 Value *VLOperand = Ops[PtrOperandIdx + 1];
7893 Operands.push_back(PtrOperand);
7894 if (IsMasked)
7895 Operands.push_back(Ops[NF]);
7896 Operands.push_back(VLOperand);
7897 if (IsMasked)
7898 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7899
7900 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7901 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7902 clang::CharUnits Align =
7903 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7904 llvm::Value *V;
7905 for (unsigned I = 0; I < NF; ++I) {
7906 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7907 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7908 }
7909 return V;
7910 }
7911 break;
7912case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tama:
7913case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tama:
7914case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tama:
7915case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tama:
7916 ID = Intrinsic::riscv_vlseg5_mask;
7917 NF = 5;
7918 PolicyAttrs = 3;
7919IsMasked = true;
7920
7921 {
7922 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7923 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7924 SmallVector<llvm::Value*, 12> Operands;
7925
7926 // Please refer to comment under 'defvar NFList' in this file
7927 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7928 (!IsMasked && PolicyAttrs & RVV_VTA))
7929 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7930 else {
7931 if (IsMasked)
7932 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7933 else // Unmasked
7934 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7935 }
7936 unsigned PtrOperandIdx = IsMasked ?
7937 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7938 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7939 Value *PtrOperand = Ops[PtrOperandIdx];
7940 Value *VLOperand = Ops[PtrOperandIdx + 1];
7941 Operands.push_back(PtrOperand);
7942 if (IsMasked)
7943 Operands.push_back(Ops[NF]);
7944 Operands.push_back(VLOperand);
7945 if (IsMasked)
7946 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7947
7948 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7949 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7950 clang::CharUnits Align =
7951 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7952 llvm::Value *V;
7953 for (unsigned I = 0; I < NF; ++I) {
7954 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7955 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7956 }
7957 return V;
7958 }
7959 break;
7960case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tumu:
7961case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tumu:
7962case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tumu:
7963case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tumu:
7964 ID = Intrinsic::riscv_vlseg5_mask;
7965 NF = 5;
7966 PolicyAttrs = 0;
7967IsMasked = true;
7968
7969 {
7970 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7971 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7972 SmallVector<llvm::Value*, 12> Operands;
7973
7974 // Please refer to comment under 'defvar NFList' in this file
7975 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7976 (!IsMasked && PolicyAttrs & RVV_VTA))
7977 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7978 else {
7979 if (IsMasked)
7980 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7981 else // Unmasked
7982 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7983 }
7984 unsigned PtrOperandIdx = IsMasked ?
7985 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7986 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7987 Value *PtrOperand = Ops[PtrOperandIdx];
7988 Value *VLOperand = Ops[PtrOperandIdx + 1];
7989 Operands.push_back(PtrOperand);
7990 if (IsMasked)
7991 Operands.push_back(Ops[NF]);
7992 Operands.push_back(VLOperand);
7993 if (IsMasked)
7994 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7995
7996 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7997 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7998 clang::CharUnits Align =
7999 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8000 llvm::Value *V;
8001 for (unsigned I = 0; I < NF; ++I) {
8002 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8003 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8004 }
8005 return V;
8006 }
8007 break;
8008case RISCVVector::BI__builtin_rvv_vlseg5e8_v_mu:
8009case RISCVVector::BI__builtin_rvv_vlseg5e16_v_mu:
8010case RISCVVector::BI__builtin_rvv_vlseg5e32_v_mu:
8011case RISCVVector::BI__builtin_rvv_vlseg5e64_v_mu:
8012 ID = Intrinsic::riscv_vlseg5_mask;
8013 NF = 5;
8014 PolicyAttrs = 1;
8015IsMasked = true;
8016
8017 {
8018 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8019 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8020 SmallVector<llvm::Value*, 12> Operands;
8021
8022 // Please refer to comment under 'defvar NFList' in this file
8023 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8024 (!IsMasked && PolicyAttrs & RVV_VTA))
8025 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8026 else {
8027 if (IsMasked)
8028 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8029 else // Unmasked
8030 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8031 }
8032 unsigned PtrOperandIdx = IsMasked ?
8033 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8034 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8035 Value *PtrOperand = Ops[PtrOperandIdx];
8036 Value *VLOperand = Ops[PtrOperandIdx + 1];
8037 Operands.push_back(PtrOperand);
8038 if (IsMasked)
8039 Operands.push_back(Ops[NF]);
8040 Operands.push_back(VLOperand);
8041 if (IsMasked)
8042 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8043
8044 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8045 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8046 clang::CharUnits Align =
8047 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8048 llvm::Value *V;
8049 for (unsigned I = 0; I < NF; ++I) {
8050 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8051 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8052 }
8053 return V;
8054 }
8055 break;
8056case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tu:
8057case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tu:
8058case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tu:
8059case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tu:
8060 ID = Intrinsic::riscv_vlseg5ff;
8061 NF = 5;
8062 PolicyAttrs = 2;
8063IsMasked = false;
8064
8065 {
8066 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8067 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8068 SmallVector<llvm::Value*, 12> Operands;
8069
8070 // Please refer to comment under 'defvar NFList' in this file
8071 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8072 (!IsMasked && PolicyAttrs & RVV_VTA))
8073 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8074 else {
8075 if (IsMasked)
8076 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8077 else // Unmasked
8078 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8079 }
8080 unsigned PtrOperandIdx = IsMasked ?
8081 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8082 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8083 Value *PtrOperand = Ops[PtrOperandIdx];
8084 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8085 Value *VLOperand = Ops[PtrOperandIdx + 2];
8086 Operands.push_back(PtrOperand);
8087 if (IsMasked)
8088 Operands.push_back(Ops[NF]);
8089 Operands.push_back(VLOperand);
8090 if (IsMasked)
8091 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8092
8093 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8094 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8095 clang::CharUnits Align =
8096 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8097 for (unsigned I = 0; I < NF; ++I) {
8098 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8099 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8100 }
8101 // Store new_vl.
8102 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8103 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8104 }
8105 break;
8106case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_ta:
8107case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_ta:
8108case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_ta:
8109case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_ta:
8110 ID = Intrinsic::riscv_vlseg5ff;
8111 NF = 5;
8112 PolicyAttrs = 3;
8113IsMasked = false;
8114
8115 {
8116 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8117 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8118 SmallVector<llvm::Value*, 12> Operands;
8119
8120 // Please refer to comment under 'defvar NFList' in this file
8121 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8122 (!IsMasked && PolicyAttrs & RVV_VTA))
8123 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8124 else {
8125 if (IsMasked)
8126 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8127 else // Unmasked
8128 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8129 }
8130 unsigned PtrOperandIdx = IsMasked ?
8131 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8132 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8133 Value *PtrOperand = Ops[PtrOperandIdx];
8134 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8135 Value *VLOperand = Ops[PtrOperandIdx + 2];
8136 Operands.push_back(PtrOperand);
8137 if (IsMasked)
8138 Operands.push_back(Ops[NF]);
8139 Operands.push_back(VLOperand);
8140 if (IsMasked)
8141 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8142
8143 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8144 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8145 clang::CharUnits Align =
8146 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8147 for (unsigned I = 0; I < NF; ++I) {
8148 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8149 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8150 }
8151 // Store new_vl.
8152 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8153 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8154 }
8155 break;
8156case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tum:
8157case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tum:
8158case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tum:
8159case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tum:
8160 ID = Intrinsic::riscv_vlseg5ff_mask;
8161 NF = 5;
8162 PolicyAttrs = 2;
8163IsMasked = true;
8164
8165 {
8166 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8167 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8168 SmallVector<llvm::Value*, 12> Operands;
8169
8170 // Please refer to comment under 'defvar NFList' in this file
8171 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8172 (!IsMasked && PolicyAttrs & RVV_VTA))
8173 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8174 else {
8175 if (IsMasked)
8176 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8177 else // Unmasked
8178 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8179 }
8180 unsigned PtrOperandIdx = IsMasked ?
8181 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8182 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8183 Value *PtrOperand = Ops[PtrOperandIdx];
8184 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8185 Value *VLOperand = Ops[PtrOperandIdx + 2];
8186 Operands.push_back(PtrOperand);
8187 if (IsMasked)
8188 Operands.push_back(Ops[NF]);
8189 Operands.push_back(VLOperand);
8190 if (IsMasked)
8191 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8192
8193 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8194 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8195 clang::CharUnits Align =
8196 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8197 for (unsigned I = 0; I < NF; ++I) {
8198 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8199 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8200 }
8201 // Store new_vl.
8202 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8203 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8204 }
8205 break;
8206case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tama:
8207case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tama:
8208case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tama:
8209case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tama:
8210 ID = Intrinsic::riscv_vlseg5ff_mask;
8211 NF = 5;
8212 PolicyAttrs = 3;
8213IsMasked = true;
8214
8215 {
8216 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8217 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8218 SmallVector<llvm::Value*, 12> Operands;
8219
8220 // Please refer to comment under 'defvar NFList' in this file
8221 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8222 (!IsMasked && PolicyAttrs & RVV_VTA))
8223 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8224 else {
8225 if (IsMasked)
8226 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8227 else // Unmasked
8228 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8229 }
8230 unsigned PtrOperandIdx = IsMasked ?
8231 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8232 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8233 Value *PtrOperand = Ops[PtrOperandIdx];
8234 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8235 Value *VLOperand = Ops[PtrOperandIdx + 2];
8236 Operands.push_back(PtrOperand);
8237 if (IsMasked)
8238 Operands.push_back(Ops[NF]);
8239 Operands.push_back(VLOperand);
8240 if (IsMasked)
8241 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8242
8243 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8244 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8245 clang::CharUnits Align =
8246 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8247 for (unsigned I = 0; I < NF; ++I) {
8248 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8249 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8250 }
8251 // Store new_vl.
8252 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8253 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8254 }
8255 break;
8256case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tumu:
8257case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tumu:
8258case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tumu:
8259case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tumu:
8260 ID = Intrinsic::riscv_vlseg5ff_mask;
8261 NF = 5;
8262 PolicyAttrs = 0;
8263IsMasked = true;
8264
8265 {
8266 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8267 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8268 SmallVector<llvm::Value*, 12> Operands;
8269
8270 // Please refer to comment under 'defvar NFList' in this file
8271 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8272 (!IsMasked && PolicyAttrs & RVV_VTA))
8273 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8274 else {
8275 if (IsMasked)
8276 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8277 else // Unmasked
8278 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8279 }
8280 unsigned PtrOperandIdx = IsMasked ?
8281 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8282 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8283 Value *PtrOperand = Ops[PtrOperandIdx];
8284 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8285 Value *VLOperand = Ops[PtrOperandIdx + 2];
8286 Operands.push_back(PtrOperand);
8287 if (IsMasked)
8288 Operands.push_back(Ops[NF]);
8289 Operands.push_back(VLOperand);
8290 if (IsMasked)
8291 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8292
8293 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8294 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8295 clang::CharUnits Align =
8296 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8297 for (unsigned I = 0; I < NF; ++I) {
8298 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8299 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8300 }
8301 // Store new_vl.
8302 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8303 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8304 }
8305 break;
8306case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_mu:
8307case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_mu:
8308case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_mu:
8309case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_mu:
8310 ID = Intrinsic::riscv_vlseg5ff_mask;
8311 NF = 5;
8312 PolicyAttrs = 1;
8313IsMasked = true;
8314
8315 {
8316 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8317 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8318 SmallVector<llvm::Value*, 12> Operands;
8319
8320 // Please refer to comment under 'defvar NFList' in this file
8321 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8322 (!IsMasked && PolicyAttrs & RVV_VTA))
8323 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8324 else {
8325 if (IsMasked)
8326 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8327 else // Unmasked
8328 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8329 }
8330 unsigned PtrOperandIdx = IsMasked ?
8331 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8332 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8333 Value *PtrOperand = Ops[PtrOperandIdx];
8334 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8335 Value *VLOperand = Ops[PtrOperandIdx + 2];
8336 Operands.push_back(PtrOperand);
8337 if (IsMasked)
8338 Operands.push_back(Ops[NF]);
8339 Operands.push_back(VLOperand);
8340 if (IsMasked)
8341 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8342
8343 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8344 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8345 clang::CharUnits Align =
8346 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8347 for (unsigned I = 0; I < NF; ++I) {
8348 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8349 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8350 }
8351 // Store new_vl.
8352 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8353 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8354 }
8355 break;
8356case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tu:
8357case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tu:
8358case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tu:
8359case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tu:
8360 ID = Intrinsic::riscv_vlseg6;
8361 NF = 6;
8362 PolicyAttrs = 2;
8363IsMasked = false;
8364
8365 {
8366 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8367 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8368 SmallVector<llvm::Value*, 12> Operands;
8369
8370 // Please refer to comment under 'defvar NFList' in this file
8371 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8372 (!IsMasked && PolicyAttrs & RVV_VTA))
8373 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8374 else {
8375 if (IsMasked)
8376 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8377 else // Unmasked
8378 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8379 }
8380 unsigned PtrOperandIdx = IsMasked ?
8381 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8382 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8383 Value *PtrOperand = Ops[PtrOperandIdx];
8384 Value *VLOperand = Ops[PtrOperandIdx + 1];
8385 Operands.push_back(PtrOperand);
8386 if (IsMasked)
8387 Operands.push_back(Ops[NF]);
8388 Operands.push_back(VLOperand);
8389 if (IsMasked)
8390 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8391
8392 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8393 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8394 clang::CharUnits Align =
8395 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8396 llvm::Value *V;
8397 for (unsigned I = 0; I < NF; ++I) {
8398 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8399 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8400 }
8401 return V;
8402 }
8403 break;
8404case RISCVVector::BI__builtin_rvv_vlseg6e8_v_ta:
8405case RISCVVector::BI__builtin_rvv_vlseg6e16_v_ta:
8406case RISCVVector::BI__builtin_rvv_vlseg6e32_v_ta:
8407case RISCVVector::BI__builtin_rvv_vlseg6e64_v_ta:
8408 ID = Intrinsic::riscv_vlseg6;
8409 NF = 6;
8410 PolicyAttrs = 3;
8411IsMasked = false;
8412
8413 {
8414 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8415 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8416 SmallVector<llvm::Value*, 12> Operands;
8417
8418 // Please refer to comment under 'defvar NFList' in this file
8419 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8420 (!IsMasked && PolicyAttrs & RVV_VTA))
8421 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8422 else {
8423 if (IsMasked)
8424 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8425 else // Unmasked
8426 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8427 }
8428 unsigned PtrOperandIdx = IsMasked ?
8429 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8430 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8431 Value *PtrOperand = Ops[PtrOperandIdx];
8432 Value *VLOperand = Ops[PtrOperandIdx + 1];
8433 Operands.push_back(PtrOperand);
8434 if (IsMasked)
8435 Operands.push_back(Ops[NF]);
8436 Operands.push_back(VLOperand);
8437 if (IsMasked)
8438 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8439
8440 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8441 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8442 clang::CharUnits Align =
8443 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8444 llvm::Value *V;
8445 for (unsigned I = 0; I < NF; ++I) {
8446 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8447 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8448 }
8449 return V;
8450 }
8451 break;
8452case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tum:
8453case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tum:
8454case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tum:
8455case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tum:
8456 ID = Intrinsic::riscv_vlseg6_mask;
8457 NF = 6;
8458 PolicyAttrs = 2;
8459IsMasked = true;
8460
8461 {
8462 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8463 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8464 SmallVector<llvm::Value*, 12> Operands;
8465
8466 // Please refer to comment under 'defvar NFList' in this file
8467 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8468 (!IsMasked && PolicyAttrs & RVV_VTA))
8469 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8470 else {
8471 if (IsMasked)
8472 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8473 else // Unmasked
8474 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8475 }
8476 unsigned PtrOperandIdx = IsMasked ?
8477 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8478 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8479 Value *PtrOperand = Ops[PtrOperandIdx];
8480 Value *VLOperand = Ops[PtrOperandIdx + 1];
8481 Operands.push_back(PtrOperand);
8482 if (IsMasked)
8483 Operands.push_back(Ops[NF]);
8484 Operands.push_back(VLOperand);
8485 if (IsMasked)
8486 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8487
8488 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8489 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8490 clang::CharUnits Align =
8491 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8492 llvm::Value *V;
8493 for (unsigned I = 0; I < NF; ++I) {
8494 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8495 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8496 }
8497 return V;
8498 }
8499 break;
8500case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tama:
8501case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tama:
8502case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tama:
8503case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tama:
8504 ID = Intrinsic::riscv_vlseg6_mask;
8505 NF = 6;
8506 PolicyAttrs = 3;
8507IsMasked = true;
8508
8509 {
8510 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8511 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8512 SmallVector<llvm::Value*, 12> Operands;
8513
8514 // Please refer to comment under 'defvar NFList' in this file
8515 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8516 (!IsMasked && PolicyAttrs & RVV_VTA))
8517 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8518 else {
8519 if (IsMasked)
8520 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8521 else // Unmasked
8522 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8523 }
8524 unsigned PtrOperandIdx = IsMasked ?
8525 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8526 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8527 Value *PtrOperand = Ops[PtrOperandIdx];
8528 Value *VLOperand = Ops[PtrOperandIdx + 1];
8529 Operands.push_back(PtrOperand);
8530 if (IsMasked)
8531 Operands.push_back(Ops[NF]);
8532 Operands.push_back(VLOperand);
8533 if (IsMasked)
8534 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8535
8536 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8537 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8538 clang::CharUnits Align =
8539 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8540 llvm::Value *V;
8541 for (unsigned I = 0; I < NF; ++I) {
8542 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8543 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8544 }
8545 return V;
8546 }
8547 break;
8548case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tumu:
8549case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tumu:
8550case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tumu:
8551case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tumu:
8552 ID = Intrinsic::riscv_vlseg6_mask;
8553 NF = 6;
8554 PolicyAttrs = 0;
8555IsMasked = true;
8556
8557 {
8558 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8559 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8560 SmallVector<llvm::Value*, 12> Operands;
8561
8562 // Please refer to comment under 'defvar NFList' in this file
8563 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8564 (!IsMasked && PolicyAttrs & RVV_VTA))
8565 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8566 else {
8567 if (IsMasked)
8568 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8569 else // Unmasked
8570 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8571 }
8572 unsigned PtrOperandIdx = IsMasked ?
8573 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8574 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8575 Value *PtrOperand = Ops[PtrOperandIdx];
8576 Value *VLOperand = Ops[PtrOperandIdx + 1];
8577 Operands.push_back(PtrOperand);
8578 if (IsMasked)
8579 Operands.push_back(Ops[NF]);
8580 Operands.push_back(VLOperand);
8581 if (IsMasked)
8582 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8583
8584 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8585 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8586 clang::CharUnits Align =
8587 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8588 llvm::Value *V;
8589 for (unsigned I = 0; I < NF; ++I) {
8590 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8591 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8592 }
8593 return V;
8594 }
8595 break;
8596case RISCVVector::BI__builtin_rvv_vlseg6e8_v_mu:
8597case RISCVVector::BI__builtin_rvv_vlseg6e16_v_mu:
8598case RISCVVector::BI__builtin_rvv_vlseg6e32_v_mu:
8599case RISCVVector::BI__builtin_rvv_vlseg6e64_v_mu:
8600 ID = Intrinsic::riscv_vlseg6_mask;
8601 NF = 6;
8602 PolicyAttrs = 1;
8603IsMasked = true;
8604
8605 {
8606 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8607 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8608 SmallVector<llvm::Value*, 12> Operands;
8609
8610 // Please refer to comment under 'defvar NFList' in this file
8611 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8612 (!IsMasked && PolicyAttrs & RVV_VTA))
8613 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8614 else {
8615 if (IsMasked)
8616 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8617 else // Unmasked
8618 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8619 }
8620 unsigned PtrOperandIdx = IsMasked ?
8621 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8622 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8623 Value *PtrOperand = Ops[PtrOperandIdx];
8624 Value *VLOperand = Ops[PtrOperandIdx + 1];
8625 Operands.push_back(PtrOperand);
8626 if (IsMasked)
8627 Operands.push_back(Ops[NF]);
8628 Operands.push_back(VLOperand);
8629 if (IsMasked)
8630 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8631
8632 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8633 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8634 clang::CharUnits Align =
8635 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8636 llvm::Value *V;
8637 for (unsigned I = 0; I < NF; ++I) {
8638 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8639 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8640 }
8641 return V;
8642 }
8643 break;
8644case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tu:
8645case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tu:
8646case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tu:
8647case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tu:
8648 ID = Intrinsic::riscv_vlseg6ff;
8649 NF = 6;
8650 PolicyAttrs = 2;
8651IsMasked = false;
8652
8653 {
8654 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8655 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8656 SmallVector<llvm::Value*, 12> Operands;
8657
8658 // Please refer to comment under 'defvar NFList' in this file
8659 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8660 (!IsMasked && PolicyAttrs & RVV_VTA))
8661 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8662 else {
8663 if (IsMasked)
8664 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8665 else // Unmasked
8666 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8667 }
8668 unsigned PtrOperandIdx = IsMasked ?
8669 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8670 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8671 Value *PtrOperand = Ops[PtrOperandIdx];
8672 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8673 Value *VLOperand = Ops[PtrOperandIdx + 2];
8674 Operands.push_back(PtrOperand);
8675 if (IsMasked)
8676 Operands.push_back(Ops[NF]);
8677 Operands.push_back(VLOperand);
8678 if (IsMasked)
8679 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8680
8681 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8682 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8683 clang::CharUnits Align =
8684 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8685 for (unsigned I = 0; I < NF; ++I) {
8686 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8687 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8688 }
8689 // Store new_vl.
8690 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8691 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8692 }
8693 break;
8694case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_ta:
8695case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_ta:
8696case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_ta:
8697case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_ta:
8698 ID = Intrinsic::riscv_vlseg6ff;
8699 NF = 6;
8700 PolicyAttrs = 3;
8701IsMasked = false;
8702
8703 {
8704 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8705 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8706 SmallVector<llvm::Value*, 12> Operands;
8707
8708 // Please refer to comment under 'defvar NFList' in this file
8709 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8710 (!IsMasked && PolicyAttrs & RVV_VTA))
8711 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8712 else {
8713 if (IsMasked)
8714 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8715 else // Unmasked
8716 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8717 }
8718 unsigned PtrOperandIdx = IsMasked ?
8719 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8720 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8721 Value *PtrOperand = Ops[PtrOperandIdx];
8722 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8723 Value *VLOperand = Ops[PtrOperandIdx + 2];
8724 Operands.push_back(PtrOperand);
8725 if (IsMasked)
8726 Operands.push_back(Ops[NF]);
8727 Operands.push_back(VLOperand);
8728 if (IsMasked)
8729 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8730
8731 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8732 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8733 clang::CharUnits Align =
8734 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8735 for (unsigned I = 0; I < NF; ++I) {
8736 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8737 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8738 }
8739 // Store new_vl.
8740 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8741 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8742 }
8743 break;
8744case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tum:
8745case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tum:
8746case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tum:
8747case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tum:
8748 ID = Intrinsic::riscv_vlseg6ff_mask;
8749 NF = 6;
8750 PolicyAttrs = 2;
8751IsMasked = true;
8752
8753 {
8754 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8755 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8756 SmallVector<llvm::Value*, 12> Operands;
8757
8758 // Please refer to comment under 'defvar NFList' in this file
8759 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8760 (!IsMasked && PolicyAttrs & RVV_VTA))
8761 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8762 else {
8763 if (IsMasked)
8764 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8765 else // Unmasked
8766 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8767 }
8768 unsigned PtrOperandIdx = IsMasked ?
8769 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8770 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8771 Value *PtrOperand = Ops[PtrOperandIdx];
8772 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8773 Value *VLOperand = Ops[PtrOperandIdx + 2];
8774 Operands.push_back(PtrOperand);
8775 if (IsMasked)
8776 Operands.push_back(Ops[NF]);
8777 Operands.push_back(VLOperand);
8778 if (IsMasked)
8779 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8780
8781 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8782 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8783 clang::CharUnits Align =
8784 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8785 for (unsigned I = 0; I < NF; ++I) {
8786 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8787 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8788 }
8789 // Store new_vl.
8790 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8791 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8792 }
8793 break;
8794case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tama:
8795case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tama:
8796case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tama:
8797case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tama:
8798 ID = Intrinsic::riscv_vlseg6ff_mask;
8799 NF = 6;
8800 PolicyAttrs = 3;
8801IsMasked = true;
8802
8803 {
8804 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8805 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8806 SmallVector<llvm::Value*, 12> Operands;
8807
8808 // Please refer to comment under 'defvar NFList' in this file
8809 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8810 (!IsMasked && PolicyAttrs & RVV_VTA))
8811 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8812 else {
8813 if (IsMasked)
8814 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8815 else // Unmasked
8816 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8817 }
8818 unsigned PtrOperandIdx = IsMasked ?
8819 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8820 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8821 Value *PtrOperand = Ops[PtrOperandIdx];
8822 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8823 Value *VLOperand = Ops[PtrOperandIdx + 2];
8824 Operands.push_back(PtrOperand);
8825 if (IsMasked)
8826 Operands.push_back(Ops[NF]);
8827 Operands.push_back(VLOperand);
8828 if (IsMasked)
8829 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8830
8831 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8832 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8833 clang::CharUnits Align =
8834 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8835 for (unsigned I = 0; I < NF; ++I) {
8836 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8837 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8838 }
8839 // Store new_vl.
8840 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8841 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8842 }
8843 break;
8844case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tumu:
8845case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tumu:
8846case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tumu:
8847case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tumu:
8848 ID = Intrinsic::riscv_vlseg6ff_mask;
8849 NF = 6;
8850 PolicyAttrs = 0;
8851IsMasked = true;
8852
8853 {
8854 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8855 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8856 SmallVector<llvm::Value*, 12> Operands;
8857
8858 // Please refer to comment under 'defvar NFList' in this file
8859 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8860 (!IsMasked && PolicyAttrs & RVV_VTA))
8861 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8862 else {
8863 if (IsMasked)
8864 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8865 else // Unmasked
8866 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8867 }
8868 unsigned PtrOperandIdx = IsMasked ?
8869 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8870 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8871 Value *PtrOperand = Ops[PtrOperandIdx];
8872 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8873 Value *VLOperand = Ops[PtrOperandIdx + 2];
8874 Operands.push_back(PtrOperand);
8875 if (IsMasked)
8876 Operands.push_back(Ops[NF]);
8877 Operands.push_back(VLOperand);
8878 if (IsMasked)
8879 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8880
8881 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8882 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8883 clang::CharUnits Align =
8884 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8885 for (unsigned I = 0; I < NF; ++I) {
8886 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8887 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8888 }
8889 // Store new_vl.
8890 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8891 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8892 }
8893 break;
8894case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_mu:
8895case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_mu:
8896case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_mu:
8897case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_mu:
8898 ID = Intrinsic::riscv_vlseg6ff_mask;
8899 NF = 6;
8900 PolicyAttrs = 1;
8901IsMasked = true;
8902
8903 {
8904 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8905 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8906 SmallVector<llvm::Value*, 12> Operands;
8907
8908 // Please refer to comment under 'defvar NFList' in this file
8909 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8910 (!IsMasked && PolicyAttrs & RVV_VTA))
8911 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8912 else {
8913 if (IsMasked)
8914 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8915 else // Unmasked
8916 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8917 }
8918 unsigned PtrOperandIdx = IsMasked ?
8919 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8920 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8921 Value *PtrOperand = Ops[PtrOperandIdx];
8922 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8923 Value *VLOperand = Ops[PtrOperandIdx + 2];
8924 Operands.push_back(PtrOperand);
8925 if (IsMasked)
8926 Operands.push_back(Ops[NF]);
8927 Operands.push_back(VLOperand);
8928 if (IsMasked)
8929 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8930
8931 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8932 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8933 clang::CharUnits Align =
8934 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8935 for (unsigned I = 0; I < NF; ++I) {
8936 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8937 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8938 }
8939 // Store new_vl.
8940 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8941 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8942 }
8943 break;
8944case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tu:
8945case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tu:
8946case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tu:
8947case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tu:
8948 ID = Intrinsic::riscv_vlseg7;
8949 NF = 7;
8950 PolicyAttrs = 2;
8951IsMasked = false;
8952
8953 {
8954 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8955 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8956 SmallVector<llvm::Value*, 12> Operands;
8957
8958 // Please refer to comment under 'defvar NFList' in this file
8959 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8960 (!IsMasked && PolicyAttrs & RVV_VTA))
8961 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8962 else {
8963 if (IsMasked)
8964 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8965 else // Unmasked
8966 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8967 }
8968 unsigned PtrOperandIdx = IsMasked ?
8969 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8970 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8971 Value *PtrOperand = Ops[PtrOperandIdx];
8972 Value *VLOperand = Ops[PtrOperandIdx + 1];
8973 Operands.push_back(PtrOperand);
8974 if (IsMasked)
8975 Operands.push_back(Ops[NF]);
8976 Operands.push_back(VLOperand);
8977 if (IsMasked)
8978 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8979
8980 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8981 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8982 clang::CharUnits Align =
8983 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8984 llvm::Value *V;
8985 for (unsigned I = 0; I < NF; ++I) {
8986 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8987 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8988 }
8989 return V;
8990 }
8991 break;
8992case RISCVVector::BI__builtin_rvv_vlseg7e8_v_ta:
8993case RISCVVector::BI__builtin_rvv_vlseg7e16_v_ta:
8994case RISCVVector::BI__builtin_rvv_vlseg7e32_v_ta:
8995case RISCVVector::BI__builtin_rvv_vlseg7e64_v_ta:
8996 ID = Intrinsic::riscv_vlseg7;
8997 NF = 7;
8998 PolicyAttrs = 3;
8999IsMasked = false;
9000
9001 {
9002 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9003 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9004 SmallVector<llvm::Value*, 12> Operands;
9005
9006 // Please refer to comment under 'defvar NFList' in this file
9007 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9008 (!IsMasked && PolicyAttrs & RVV_VTA))
9009 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9010 else {
9011 if (IsMasked)
9012 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9013 else // Unmasked
9014 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9015 }
9016 unsigned PtrOperandIdx = IsMasked ?
9017 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9018 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9019 Value *PtrOperand = Ops[PtrOperandIdx];
9020 Value *VLOperand = Ops[PtrOperandIdx + 1];
9021 Operands.push_back(PtrOperand);
9022 if (IsMasked)
9023 Operands.push_back(Ops[NF]);
9024 Operands.push_back(VLOperand);
9025 if (IsMasked)
9026 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9027
9028 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9029 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9030 clang::CharUnits Align =
9031 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9032 llvm::Value *V;
9033 for (unsigned I = 0; I < NF; ++I) {
9034 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9035 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9036 }
9037 return V;
9038 }
9039 break;
9040case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tum:
9041case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tum:
9042case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tum:
9043case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tum:
9044 ID = Intrinsic::riscv_vlseg7_mask;
9045 NF = 7;
9046 PolicyAttrs = 2;
9047IsMasked = true;
9048
9049 {
9050 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9051 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9052 SmallVector<llvm::Value*, 12> Operands;
9053
9054 // Please refer to comment under 'defvar NFList' in this file
9055 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9056 (!IsMasked && PolicyAttrs & RVV_VTA))
9057 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9058 else {
9059 if (IsMasked)
9060 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9061 else // Unmasked
9062 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9063 }
9064 unsigned PtrOperandIdx = IsMasked ?
9065 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9066 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9067 Value *PtrOperand = Ops[PtrOperandIdx];
9068 Value *VLOperand = Ops[PtrOperandIdx + 1];
9069 Operands.push_back(PtrOperand);
9070 if (IsMasked)
9071 Operands.push_back(Ops[NF]);
9072 Operands.push_back(VLOperand);
9073 if (IsMasked)
9074 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9075
9076 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9077 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9078 clang::CharUnits Align =
9079 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9080 llvm::Value *V;
9081 for (unsigned I = 0; I < NF; ++I) {
9082 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9083 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9084 }
9085 return V;
9086 }
9087 break;
9088case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tama:
9089case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tama:
9090case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tama:
9091case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tama:
9092 ID = Intrinsic::riscv_vlseg7_mask;
9093 NF = 7;
9094 PolicyAttrs = 3;
9095IsMasked = true;
9096
9097 {
9098 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9099 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9100 SmallVector<llvm::Value*, 12> Operands;
9101
9102 // Please refer to comment under 'defvar NFList' in this file
9103 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9104 (!IsMasked && PolicyAttrs & RVV_VTA))
9105 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9106 else {
9107 if (IsMasked)
9108 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9109 else // Unmasked
9110 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9111 }
9112 unsigned PtrOperandIdx = IsMasked ?
9113 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9114 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9115 Value *PtrOperand = Ops[PtrOperandIdx];
9116 Value *VLOperand = Ops[PtrOperandIdx + 1];
9117 Operands.push_back(PtrOperand);
9118 if (IsMasked)
9119 Operands.push_back(Ops[NF]);
9120 Operands.push_back(VLOperand);
9121 if (IsMasked)
9122 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9123
9124 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9125 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9126 clang::CharUnits Align =
9127 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9128 llvm::Value *V;
9129 for (unsigned I = 0; I < NF; ++I) {
9130 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9131 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9132 }
9133 return V;
9134 }
9135 break;
9136case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tumu:
9137case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tumu:
9138case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tumu:
9139case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tumu:
9140 ID = Intrinsic::riscv_vlseg7_mask;
9141 NF = 7;
9142 PolicyAttrs = 0;
9143IsMasked = true;
9144
9145 {
9146 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9147 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9148 SmallVector<llvm::Value*, 12> Operands;
9149
9150 // Please refer to comment under 'defvar NFList' in this file
9151 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9152 (!IsMasked && PolicyAttrs & RVV_VTA))
9153 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9154 else {
9155 if (IsMasked)
9156 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9157 else // Unmasked
9158 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9159 }
9160 unsigned PtrOperandIdx = IsMasked ?
9161 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9162 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9163 Value *PtrOperand = Ops[PtrOperandIdx];
9164 Value *VLOperand = Ops[PtrOperandIdx + 1];
9165 Operands.push_back(PtrOperand);
9166 if (IsMasked)
9167 Operands.push_back(Ops[NF]);
9168 Operands.push_back(VLOperand);
9169 if (IsMasked)
9170 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9171
9172 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9173 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9174 clang::CharUnits Align =
9175 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9176 llvm::Value *V;
9177 for (unsigned I = 0; I < NF; ++I) {
9178 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9179 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9180 }
9181 return V;
9182 }
9183 break;
9184case RISCVVector::BI__builtin_rvv_vlseg7e8_v_mu:
9185case RISCVVector::BI__builtin_rvv_vlseg7e16_v_mu:
9186case RISCVVector::BI__builtin_rvv_vlseg7e32_v_mu:
9187case RISCVVector::BI__builtin_rvv_vlseg7e64_v_mu:
9188 ID = Intrinsic::riscv_vlseg7_mask;
9189 NF = 7;
9190 PolicyAttrs = 1;
9191IsMasked = true;
9192
9193 {
9194 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9195 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9196 SmallVector<llvm::Value*, 12> Operands;
9197
9198 // Please refer to comment under 'defvar NFList' in this file
9199 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9200 (!IsMasked && PolicyAttrs & RVV_VTA))
9201 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9202 else {
9203 if (IsMasked)
9204 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9205 else // Unmasked
9206 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9207 }
9208 unsigned PtrOperandIdx = IsMasked ?
9209 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9210 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9211 Value *PtrOperand = Ops[PtrOperandIdx];
9212 Value *VLOperand = Ops[PtrOperandIdx + 1];
9213 Operands.push_back(PtrOperand);
9214 if (IsMasked)
9215 Operands.push_back(Ops[NF]);
9216 Operands.push_back(VLOperand);
9217 if (IsMasked)
9218 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9219
9220 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9221 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9222 clang::CharUnits Align =
9223 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9224 llvm::Value *V;
9225 for (unsigned I = 0; I < NF; ++I) {
9226 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9227 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9228 }
9229 return V;
9230 }
9231 break;
9232case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tu:
9233case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tu:
9234case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tu:
9235case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tu:
9236 ID = Intrinsic::riscv_vlseg7ff;
9237 NF = 7;
9238 PolicyAttrs = 2;
9239IsMasked = false;
9240
9241 {
9242 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9243 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9244 SmallVector<llvm::Value*, 12> Operands;
9245
9246 // Please refer to comment under 'defvar NFList' in this file
9247 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9248 (!IsMasked && PolicyAttrs & RVV_VTA))
9249 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9250 else {
9251 if (IsMasked)
9252 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9253 else // Unmasked
9254 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9255 }
9256 unsigned PtrOperandIdx = IsMasked ?
9257 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9258 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9259 Value *PtrOperand = Ops[PtrOperandIdx];
9260 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9261 Value *VLOperand = Ops[PtrOperandIdx + 2];
9262 Operands.push_back(PtrOperand);
9263 if (IsMasked)
9264 Operands.push_back(Ops[NF]);
9265 Operands.push_back(VLOperand);
9266 if (IsMasked)
9267 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9268
9269 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9270 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9271 clang::CharUnits Align =
9272 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9273 for (unsigned I = 0; I < NF; ++I) {
9274 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9275 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9276 }
9277 // Store new_vl.
9278 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9279 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9280 }
9281 break;
9282case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_ta:
9283case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_ta:
9284case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_ta:
9285case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_ta:
9286 ID = Intrinsic::riscv_vlseg7ff;
9287 NF = 7;
9288 PolicyAttrs = 3;
9289IsMasked = false;
9290
9291 {
9292 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9293 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9294 SmallVector<llvm::Value*, 12> Operands;
9295
9296 // Please refer to comment under 'defvar NFList' in this file
9297 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9298 (!IsMasked && PolicyAttrs & RVV_VTA))
9299 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9300 else {
9301 if (IsMasked)
9302 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9303 else // Unmasked
9304 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9305 }
9306 unsigned PtrOperandIdx = IsMasked ?
9307 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9308 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9309 Value *PtrOperand = Ops[PtrOperandIdx];
9310 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9311 Value *VLOperand = Ops[PtrOperandIdx + 2];
9312 Operands.push_back(PtrOperand);
9313 if (IsMasked)
9314 Operands.push_back(Ops[NF]);
9315 Operands.push_back(VLOperand);
9316 if (IsMasked)
9317 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9318
9319 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9320 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9321 clang::CharUnits Align =
9322 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9323 for (unsigned I = 0; I < NF; ++I) {
9324 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9325 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9326 }
9327 // Store new_vl.
9328 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9329 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9330 }
9331 break;
9332case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tum:
9333case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tum:
9334case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tum:
9335case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tum:
9336 ID = Intrinsic::riscv_vlseg7ff_mask;
9337 NF = 7;
9338 PolicyAttrs = 2;
9339IsMasked = true;
9340
9341 {
9342 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9343 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9344 SmallVector<llvm::Value*, 12> Operands;
9345
9346 // Please refer to comment under 'defvar NFList' in this file
9347 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9348 (!IsMasked && PolicyAttrs & RVV_VTA))
9349 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9350 else {
9351 if (IsMasked)
9352 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9353 else // Unmasked
9354 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9355 }
9356 unsigned PtrOperandIdx = IsMasked ?
9357 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9358 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9359 Value *PtrOperand = Ops[PtrOperandIdx];
9360 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9361 Value *VLOperand = Ops[PtrOperandIdx + 2];
9362 Operands.push_back(PtrOperand);
9363 if (IsMasked)
9364 Operands.push_back(Ops[NF]);
9365 Operands.push_back(VLOperand);
9366 if (IsMasked)
9367 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9368
9369 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9370 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9371 clang::CharUnits Align =
9372 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9373 for (unsigned I = 0; I < NF; ++I) {
9374 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9375 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9376 }
9377 // Store new_vl.
9378 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9379 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9380 }
9381 break;
9382case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tama:
9383case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tama:
9384case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tama:
9385case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tama:
9386 ID = Intrinsic::riscv_vlseg7ff_mask;
9387 NF = 7;
9388 PolicyAttrs = 3;
9389IsMasked = true;
9390
9391 {
9392 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9393 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9394 SmallVector<llvm::Value*, 12> Operands;
9395
9396 // Please refer to comment under 'defvar NFList' in this file
9397 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9398 (!IsMasked && PolicyAttrs & RVV_VTA))
9399 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9400 else {
9401 if (IsMasked)
9402 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9403 else // Unmasked
9404 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9405 }
9406 unsigned PtrOperandIdx = IsMasked ?
9407 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9408 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9409 Value *PtrOperand = Ops[PtrOperandIdx];
9410 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9411 Value *VLOperand = Ops[PtrOperandIdx + 2];
9412 Operands.push_back(PtrOperand);
9413 if (IsMasked)
9414 Operands.push_back(Ops[NF]);
9415 Operands.push_back(VLOperand);
9416 if (IsMasked)
9417 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9418
9419 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9420 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9421 clang::CharUnits Align =
9422 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9423 for (unsigned I = 0; I < NF; ++I) {
9424 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9425 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9426 }
9427 // Store new_vl.
9428 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9429 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9430 }
9431 break;
9432case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tumu:
9433case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tumu:
9434case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tumu:
9435case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tumu:
9436 ID = Intrinsic::riscv_vlseg7ff_mask;
9437 NF = 7;
9438 PolicyAttrs = 0;
9439IsMasked = true;
9440
9441 {
9442 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9443 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9444 SmallVector<llvm::Value*, 12> Operands;
9445
9446 // Please refer to comment under 'defvar NFList' in this file
9447 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9448 (!IsMasked && PolicyAttrs & RVV_VTA))
9449 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9450 else {
9451 if (IsMasked)
9452 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9453 else // Unmasked
9454 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9455 }
9456 unsigned PtrOperandIdx = IsMasked ?
9457 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9458 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9459 Value *PtrOperand = Ops[PtrOperandIdx];
9460 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9461 Value *VLOperand = Ops[PtrOperandIdx + 2];
9462 Operands.push_back(PtrOperand);
9463 if (IsMasked)
9464 Operands.push_back(Ops[NF]);
9465 Operands.push_back(VLOperand);
9466 if (IsMasked)
9467 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9468
9469 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9470 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9471 clang::CharUnits Align =
9472 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9473 for (unsigned I = 0; I < NF; ++I) {
9474 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9475 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9476 }
9477 // Store new_vl.
9478 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9479 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9480 }
9481 break;
9482case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_mu:
9483case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_mu:
9484case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_mu:
9485case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_mu:
9486 ID = Intrinsic::riscv_vlseg7ff_mask;
9487 NF = 7;
9488 PolicyAttrs = 1;
9489IsMasked = true;
9490
9491 {
9492 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9493 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9494 SmallVector<llvm::Value*, 12> Operands;
9495
9496 // Please refer to comment under 'defvar NFList' in this file
9497 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9498 (!IsMasked && PolicyAttrs & RVV_VTA))
9499 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9500 else {
9501 if (IsMasked)
9502 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9503 else // Unmasked
9504 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9505 }
9506 unsigned PtrOperandIdx = IsMasked ?
9507 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9508 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9509 Value *PtrOperand = Ops[PtrOperandIdx];
9510 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9511 Value *VLOperand = Ops[PtrOperandIdx + 2];
9512 Operands.push_back(PtrOperand);
9513 if (IsMasked)
9514 Operands.push_back(Ops[NF]);
9515 Operands.push_back(VLOperand);
9516 if (IsMasked)
9517 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9518
9519 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9520 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9521 clang::CharUnits Align =
9522 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9523 for (unsigned I = 0; I < NF; ++I) {
9524 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9525 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9526 }
9527 // Store new_vl.
9528 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9529 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9530 }
9531 break;
9532case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tu:
9533case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tu:
9534case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tu:
9535case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tu:
9536 ID = Intrinsic::riscv_vlseg8;
9537 NF = 8;
9538 PolicyAttrs = 2;
9539IsMasked = false;
9540
9541 {
9542 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9543 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9544 SmallVector<llvm::Value*, 12> Operands;
9545
9546 // Please refer to comment under 'defvar NFList' in this file
9547 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9548 (!IsMasked && PolicyAttrs & RVV_VTA))
9549 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9550 else {
9551 if (IsMasked)
9552 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9553 else // Unmasked
9554 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9555 }
9556 unsigned PtrOperandIdx = IsMasked ?
9557 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9558 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9559 Value *PtrOperand = Ops[PtrOperandIdx];
9560 Value *VLOperand = Ops[PtrOperandIdx + 1];
9561 Operands.push_back(PtrOperand);
9562 if (IsMasked)
9563 Operands.push_back(Ops[NF]);
9564 Operands.push_back(VLOperand);
9565 if (IsMasked)
9566 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9567
9568 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9569 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9570 clang::CharUnits Align =
9571 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9572 llvm::Value *V;
9573 for (unsigned I = 0; I < NF; ++I) {
9574 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9575 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9576 }
9577 return V;
9578 }
9579 break;
9580case RISCVVector::BI__builtin_rvv_vlseg8e8_v_ta:
9581case RISCVVector::BI__builtin_rvv_vlseg8e16_v_ta:
9582case RISCVVector::BI__builtin_rvv_vlseg8e32_v_ta:
9583case RISCVVector::BI__builtin_rvv_vlseg8e64_v_ta:
9584 ID = Intrinsic::riscv_vlseg8;
9585 NF = 8;
9586 PolicyAttrs = 3;
9587IsMasked = false;
9588
9589 {
9590 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9591 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9592 SmallVector<llvm::Value*, 12> Operands;
9593
9594 // Please refer to comment under 'defvar NFList' in this file
9595 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9596 (!IsMasked && PolicyAttrs & RVV_VTA))
9597 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9598 else {
9599 if (IsMasked)
9600 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9601 else // Unmasked
9602 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9603 }
9604 unsigned PtrOperandIdx = IsMasked ?
9605 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9606 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9607 Value *PtrOperand = Ops[PtrOperandIdx];
9608 Value *VLOperand = Ops[PtrOperandIdx + 1];
9609 Operands.push_back(PtrOperand);
9610 if (IsMasked)
9611 Operands.push_back(Ops[NF]);
9612 Operands.push_back(VLOperand);
9613 if (IsMasked)
9614 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9615
9616 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9617 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9618 clang::CharUnits Align =
9619 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9620 llvm::Value *V;
9621 for (unsigned I = 0; I < NF; ++I) {
9622 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9623 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9624 }
9625 return V;
9626 }
9627 break;
9628case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tum:
9629case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tum:
9630case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tum:
9631case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tum:
9632 ID = Intrinsic::riscv_vlseg8_mask;
9633 NF = 8;
9634 PolicyAttrs = 2;
9635IsMasked = true;
9636
9637 {
9638 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9639 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9640 SmallVector<llvm::Value*, 12> Operands;
9641
9642 // Please refer to comment under 'defvar NFList' in this file
9643 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9644 (!IsMasked && PolicyAttrs & RVV_VTA))
9645 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9646 else {
9647 if (IsMasked)
9648 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9649 else // Unmasked
9650 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9651 }
9652 unsigned PtrOperandIdx = IsMasked ?
9653 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9654 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9655 Value *PtrOperand = Ops[PtrOperandIdx];
9656 Value *VLOperand = Ops[PtrOperandIdx + 1];
9657 Operands.push_back(PtrOperand);
9658 if (IsMasked)
9659 Operands.push_back(Ops[NF]);
9660 Operands.push_back(VLOperand);
9661 if (IsMasked)
9662 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9663
9664 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9665 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9666 clang::CharUnits Align =
9667 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9668 llvm::Value *V;
9669 for (unsigned I = 0; I < NF; ++I) {
9670 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9671 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9672 }
9673 return V;
9674 }
9675 break;
9676case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tama:
9677case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tama:
9678case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tama:
9679case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tama:
9680 ID = Intrinsic::riscv_vlseg8_mask;
9681 NF = 8;
9682 PolicyAttrs = 3;
9683IsMasked = true;
9684
9685 {
9686 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9687 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9688 SmallVector<llvm::Value*, 12> Operands;
9689
9690 // Please refer to comment under 'defvar NFList' in this file
9691 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9692 (!IsMasked && PolicyAttrs & RVV_VTA))
9693 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9694 else {
9695 if (IsMasked)
9696 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9697 else // Unmasked
9698 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9699 }
9700 unsigned PtrOperandIdx = IsMasked ?
9701 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9702 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9703 Value *PtrOperand = Ops[PtrOperandIdx];
9704 Value *VLOperand = Ops[PtrOperandIdx + 1];
9705 Operands.push_back(PtrOperand);
9706 if (IsMasked)
9707 Operands.push_back(Ops[NF]);
9708 Operands.push_back(VLOperand);
9709 if (IsMasked)
9710 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9711
9712 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9713 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9714 clang::CharUnits Align =
9715 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9716 llvm::Value *V;
9717 for (unsigned I = 0; I < NF; ++I) {
9718 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9719 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9720 }
9721 return V;
9722 }
9723 break;
9724case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tumu:
9725case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tumu:
9726case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tumu:
9727case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tumu:
9728 ID = Intrinsic::riscv_vlseg8_mask;
9729 NF = 8;
9730 PolicyAttrs = 0;
9731IsMasked = true;
9732
9733 {
9734 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9735 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9736 SmallVector<llvm::Value*, 12> Operands;
9737
9738 // Please refer to comment under 'defvar NFList' in this file
9739 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9740 (!IsMasked && PolicyAttrs & RVV_VTA))
9741 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9742 else {
9743 if (IsMasked)
9744 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9745 else // Unmasked
9746 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9747 }
9748 unsigned PtrOperandIdx = IsMasked ?
9749 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9750 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9751 Value *PtrOperand = Ops[PtrOperandIdx];
9752 Value *VLOperand = Ops[PtrOperandIdx + 1];
9753 Operands.push_back(PtrOperand);
9754 if (IsMasked)
9755 Operands.push_back(Ops[NF]);
9756 Operands.push_back(VLOperand);
9757 if (IsMasked)
9758 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9759
9760 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9761 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9762 clang::CharUnits Align =
9763 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9764 llvm::Value *V;
9765 for (unsigned I = 0; I < NF; ++I) {
9766 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9767 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9768 }
9769 return V;
9770 }
9771 break;
9772case RISCVVector::BI__builtin_rvv_vlseg8e8_v_mu:
9773case RISCVVector::BI__builtin_rvv_vlseg8e16_v_mu:
9774case RISCVVector::BI__builtin_rvv_vlseg8e32_v_mu:
9775case RISCVVector::BI__builtin_rvv_vlseg8e64_v_mu:
9776 ID = Intrinsic::riscv_vlseg8_mask;
9777 NF = 8;
9778 PolicyAttrs = 1;
9779IsMasked = true;
9780
9781 {
9782 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9783 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9784 SmallVector<llvm::Value*, 12> Operands;
9785
9786 // Please refer to comment under 'defvar NFList' in this file
9787 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9788 (!IsMasked && PolicyAttrs & RVV_VTA))
9789 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9790 else {
9791 if (IsMasked)
9792 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9793 else // Unmasked
9794 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9795 }
9796 unsigned PtrOperandIdx = IsMasked ?
9797 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9798 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9799 Value *PtrOperand = Ops[PtrOperandIdx];
9800 Value *VLOperand = Ops[PtrOperandIdx + 1];
9801 Operands.push_back(PtrOperand);
9802 if (IsMasked)
9803 Operands.push_back(Ops[NF]);
9804 Operands.push_back(VLOperand);
9805 if (IsMasked)
9806 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9807
9808 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9809 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9810 clang::CharUnits Align =
9811 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9812 llvm::Value *V;
9813 for (unsigned I = 0; I < NF; ++I) {
9814 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9815 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9816 }
9817 return V;
9818 }
9819 break;
9820case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tu:
9821case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tu:
9822case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tu:
9823case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tu:
9824 ID = Intrinsic::riscv_vlseg8ff;
9825 NF = 8;
9826 PolicyAttrs = 2;
9827IsMasked = false;
9828
9829 {
9830 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9831 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9832 SmallVector<llvm::Value*, 12> Operands;
9833
9834 // Please refer to comment under 'defvar NFList' in this file
9835 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9836 (!IsMasked && PolicyAttrs & RVV_VTA))
9837 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9838 else {
9839 if (IsMasked)
9840 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9841 else // Unmasked
9842 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9843 }
9844 unsigned PtrOperandIdx = IsMasked ?
9845 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9846 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9847 Value *PtrOperand = Ops[PtrOperandIdx];
9848 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9849 Value *VLOperand = Ops[PtrOperandIdx + 2];
9850 Operands.push_back(PtrOperand);
9851 if (IsMasked)
9852 Operands.push_back(Ops[NF]);
9853 Operands.push_back(VLOperand);
9854 if (IsMasked)
9855 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9856
9857 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9858 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9859 clang::CharUnits Align =
9860 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9861 for (unsigned I = 0; I < NF; ++I) {
9862 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9863 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9864 }
9865 // Store new_vl.
9866 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9867 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9868 }
9869 break;
9870case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_ta:
9871case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_ta:
9872case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_ta:
9873case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_ta:
9874 ID = Intrinsic::riscv_vlseg8ff;
9875 NF = 8;
9876 PolicyAttrs = 3;
9877IsMasked = false;
9878
9879 {
9880 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9881 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9882 SmallVector<llvm::Value*, 12> Operands;
9883
9884 // Please refer to comment under 'defvar NFList' in this file
9885 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9886 (!IsMasked && PolicyAttrs & RVV_VTA))
9887 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9888 else {
9889 if (IsMasked)
9890 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9891 else // Unmasked
9892 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9893 }
9894 unsigned PtrOperandIdx = IsMasked ?
9895 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9896 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9897 Value *PtrOperand = Ops[PtrOperandIdx];
9898 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9899 Value *VLOperand = Ops[PtrOperandIdx + 2];
9900 Operands.push_back(PtrOperand);
9901 if (IsMasked)
9902 Operands.push_back(Ops[NF]);
9903 Operands.push_back(VLOperand);
9904 if (IsMasked)
9905 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9906
9907 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9908 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9909 clang::CharUnits Align =
9910 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9911 for (unsigned I = 0; I < NF; ++I) {
9912 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9913 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9914 }
9915 // Store new_vl.
9916 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9917 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9918 }
9919 break;
9920case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tum:
9921case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tum:
9922case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tum:
9923case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tum:
9924 ID = Intrinsic::riscv_vlseg8ff_mask;
9925 NF = 8;
9926 PolicyAttrs = 2;
9927IsMasked = true;
9928
9929 {
9930 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9931 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9932 SmallVector<llvm::Value*, 12> Operands;
9933
9934 // Please refer to comment under 'defvar NFList' in this file
9935 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9936 (!IsMasked && PolicyAttrs & RVV_VTA))
9937 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9938 else {
9939 if (IsMasked)
9940 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9941 else // Unmasked
9942 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9943 }
9944 unsigned PtrOperandIdx = IsMasked ?
9945 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9946 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9947 Value *PtrOperand = Ops[PtrOperandIdx];
9948 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9949 Value *VLOperand = Ops[PtrOperandIdx + 2];
9950 Operands.push_back(PtrOperand);
9951 if (IsMasked)
9952 Operands.push_back(Ops[NF]);
9953 Operands.push_back(VLOperand);
9954 if (IsMasked)
9955 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9956
9957 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9958 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9959 clang::CharUnits Align =
9960 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9961 for (unsigned I = 0; I < NF; ++I) {
9962 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9963 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9964 }
9965 // Store new_vl.
9966 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9967 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9968 }
9969 break;
9970case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tama:
9971case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tama:
9972case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tama:
9973case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tama:
9974 ID = Intrinsic::riscv_vlseg8ff_mask;
9975 NF = 8;
9976 PolicyAttrs = 3;
9977IsMasked = true;
9978
9979 {
9980 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9981 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9982 SmallVector<llvm::Value*, 12> Operands;
9983
9984 // Please refer to comment under 'defvar NFList' in this file
9985 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9986 (!IsMasked && PolicyAttrs & RVV_VTA))
9987 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9988 else {
9989 if (IsMasked)
9990 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9991 else // Unmasked
9992 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9993 }
9994 unsigned PtrOperandIdx = IsMasked ?
9995 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9996 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9997 Value *PtrOperand = Ops[PtrOperandIdx];
9998 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9999 Value *VLOperand = Ops[PtrOperandIdx + 2];
10000 Operands.push_back(PtrOperand);
10001 if (IsMasked)
10002 Operands.push_back(Ops[NF]);
10003 Operands.push_back(VLOperand);
10004 if (IsMasked)
10005 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10006
10007 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10008 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10009 clang::CharUnits Align =
10010 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10011 for (unsigned I = 0; I < NF; ++I) {
10012 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10013 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10014 }
10015 // Store new_vl.
10016 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
10017 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
10018 }
10019 break;
10020case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tumu:
10021case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tumu:
10022case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tumu:
10023case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tumu:
10024 ID = Intrinsic::riscv_vlseg8ff_mask;
10025 NF = 8;
10026 PolicyAttrs = 0;
10027IsMasked = true;
10028
10029 {
10030 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10031 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10032 SmallVector<llvm::Value*, 12> Operands;
10033
10034 // Please refer to comment under 'defvar NFList' in this file
10035 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10036 (!IsMasked && PolicyAttrs & RVV_VTA))
10037 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10038 else {
10039 if (IsMasked)
10040 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10041 else // Unmasked
10042 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10043 }
10044 unsigned PtrOperandIdx = IsMasked ?
10045 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10046 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10047 Value *PtrOperand = Ops[PtrOperandIdx];
10048 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
10049 Value *VLOperand = Ops[PtrOperandIdx + 2];
10050 Operands.push_back(PtrOperand);
10051 if (IsMasked)
10052 Operands.push_back(Ops[NF]);
10053 Operands.push_back(VLOperand);
10054 if (IsMasked)
10055 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10056
10057 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10058 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10059 clang::CharUnits Align =
10060 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10061 for (unsigned I = 0; I < NF; ++I) {
10062 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10063 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10064 }
10065 // Store new_vl.
10066 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
10067 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
10068 }
10069 break;
10070case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_mu:
10071case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_mu:
10072case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_mu:
10073case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_mu:
10074 ID = Intrinsic::riscv_vlseg8ff_mask;
10075 NF = 8;
10076 PolicyAttrs = 1;
10077IsMasked = true;
10078
10079 {
10080 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10081 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10082 SmallVector<llvm::Value*, 12> Operands;
10083
10084 // Please refer to comment under 'defvar NFList' in this file
10085 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10086 (!IsMasked && PolicyAttrs & RVV_VTA))
10087 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10088 else {
10089 if (IsMasked)
10090 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10091 else // Unmasked
10092 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10093 }
10094 unsigned PtrOperandIdx = IsMasked ?
10095 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10096 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10097 Value *PtrOperand = Ops[PtrOperandIdx];
10098 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
10099 Value *VLOperand = Ops[PtrOperandIdx + 2];
10100 Operands.push_back(PtrOperand);
10101 if (IsMasked)
10102 Operands.push_back(Ops[NF]);
10103 Operands.push_back(VLOperand);
10104 if (IsMasked)
10105 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10106
10107 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10108 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10109 clang::CharUnits Align =
10110 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10111 for (unsigned I = 0; I < NF; ++I) {
10112 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10113 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10114 }
10115 // Store new_vl.
10116 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
10117 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
10118 }
10119 break;
10120case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tu:
10121case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tu:
10122case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tu:
10123case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tu:
10124 ID = Intrinsic::riscv_vlsseg2;
10125 NF = 2;
10126 PolicyAttrs = 2;
10127IsMasked = false;
10128
10129 {
10130 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10131 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10132 SmallVector<llvm::Value*, 12> Operands;
10133
10134 // Please refer to comment under 'defvar NFList' in this file
10135 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10136 (!IsMasked && PolicyAttrs & RVV_VTA))
10137 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10138 else {
10139 if (IsMasked)
10140 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10141 else // Unmasked
10142 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10143 }
10144 unsigned PtrOperandIdx = IsMasked ?
10145 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10146 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10147 Value *PtrOperand = Ops[PtrOperandIdx];
10148 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10149 Value *VLOperand = Ops[PtrOperandIdx + 2];
10150 Operands.push_back(PtrOperand);
10151 Operands.push_back(StrideOperand);
10152 if (IsMasked)
10153 Operands.push_back(Ops[NF]);
10154 Operands.push_back(VLOperand);
10155 if (IsMasked)
10156 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10157
10158 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10159 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10160 clang::CharUnits Align =
10161 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10162 llvm::Value *V;
10163 for (unsigned I = 0; I < NF; ++I) {
10164 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10165 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10166 }
10167 return V;
10168 }
10169 break;
10170case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_ta:
10171case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_ta:
10172case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_ta:
10173case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_ta:
10174 ID = Intrinsic::riscv_vlsseg2;
10175 NF = 2;
10176 PolicyAttrs = 3;
10177IsMasked = false;
10178
10179 {
10180 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10181 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10182 SmallVector<llvm::Value*, 12> Operands;
10183
10184 // Please refer to comment under 'defvar NFList' in this file
10185 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10186 (!IsMasked && PolicyAttrs & RVV_VTA))
10187 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10188 else {
10189 if (IsMasked)
10190 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10191 else // Unmasked
10192 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10193 }
10194 unsigned PtrOperandIdx = IsMasked ?
10195 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10196 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10197 Value *PtrOperand = Ops[PtrOperandIdx];
10198 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10199 Value *VLOperand = Ops[PtrOperandIdx + 2];
10200 Operands.push_back(PtrOperand);
10201 Operands.push_back(StrideOperand);
10202 if (IsMasked)
10203 Operands.push_back(Ops[NF]);
10204 Operands.push_back(VLOperand);
10205 if (IsMasked)
10206 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10207
10208 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10209 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10210 clang::CharUnits Align =
10211 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10212 llvm::Value *V;
10213 for (unsigned I = 0; I < NF; ++I) {
10214 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10215 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10216 }
10217 return V;
10218 }
10219 break;
10220case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tum:
10221case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tum:
10222case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tum:
10223case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tum:
10224 ID = Intrinsic::riscv_vlsseg2_mask;
10225 NF = 2;
10226 PolicyAttrs = 2;
10227IsMasked = true;
10228
10229 {
10230 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10231 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10232 SmallVector<llvm::Value*, 12> Operands;
10233
10234 // Please refer to comment under 'defvar NFList' in this file
10235 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10236 (!IsMasked && PolicyAttrs & RVV_VTA))
10237 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10238 else {
10239 if (IsMasked)
10240 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10241 else // Unmasked
10242 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10243 }
10244 unsigned PtrOperandIdx = IsMasked ?
10245 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10246 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10247 Value *PtrOperand = Ops[PtrOperandIdx];
10248 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10249 Value *VLOperand = Ops[PtrOperandIdx + 2];
10250 Operands.push_back(PtrOperand);
10251 Operands.push_back(StrideOperand);
10252 if (IsMasked)
10253 Operands.push_back(Ops[NF]);
10254 Operands.push_back(VLOperand);
10255 if (IsMasked)
10256 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10257
10258 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10259 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10260 clang::CharUnits Align =
10261 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10262 llvm::Value *V;
10263 for (unsigned I = 0; I < NF; ++I) {
10264 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10265 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10266 }
10267 return V;
10268 }
10269 break;
10270case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tama:
10271case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tama:
10272case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tama:
10273case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tama:
10274 ID = Intrinsic::riscv_vlsseg2_mask;
10275 NF = 2;
10276 PolicyAttrs = 3;
10277IsMasked = true;
10278
10279 {
10280 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10281 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10282 SmallVector<llvm::Value*, 12> Operands;
10283
10284 // Please refer to comment under 'defvar NFList' in this file
10285 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10286 (!IsMasked && PolicyAttrs & RVV_VTA))
10287 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10288 else {
10289 if (IsMasked)
10290 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10291 else // Unmasked
10292 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10293 }
10294 unsigned PtrOperandIdx = IsMasked ?
10295 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10296 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10297 Value *PtrOperand = Ops[PtrOperandIdx];
10298 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10299 Value *VLOperand = Ops[PtrOperandIdx + 2];
10300 Operands.push_back(PtrOperand);
10301 Operands.push_back(StrideOperand);
10302 if (IsMasked)
10303 Operands.push_back(Ops[NF]);
10304 Operands.push_back(VLOperand);
10305 if (IsMasked)
10306 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10307
10308 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10309 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10310 clang::CharUnits Align =
10311 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10312 llvm::Value *V;
10313 for (unsigned I = 0; I < NF; ++I) {
10314 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10315 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10316 }
10317 return V;
10318 }
10319 break;
10320case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tumu:
10321case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tumu:
10322case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tumu:
10323case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tumu:
10324 ID = Intrinsic::riscv_vlsseg2_mask;
10325 NF = 2;
10326 PolicyAttrs = 0;
10327IsMasked = true;
10328
10329 {
10330 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10331 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10332 SmallVector<llvm::Value*, 12> Operands;
10333
10334 // Please refer to comment under 'defvar NFList' in this file
10335 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10336 (!IsMasked && PolicyAttrs & RVV_VTA))
10337 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10338 else {
10339 if (IsMasked)
10340 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10341 else // Unmasked
10342 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10343 }
10344 unsigned PtrOperandIdx = IsMasked ?
10345 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10346 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10347 Value *PtrOperand = Ops[PtrOperandIdx];
10348 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10349 Value *VLOperand = Ops[PtrOperandIdx + 2];
10350 Operands.push_back(PtrOperand);
10351 Operands.push_back(StrideOperand);
10352 if (IsMasked)
10353 Operands.push_back(Ops[NF]);
10354 Operands.push_back(VLOperand);
10355 if (IsMasked)
10356 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10357
10358 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10359 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10360 clang::CharUnits Align =
10361 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10362 llvm::Value *V;
10363 for (unsigned I = 0; I < NF; ++I) {
10364 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10365 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10366 }
10367 return V;
10368 }
10369 break;
10370case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_mu:
10371case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_mu:
10372case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_mu:
10373case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_mu:
10374 ID = Intrinsic::riscv_vlsseg2_mask;
10375 NF = 2;
10376 PolicyAttrs = 1;
10377IsMasked = true;
10378
10379 {
10380 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10381 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10382 SmallVector<llvm::Value*, 12> Operands;
10383
10384 // Please refer to comment under 'defvar NFList' in this file
10385 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10386 (!IsMasked && PolicyAttrs & RVV_VTA))
10387 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10388 else {
10389 if (IsMasked)
10390 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10391 else // Unmasked
10392 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10393 }
10394 unsigned PtrOperandIdx = IsMasked ?
10395 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10396 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10397 Value *PtrOperand = Ops[PtrOperandIdx];
10398 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10399 Value *VLOperand = Ops[PtrOperandIdx + 2];
10400 Operands.push_back(PtrOperand);
10401 Operands.push_back(StrideOperand);
10402 if (IsMasked)
10403 Operands.push_back(Ops[NF]);
10404 Operands.push_back(VLOperand);
10405 if (IsMasked)
10406 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10407
10408 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10409 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10410 clang::CharUnits Align =
10411 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10412 llvm::Value *V;
10413 for (unsigned I = 0; I < NF; ++I) {
10414 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10415 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10416 }
10417 return V;
10418 }
10419 break;
10420case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tu:
10421case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tu:
10422case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tu:
10423case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tu:
10424 ID = Intrinsic::riscv_vlsseg3;
10425 NF = 3;
10426 PolicyAttrs = 2;
10427IsMasked = false;
10428
10429 {
10430 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10431 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10432 SmallVector<llvm::Value*, 12> Operands;
10433
10434 // Please refer to comment under 'defvar NFList' in this file
10435 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10436 (!IsMasked && PolicyAttrs & RVV_VTA))
10437 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10438 else {
10439 if (IsMasked)
10440 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10441 else // Unmasked
10442 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10443 }
10444 unsigned PtrOperandIdx = IsMasked ?
10445 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10446 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10447 Value *PtrOperand = Ops[PtrOperandIdx];
10448 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10449 Value *VLOperand = Ops[PtrOperandIdx + 2];
10450 Operands.push_back(PtrOperand);
10451 Operands.push_back(StrideOperand);
10452 if (IsMasked)
10453 Operands.push_back(Ops[NF]);
10454 Operands.push_back(VLOperand);
10455 if (IsMasked)
10456 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10457
10458 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10459 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10460 clang::CharUnits Align =
10461 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10462 llvm::Value *V;
10463 for (unsigned I = 0; I < NF; ++I) {
10464 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10465 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10466 }
10467 return V;
10468 }
10469 break;
10470case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_ta:
10471case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_ta:
10472case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_ta:
10473case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_ta:
10474 ID = Intrinsic::riscv_vlsseg3;
10475 NF = 3;
10476 PolicyAttrs = 3;
10477IsMasked = false;
10478
10479 {
10480 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10481 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10482 SmallVector<llvm::Value*, 12> Operands;
10483
10484 // Please refer to comment under 'defvar NFList' in this file
10485 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10486 (!IsMasked && PolicyAttrs & RVV_VTA))
10487 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10488 else {
10489 if (IsMasked)
10490 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10491 else // Unmasked
10492 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10493 }
10494 unsigned PtrOperandIdx = IsMasked ?
10495 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10496 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10497 Value *PtrOperand = Ops[PtrOperandIdx];
10498 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10499 Value *VLOperand = Ops[PtrOperandIdx + 2];
10500 Operands.push_back(PtrOperand);
10501 Operands.push_back(StrideOperand);
10502 if (IsMasked)
10503 Operands.push_back(Ops[NF]);
10504 Operands.push_back(VLOperand);
10505 if (IsMasked)
10506 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10507
10508 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10509 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10510 clang::CharUnits Align =
10511 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10512 llvm::Value *V;
10513 for (unsigned I = 0; I < NF; ++I) {
10514 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10515 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10516 }
10517 return V;
10518 }
10519 break;
10520case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tum:
10521case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tum:
10522case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tum:
10523case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tum:
10524 ID = Intrinsic::riscv_vlsseg3_mask;
10525 NF = 3;
10526 PolicyAttrs = 2;
10527IsMasked = true;
10528
10529 {
10530 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10531 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10532 SmallVector<llvm::Value*, 12> Operands;
10533
10534 // Please refer to comment under 'defvar NFList' in this file
10535 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10536 (!IsMasked && PolicyAttrs & RVV_VTA))
10537 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10538 else {
10539 if (IsMasked)
10540 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10541 else // Unmasked
10542 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10543 }
10544 unsigned PtrOperandIdx = IsMasked ?
10545 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10546 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10547 Value *PtrOperand = Ops[PtrOperandIdx];
10548 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10549 Value *VLOperand = Ops[PtrOperandIdx + 2];
10550 Operands.push_back(PtrOperand);
10551 Operands.push_back(StrideOperand);
10552 if (IsMasked)
10553 Operands.push_back(Ops[NF]);
10554 Operands.push_back(VLOperand);
10555 if (IsMasked)
10556 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10557
10558 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10559 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10560 clang::CharUnits Align =
10561 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10562 llvm::Value *V;
10563 for (unsigned I = 0; I < NF; ++I) {
10564 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10565 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10566 }
10567 return V;
10568 }
10569 break;
10570case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tama:
10571case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tama:
10572case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tama:
10573case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tama:
10574 ID = Intrinsic::riscv_vlsseg3_mask;
10575 NF = 3;
10576 PolicyAttrs = 3;
10577IsMasked = true;
10578
10579 {
10580 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10581 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10582 SmallVector<llvm::Value*, 12> Operands;
10583
10584 // Please refer to comment under 'defvar NFList' in this file
10585 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10586 (!IsMasked && PolicyAttrs & RVV_VTA))
10587 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10588 else {
10589 if (IsMasked)
10590 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10591 else // Unmasked
10592 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10593 }
10594 unsigned PtrOperandIdx = IsMasked ?
10595 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10596 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10597 Value *PtrOperand = Ops[PtrOperandIdx];
10598 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10599 Value *VLOperand = Ops[PtrOperandIdx + 2];
10600 Operands.push_back(PtrOperand);
10601 Operands.push_back(StrideOperand);
10602 if (IsMasked)
10603 Operands.push_back(Ops[NF]);
10604 Operands.push_back(VLOperand);
10605 if (IsMasked)
10606 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10607
10608 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10609 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10610 clang::CharUnits Align =
10611 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10612 llvm::Value *V;
10613 for (unsigned I = 0; I < NF; ++I) {
10614 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10615 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10616 }
10617 return V;
10618 }
10619 break;
10620case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tumu:
10621case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tumu:
10622case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tumu:
10623case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tumu:
10624 ID = Intrinsic::riscv_vlsseg3_mask;
10625 NF = 3;
10626 PolicyAttrs = 0;
10627IsMasked = true;
10628
10629 {
10630 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10631 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10632 SmallVector<llvm::Value*, 12> Operands;
10633
10634 // Please refer to comment under 'defvar NFList' in this file
10635 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10636 (!IsMasked && PolicyAttrs & RVV_VTA))
10637 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10638 else {
10639 if (IsMasked)
10640 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10641 else // Unmasked
10642 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10643 }
10644 unsigned PtrOperandIdx = IsMasked ?
10645 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10646 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10647 Value *PtrOperand = Ops[PtrOperandIdx];
10648 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10649 Value *VLOperand = Ops[PtrOperandIdx + 2];
10650 Operands.push_back(PtrOperand);
10651 Operands.push_back(StrideOperand);
10652 if (IsMasked)
10653 Operands.push_back(Ops[NF]);
10654 Operands.push_back(VLOperand);
10655 if (IsMasked)
10656 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10657
10658 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10659 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10660 clang::CharUnits Align =
10661 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10662 llvm::Value *V;
10663 for (unsigned I = 0; I < NF; ++I) {
10664 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10665 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10666 }
10667 return V;
10668 }
10669 break;
10670case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_mu:
10671case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_mu:
10672case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_mu:
10673case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_mu:
10674 ID = Intrinsic::riscv_vlsseg3_mask;
10675 NF = 3;
10676 PolicyAttrs = 1;
10677IsMasked = true;
10678
10679 {
10680 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10681 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10682 SmallVector<llvm::Value*, 12> Operands;
10683
10684 // Please refer to comment under 'defvar NFList' in this file
10685 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10686 (!IsMasked && PolicyAttrs & RVV_VTA))
10687 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10688 else {
10689 if (IsMasked)
10690 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10691 else // Unmasked
10692 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10693 }
10694 unsigned PtrOperandIdx = IsMasked ?
10695 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10696 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10697 Value *PtrOperand = Ops[PtrOperandIdx];
10698 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10699 Value *VLOperand = Ops[PtrOperandIdx + 2];
10700 Operands.push_back(PtrOperand);
10701 Operands.push_back(StrideOperand);
10702 if (IsMasked)
10703 Operands.push_back(Ops[NF]);
10704 Operands.push_back(VLOperand);
10705 if (IsMasked)
10706 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10707
10708 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10709 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10710 clang::CharUnits Align =
10711 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10712 llvm::Value *V;
10713 for (unsigned I = 0; I < NF; ++I) {
10714 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10715 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10716 }
10717 return V;
10718 }
10719 break;
10720case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tu:
10721case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tu:
10722case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tu:
10723case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tu:
10724 ID = Intrinsic::riscv_vlsseg4;
10725 NF = 4;
10726 PolicyAttrs = 2;
10727IsMasked = false;
10728
10729 {
10730 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10731 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10732 SmallVector<llvm::Value*, 12> Operands;
10733
10734 // Please refer to comment under 'defvar NFList' in this file
10735 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10736 (!IsMasked && PolicyAttrs & RVV_VTA))
10737 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10738 else {
10739 if (IsMasked)
10740 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10741 else // Unmasked
10742 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10743 }
10744 unsigned PtrOperandIdx = IsMasked ?
10745 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10746 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10747 Value *PtrOperand = Ops[PtrOperandIdx];
10748 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10749 Value *VLOperand = Ops[PtrOperandIdx + 2];
10750 Operands.push_back(PtrOperand);
10751 Operands.push_back(StrideOperand);
10752 if (IsMasked)
10753 Operands.push_back(Ops[NF]);
10754 Operands.push_back(VLOperand);
10755 if (IsMasked)
10756 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10757
10758 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10759 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10760 clang::CharUnits Align =
10761 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10762 llvm::Value *V;
10763 for (unsigned I = 0; I < NF; ++I) {
10764 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10765 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10766 }
10767 return V;
10768 }
10769 break;
10770case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_ta:
10771case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_ta:
10772case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_ta:
10773case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_ta:
10774 ID = Intrinsic::riscv_vlsseg4;
10775 NF = 4;
10776 PolicyAttrs = 3;
10777IsMasked = false;
10778
10779 {
10780 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10781 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10782 SmallVector<llvm::Value*, 12> Operands;
10783
10784 // Please refer to comment under 'defvar NFList' in this file
10785 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10786 (!IsMasked && PolicyAttrs & RVV_VTA))
10787 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10788 else {
10789 if (IsMasked)
10790 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10791 else // Unmasked
10792 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10793 }
10794 unsigned PtrOperandIdx = IsMasked ?
10795 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10796 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10797 Value *PtrOperand = Ops[PtrOperandIdx];
10798 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10799 Value *VLOperand = Ops[PtrOperandIdx + 2];
10800 Operands.push_back(PtrOperand);
10801 Operands.push_back(StrideOperand);
10802 if (IsMasked)
10803 Operands.push_back(Ops[NF]);
10804 Operands.push_back(VLOperand);
10805 if (IsMasked)
10806 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10807
10808 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10809 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10810 clang::CharUnits Align =
10811 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10812 llvm::Value *V;
10813 for (unsigned I = 0; I < NF; ++I) {
10814 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10815 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10816 }
10817 return V;
10818 }
10819 break;
10820case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tum:
10821case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tum:
10822case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tum:
10823case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tum:
10824 ID = Intrinsic::riscv_vlsseg4_mask;
10825 NF = 4;
10826 PolicyAttrs = 2;
10827IsMasked = true;
10828
10829 {
10830 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10831 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10832 SmallVector<llvm::Value*, 12> Operands;
10833
10834 // Please refer to comment under 'defvar NFList' in this file
10835 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10836 (!IsMasked && PolicyAttrs & RVV_VTA))
10837 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10838 else {
10839 if (IsMasked)
10840 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10841 else // Unmasked
10842 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10843 }
10844 unsigned PtrOperandIdx = IsMasked ?
10845 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10846 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10847 Value *PtrOperand = Ops[PtrOperandIdx];
10848 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10849 Value *VLOperand = Ops[PtrOperandIdx + 2];
10850 Operands.push_back(PtrOperand);
10851 Operands.push_back(StrideOperand);
10852 if (IsMasked)
10853 Operands.push_back(Ops[NF]);
10854 Operands.push_back(VLOperand);
10855 if (IsMasked)
10856 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10857
10858 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10859 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10860 clang::CharUnits Align =
10861 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10862 llvm::Value *V;
10863 for (unsigned I = 0; I < NF; ++I) {
10864 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10865 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10866 }
10867 return V;
10868 }
10869 break;
10870case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tama:
10871case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tama:
10872case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tama:
10873case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tama:
10874 ID = Intrinsic::riscv_vlsseg4_mask;
10875 NF = 4;
10876 PolicyAttrs = 3;
10877IsMasked = true;
10878
10879 {
10880 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10881 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10882 SmallVector<llvm::Value*, 12> Operands;
10883
10884 // Please refer to comment under 'defvar NFList' in this file
10885 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10886 (!IsMasked && PolicyAttrs & RVV_VTA))
10887 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10888 else {
10889 if (IsMasked)
10890 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10891 else // Unmasked
10892 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10893 }
10894 unsigned PtrOperandIdx = IsMasked ?
10895 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10896 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10897 Value *PtrOperand = Ops[PtrOperandIdx];
10898 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10899 Value *VLOperand = Ops[PtrOperandIdx + 2];
10900 Operands.push_back(PtrOperand);
10901 Operands.push_back(StrideOperand);
10902 if (IsMasked)
10903 Operands.push_back(Ops[NF]);
10904 Operands.push_back(VLOperand);
10905 if (IsMasked)
10906 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10907
10908 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10909 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10910 clang::CharUnits Align =
10911 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10912 llvm::Value *V;
10913 for (unsigned I = 0; I < NF; ++I) {
10914 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10915 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10916 }
10917 return V;
10918 }
10919 break;
10920case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tumu:
10921case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tumu:
10922case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tumu:
10923case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tumu:
10924 ID = Intrinsic::riscv_vlsseg4_mask;
10925 NF = 4;
10926 PolicyAttrs = 0;
10927IsMasked = true;
10928
10929 {
10930 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10931 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10932 SmallVector<llvm::Value*, 12> Operands;
10933
10934 // Please refer to comment under 'defvar NFList' in this file
10935 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10936 (!IsMasked && PolicyAttrs & RVV_VTA))
10937 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10938 else {
10939 if (IsMasked)
10940 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10941 else // Unmasked
10942 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10943 }
10944 unsigned PtrOperandIdx = IsMasked ?
10945 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10946 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10947 Value *PtrOperand = Ops[PtrOperandIdx];
10948 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10949 Value *VLOperand = Ops[PtrOperandIdx + 2];
10950 Operands.push_back(PtrOperand);
10951 Operands.push_back(StrideOperand);
10952 if (IsMasked)
10953 Operands.push_back(Ops[NF]);
10954 Operands.push_back(VLOperand);
10955 if (IsMasked)
10956 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10957
10958 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10959 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10960 clang::CharUnits Align =
10961 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10962 llvm::Value *V;
10963 for (unsigned I = 0; I < NF; ++I) {
10964 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10965 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10966 }
10967 return V;
10968 }
10969 break;
10970case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_mu:
10971case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_mu:
10972case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_mu:
10973case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_mu:
10974 ID = Intrinsic::riscv_vlsseg4_mask;
10975 NF = 4;
10976 PolicyAttrs = 1;
10977IsMasked = true;
10978
10979 {
10980 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10981 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10982 SmallVector<llvm::Value*, 12> Operands;
10983
10984 // Please refer to comment under 'defvar NFList' in this file
10985 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10986 (!IsMasked && PolicyAttrs & RVV_VTA))
10987 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10988 else {
10989 if (IsMasked)
10990 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10991 else // Unmasked
10992 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10993 }
10994 unsigned PtrOperandIdx = IsMasked ?
10995 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10996 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10997 Value *PtrOperand = Ops[PtrOperandIdx];
10998 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10999 Value *VLOperand = Ops[PtrOperandIdx + 2];
11000 Operands.push_back(PtrOperand);
11001 Operands.push_back(StrideOperand);
11002 if (IsMasked)
11003 Operands.push_back(Ops[NF]);
11004 Operands.push_back(VLOperand);
11005 if (IsMasked)
11006 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11007
11008 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11009 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11010 clang::CharUnits Align =
11011 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11012 llvm::Value *V;
11013 for (unsigned I = 0; I < NF; ++I) {
11014 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11015 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11016 }
11017 return V;
11018 }
11019 break;
11020case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tu:
11021case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tu:
11022case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tu:
11023case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tu:
11024 ID = Intrinsic::riscv_vlsseg5;
11025 NF = 5;
11026 PolicyAttrs = 2;
11027IsMasked = false;
11028
11029 {
11030 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11031 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11032 SmallVector<llvm::Value*, 12> Operands;
11033
11034 // Please refer to comment under 'defvar NFList' in this file
11035 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11036 (!IsMasked && PolicyAttrs & RVV_VTA))
11037 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11038 else {
11039 if (IsMasked)
11040 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11041 else // Unmasked
11042 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11043 }
11044 unsigned PtrOperandIdx = IsMasked ?
11045 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11046 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11047 Value *PtrOperand = Ops[PtrOperandIdx];
11048 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11049 Value *VLOperand = Ops[PtrOperandIdx + 2];
11050 Operands.push_back(PtrOperand);
11051 Operands.push_back(StrideOperand);
11052 if (IsMasked)
11053 Operands.push_back(Ops[NF]);
11054 Operands.push_back(VLOperand);
11055 if (IsMasked)
11056 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11057
11058 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11059 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11060 clang::CharUnits Align =
11061 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11062 llvm::Value *V;
11063 for (unsigned I = 0; I < NF; ++I) {
11064 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11065 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11066 }
11067 return V;
11068 }
11069 break;
11070case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_ta:
11071case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_ta:
11072case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_ta:
11073case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_ta:
11074 ID = Intrinsic::riscv_vlsseg5;
11075 NF = 5;
11076 PolicyAttrs = 3;
11077IsMasked = false;
11078
11079 {
11080 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11081 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11082 SmallVector<llvm::Value*, 12> Operands;
11083
11084 // Please refer to comment under 'defvar NFList' in this file
11085 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11086 (!IsMasked && PolicyAttrs & RVV_VTA))
11087 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11088 else {
11089 if (IsMasked)
11090 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11091 else // Unmasked
11092 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11093 }
11094 unsigned PtrOperandIdx = IsMasked ?
11095 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11096 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11097 Value *PtrOperand = Ops[PtrOperandIdx];
11098 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11099 Value *VLOperand = Ops[PtrOperandIdx + 2];
11100 Operands.push_back(PtrOperand);
11101 Operands.push_back(StrideOperand);
11102 if (IsMasked)
11103 Operands.push_back(Ops[NF]);
11104 Operands.push_back(VLOperand);
11105 if (IsMasked)
11106 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11107
11108 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11109 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11110 clang::CharUnits Align =
11111 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11112 llvm::Value *V;
11113 for (unsigned I = 0; I < NF; ++I) {
11114 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11115 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11116 }
11117 return V;
11118 }
11119 break;
11120case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tum:
11121case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tum:
11122case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tum:
11123case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tum:
11124 ID = Intrinsic::riscv_vlsseg5_mask;
11125 NF = 5;
11126 PolicyAttrs = 2;
11127IsMasked = true;
11128
11129 {
11130 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11131 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11132 SmallVector<llvm::Value*, 12> Operands;
11133
11134 // Please refer to comment under 'defvar NFList' in this file
11135 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11136 (!IsMasked && PolicyAttrs & RVV_VTA))
11137 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11138 else {
11139 if (IsMasked)
11140 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11141 else // Unmasked
11142 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11143 }
11144 unsigned PtrOperandIdx = IsMasked ?
11145 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11146 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11147 Value *PtrOperand = Ops[PtrOperandIdx];
11148 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11149 Value *VLOperand = Ops[PtrOperandIdx + 2];
11150 Operands.push_back(PtrOperand);
11151 Operands.push_back(StrideOperand);
11152 if (IsMasked)
11153 Operands.push_back(Ops[NF]);
11154 Operands.push_back(VLOperand);
11155 if (IsMasked)
11156 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11157
11158 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11159 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11160 clang::CharUnits Align =
11161 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11162 llvm::Value *V;
11163 for (unsigned I = 0; I < NF; ++I) {
11164 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11165 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11166 }
11167 return V;
11168 }
11169 break;
11170case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tama:
11171case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tama:
11172case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tama:
11173case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tama:
11174 ID = Intrinsic::riscv_vlsseg5_mask;
11175 NF = 5;
11176 PolicyAttrs = 3;
11177IsMasked = true;
11178
11179 {
11180 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11181 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11182 SmallVector<llvm::Value*, 12> Operands;
11183
11184 // Please refer to comment under 'defvar NFList' in this file
11185 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11186 (!IsMasked && PolicyAttrs & RVV_VTA))
11187 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11188 else {
11189 if (IsMasked)
11190 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11191 else // Unmasked
11192 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11193 }
11194 unsigned PtrOperandIdx = IsMasked ?
11195 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11196 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11197 Value *PtrOperand = Ops[PtrOperandIdx];
11198 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11199 Value *VLOperand = Ops[PtrOperandIdx + 2];
11200 Operands.push_back(PtrOperand);
11201 Operands.push_back(StrideOperand);
11202 if (IsMasked)
11203 Operands.push_back(Ops[NF]);
11204 Operands.push_back(VLOperand);
11205 if (IsMasked)
11206 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11207
11208 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11209 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11210 clang::CharUnits Align =
11211 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11212 llvm::Value *V;
11213 for (unsigned I = 0; I < NF; ++I) {
11214 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11215 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11216 }
11217 return V;
11218 }
11219 break;
11220case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tumu:
11221case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tumu:
11222case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tumu:
11223case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tumu:
11224 ID = Intrinsic::riscv_vlsseg5_mask;
11225 NF = 5;
11226 PolicyAttrs = 0;
11227IsMasked = true;
11228
11229 {
11230 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11231 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11232 SmallVector<llvm::Value*, 12> Operands;
11233
11234 // Please refer to comment under 'defvar NFList' in this file
11235 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11236 (!IsMasked && PolicyAttrs & RVV_VTA))
11237 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11238 else {
11239 if (IsMasked)
11240 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11241 else // Unmasked
11242 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11243 }
11244 unsigned PtrOperandIdx = IsMasked ?
11245 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11246 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11247 Value *PtrOperand = Ops[PtrOperandIdx];
11248 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11249 Value *VLOperand = Ops[PtrOperandIdx + 2];
11250 Operands.push_back(PtrOperand);
11251 Operands.push_back(StrideOperand);
11252 if (IsMasked)
11253 Operands.push_back(Ops[NF]);
11254 Operands.push_back(VLOperand);
11255 if (IsMasked)
11256 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11257
11258 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11259 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11260 clang::CharUnits Align =
11261 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11262 llvm::Value *V;
11263 for (unsigned I = 0; I < NF; ++I) {
11264 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11265 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11266 }
11267 return V;
11268 }
11269 break;
11270case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_mu:
11271case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_mu:
11272case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_mu:
11273case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_mu:
11274 ID = Intrinsic::riscv_vlsseg5_mask;
11275 NF = 5;
11276 PolicyAttrs = 1;
11277IsMasked = true;
11278
11279 {
11280 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11281 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11282 SmallVector<llvm::Value*, 12> Operands;
11283
11284 // Please refer to comment under 'defvar NFList' in this file
11285 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11286 (!IsMasked && PolicyAttrs & RVV_VTA))
11287 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11288 else {
11289 if (IsMasked)
11290 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11291 else // Unmasked
11292 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11293 }
11294 unsigned PtrOperandIdx = IsMasked ?
11295 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11296 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11297 Value *PtrOperand = Ops[PtrOperandIdx];
11298 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11299 Value *VLOperand = Ops[PtrOperandIdx + 2];
11300 Operands.push_back(PtrOperand);
11301 Operands.push_back(StrideOperand);
11302 if (IsMasked)
11303 Operands.push_back(Ops[NF]);
11304 Operands.push_back(VLOperand);
11305 if (IsMasked)
11306 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11307
11308 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11309 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11310 clang::CharUnits Align =
11311 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11312 llvm::Value *V;
11313 for (unsigned I = 0; I < NF; ++I) {
11314 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11315 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11316 }
11317 return V;
11318 }
11319 break;
11320case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tu:
11321case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tu:
11322case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tu:
11323case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tu:
11324 ID = Intrinsic::riscv_vlsseg6;
11325 NF = 6;
11326 PolicyAttrs = 2;
11327IsMasked = false;
11328
11329 {
11330 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11331 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11332 SmallVector<llvm::Value*, 12> Operands;
11333
11334 // Please refer to comment under 'defvar NFList' in this file
11335 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11336 (!IsMasked && PolicyAttrs & RVV_VTA))
11337 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11338 else {
11339 if (IsMasked)
11340 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11341 else // Unmasked
11342 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11343 }
11344 unsigned PtrOperandIdx = IsMasked ?
11345 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11346 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11347 Value *PtrOperand = Ops[PtrOperandIdx];
11348 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11349 Value *VLOperand = Ops[PtrOperandIdx + 2];
11350 Operands.push_back(PtrOperand);
11351 Operands.push_back(StrideOperand);
11352 if (IsMasked)
11353 Operands.push_back(Ops[NF]);
11354 Operands.push_back(VLOperand);
11355 if (IsMasked)
11356 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11357
11358 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11359 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11360 clang::CharUnits Align =
11361 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11362 llvm::Value *V;
11363 for (unsigned I = 0; I < NF; ++I) {
11364 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11365 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11366 }
11367 return V;
11368 }
11369 break;
11370case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_ta:
11371case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_ta:
11372case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_ta:
11373case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_ta:
11374 ID = Intrinsic::riscv_vlsseg6;
11375 NF = 6;
11376 PolicyAttrs = 3;
11377IsMasked = false;
11378
11379 {
11380 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11381 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11382 SmallVector<llvm::Value*, 12> Operands;
11383
11384 // Please refer to comment under 'defvar NFList' in this file
11385 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11386 (!IsMasked && PolicyAttrs & RVV_VTA))
11387 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11388 else {
11389 if (IsMasked)
11390 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11391 else // Unmasked
11392 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11393 }
11394 unsigned PtrOperandIdx = IsMasked ?
11395 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11396 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11397 Value *PtrOperand = Ops[PtrOperandIdx];
11398 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11399 Value *VLOperand = Ops[PtrOperandIdx + 2];
11400 Operands.push_back(PtrOperand);
11401 Operands.push_back(StrideOperand);
11402 if (IsMasked)
11403 Operands.push_back(Ops[NF]);
11404 Operands.push_back(VLOperand);
11405 if (IsMasked)
11406 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11407
11408 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11409 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11410 clang::CharUnits Align =
11411 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11412 llvm::Value *V;
11413 for (unsigned I = 0; I < NF; ++I) {
11414 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11415 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11416 }
11417 return V;
11418 }
11419 break;
11420case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tum:
11421case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tum:
11422case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tum:
11423case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tum:
11424 ID = Intrinsic::riscv_vlsseg6_mask;
11425 NF = 6;
11426 PolicyAttrs = 2;
11427IsMasked = true;
11428
11429 {
11430 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11431 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11432 SmallVector<llvm::Value*, 12> Operands;
11433
11434 // Please refer to comment under 'defvar NFList' in this file
11435 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11436 (!IsMasked && PolicyAttrs & RVV_VTA))
11437 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11438 else {
11439 if (IsMasked)
11440 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11441 else // Unmasked
11442 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11443 }
11444 unsigned PtrOperandIdx = IsMasked ?
11445 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11446 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11447 Value *PtrOperand = Ops[PtrOperandIdx];
11448 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11449 Value *VLOperand = Ops[PtrOperandIdx + 2];
11450 Operands.push_back(PtrOperand);
11451 Operands.push_back(StrideOperand);
11452 if (IsMasked)
11453 Operands.push_back(Ops[NF]);
11454 Operands.push_back(VLOperand);
11455 if (IsMasked)
11456 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11457
11458 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11459 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11460 clang::CharUnits Align =
11461 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11462 llvm::Value *V;
11463 for (unsigned I = 0; I < NF; ++I) {
11464 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11465 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11466 }
11467 return V;
11468 }
11469 break;
11470case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tama:
11471case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tama:
11472case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tama:
11473case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tama:
11474 ID = Intrinsic::riscv_vlsseg6_mask;
11475 NF = 6;
11476 PolicyAttrs = 3;
11477IsMasked = true;
11478
11479 {
11480 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11481 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11482 SmallVector<llvm::Value*, 12> Operands;
11483
11484 // Please refer to comment under 'defvar NFList' in this file
11485 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11486 (!IsMasked && PolicyAttrs & RVV_VTA))
11487 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11488 else {
11489 if (IsMasked)
11490 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11491 else // Unmasked
11492 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11493 }
11494 unsigned PtrOperandIdx = IsMasked ?
11495 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11496 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11497 Value *PtrOperand = Ops[PtrOperandIdx];
11498 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11499 Value *VLOperand = Ops[PtrOperandIdx + 2];
11500 Operands.push_back(PtrOperand);
11501 Operands.push_back(StrideOperand);
11502 if (IsMasked)
11503 Operands.push_back(Ops[NF]);
11504 Operands.push_back(VLOperand);
11505 if (IsMasked)
11506 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11507
11508 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11509 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11510 clang::CharUnits Align =
11511 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11512 llvm::Value *V;
11513 for (unsigned I = 0; I < NF; ++I) {
11514 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11515 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11516 }
11517 return V;
11518 }
11519 break;
11520case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tumu:
11521case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tumu:
11522case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tumu:
11523case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tumu:
11524 ID = Intrinsic::riscv_vlsseg6_mask;
11525 NF = 6;
11526 PolicyAttrs = 0;
11527IsMasked = true;
11528
11529 {
11530 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11531 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11532 SmallVector<llvm::Value*, 12> Operands;
11533
11534 // Please refer to comment under 'defvar NFList' in this file
11535 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11536 (!IsMasked && PolicyAttrs & RVV_VTA))
11537 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11538 else {
11539 if (IsMasked)
11540 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11541 else // Unmasked
11542 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11543 }
11544 unsigned PtrOperandIdx = IsMasked ?
11545 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11546 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11547 Value *PtrOperand = Ops[PtrOperandIdx];
11548 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11549 Value *VLOperand = Ops[PtrOperandIdx + 2];
11550 Operands.push_back(PtrOperand);
11551 Operands.push_back(StrideOperand);
11552 if (IsMasked)
11553 Operands.push_back(Ops[NF]);
11554 Operands.push_back(VLOperand);
11555 if (IsMasked)
11556 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11557
11558 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11559 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11560 clang::CharUnits Align =
11561 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11562 llvm::Value *V;
11563 for (unsigned I = 0; I < NF; ++I) {
11564 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11565 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11566 }
11567 return V;
11568 }
11569 break;
11570case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_mu:
11571case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_mu:
11572case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_mu:
11573case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_mu:
11574 ID = Intrinsic::riscv_vlsseg6_mask;
11575 NF = 6;
11576 PolicyAttrs = 1;
11577IsMasked = true;
11578
11579 {
11580 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11581 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11582 SmallVector<llvm::Value*, 12> Operands;
11583
11584 // Please refer to comment under 'defvar NFList' in this file
11585 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11586 (!IsMasked && PolicyAttrs & RVV_VTA))
11587 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11588 else {
11589 if (IsMasked)
11590 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11591 else // Unmasked
11592 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11593 }
11594 unsigned PtrOperandIdx = IsMasked ?
11595 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11596 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11597 Value *PtrOperand = Ops[PtrOperandIdx];
11598 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11599 Value *VLOperand = Ops[PtrOperandIdx + 2];
11600 Operands.push_back(PtrOperand);
11601 Operands.push_back(StrideOperand);
11602 if (IsMasked)
11603 Operands.push_back(Ops[NF]);
11604 Operands.push_back(VLOperand);
11605 if (IsMasked)
11606 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11607
11608 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11609 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11610 clang::CharUnits Align =
11611 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11612 llvm::Value *V;
11613 for (unsigned I = 0; I < NF; ++I) {
11614 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11615 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11616 }
11617 return V;
11618 }
11619 break;
11620case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tu:
11621case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tu:
11622case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tu:
11623case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tu:
11624 ID = Intrinsic::riscv_vlsseg7;
11625 NF = 7;
11626 PolicyAttrs = 2;
11627IsMasked = false;
11628
11629 {
11630 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11631 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11632 SmallVector<llvm::Value*, 12> Operands;
11633
11634 // Please refer to comment under 'defvar NFList' in this file
11635 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11636 (!IsMasked && PolicyAttrs & RVV_VTA))
11637 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11638 else {
11639 if (IsMasked)
11640 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11641 else // Unmasked
11642 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11643 }
11644 unsigned PtrOperandIdx = IsMasked ?
11645 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11646 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11647 Value *PtrOperand = Ops[PtrOperandIdx];
11648 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11649 Value *VLOperand = Ops[PtrOperandIdx + 2];
11650 Operands.push_back(PtrOperand);
11651 Operands.push_back(StrideOperand);
11652 if (IsMasked)
11653 Operands.push_back(Ops[NF]);
11654 Operands.push_back(VLOperand);
11655 if (IsMasked)
11656 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11657
11658 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11659 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11660 clang::CharUnits Align =
11661 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11662 llvm::Value *V;
11663 for (unsigned I = 0; I < NF; ++I) {
11664 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11665 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11666 }
11667 return V;
11668 }
11669 break;
11670case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_ta:
11671case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_ta:
11672case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_ta:
11673case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_ta:
11674 ID = Intrinsic::riscv_vlsseg7;
11675 NF = 7;
11676 PolicyAttrs = 3;
11677IsMasked = false;
11678
11679 {
11680 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11681 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11682 SmallVector<llvm::Value*, 12> Operands;
11683
11684 // Please refer to comment under 'defvar NFList' in this file
11685 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11686 (!IsMasked && PolicyAttrs & RVV_VTA))
11687 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11688 else {
11689 if (IsMasked)
11690 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11691 else // Unmasked
11692 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11693 }
11694 unsigned PtrOperandIdx = IsMasked ?
11695 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11696 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11697 Value *PtrOperand = Ops[PtrOperandIdx];
11698 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11699 Value *VLOperand = Ops[PtrOperandIdx + 2];
11700 Operands.push_back(PtrOperand);
11701 Operands.push_back(StrideOperand);
11702 if (IsMasked)
11703 Operands.push_back(Ops[NF]);
11704 Operands.push_back(VLOperand);
11705 if (IsMasked)
11706 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11707
11708 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11709 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11710 clang::CharUnits Align =
11711 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11712 llvm::Value *V;
11713 for (unsigned I = 0; I < NF; ++I) {
11714 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11715 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11716 }
11717 return V;
11718 }
11719 break;
11720case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tum:
11721case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tum:
11722case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tum:
11723case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tum:
11724 ID = Intrinsic::riscv_vlsseg7_mask;
11725 NF = 7;
11726 PolicyAttrs = 2;
11727IsMasked = true;
11728
11729 {
11730 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11731 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11732 SmallVector<llvm::Value*, 12> Operands;
11733
11734 // Please refer to comment under 'defvar NFList' in this file
11735 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11736 (!IsMasked && PolicyAttrs & RVV_VTA))
11737 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11738 else {
11739 if (IsMasked)
11740 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11741 else // Unmasked
11742 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11743 }
11744 unsigned PtrOperandIdx = IsMasked ?
11745 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11746 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11747 Value *PtrOperand = Ops[PtrOperandIdx];
11748 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11749 Value *VLOperand = Ops[PtrOperandIdx + 2];
11750 Operands.push_back(PtrOperand);
11751 Operands.push_back(StrideOperand);
11752 if (IsMasked)
11753 Operands.push_back(Ops[NF]);
11754 Operands.push_back(VLOperand);
11755 if (IsMasked)
11756 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11757
11758 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11759 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11760 clang::CharUnits Align =
11761 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11762 llvm::Value *V;
11763 for (unsigned I = 0; I < NF; ++I) {
11764 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11765 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11766 }
11767 return V;
11768 }
11769 break;
11770case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tama:
11771case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tama:
11772case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tama:
11773case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tama:
11774 ID = Intrinsic::riscv_vlsseg7_mask;
11775 NF = 7;
11776 PolicyAttrs = 3;
11777IsMasked = true;
11778
11779 {
11780 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11781 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11782 SmallVector<llvm::Value*, 12> Operands;
11783
11784 // Please refer to comment under 'defvar NFList' in this file
11785 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11786 (!IsMasked && PolicyAttrs & RVV_VTA))
11787 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11788 else {
11789 if (IsMasked)
11790 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11791 else // Unmasked
11792 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11793 }
11794 unsigned PtrOperandIdx = IsMasked ?
11795 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11796 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11797 Value *PtrOperand = Ops[PtrOperandIdx];
11798 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11799 Value *VLOperand = Ops[PtrOperandIdx + 2];
11800 Operands.push_back(PtrOperand);
11801 Operands.push_back(StrideOperand);
11802 if (IsMasked)
11803 Operands.push_back(Ops[NF]);
11804 Operands.push_back(VLOperand);
11805 if (IsMasked)
11806 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11807
11808 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11809 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11810 clang::CharUnits Align =
11811 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11812 llvm::Value *V;
11813 for (unsigned I = 0; I < NF; ++I) {
11814 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11815 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11816 }
11817 return V;
11818 }
11819 break;
11820case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tumu:
11821case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tumu:
11822case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tumu:
11823case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tumu:
11824 ID = Intrinsic::riscv_vlsseg7_mask;
11825 NF = 7;
11826 PolicyAttrs = 0;
11827IsMasked = true;
11828
11829 {
11830 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11831 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11832 SmallVector<llvm::Value*, 12> Operands;
11833
11834 // Please refer to comment under 'defvar NFList' in this file
11835 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11836 (!IsMasked && PolicyAttrs & RVV_VTA))
11837 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11838 else {
11839 if (IsMasked)
11840 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11841 else // Unmasked
11842 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11843 }
11844 unsigned PtrOperandIdx = IsMasked ?
11845 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11846 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11847 Value *PtrOperand = Ops[PtrOperandIdx];
11848 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11849 Value *VLOperand = Ops[PtrOperandIdx + 2];
11850 Operands.push_back(PtrOperand);
11851 Operands.push_back(StrideOperand);
11852 if (IsMasked)
11853 Operands.push_back(Ops[NF]);
11854 Operands.push_back(VLOperand);
11855 if (IsMasked)
11856 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11857
11858 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11859 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11860 clang::CharUnits Align =
11861 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11862 llvm::Value *V;
11863 for (unsigned I = 0; I < NF; ++I) {
11864 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11865 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11866 }
11867 return V;
11868 }
11869 break;
11870case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_mu:
11871case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_mu:
11872case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_mu:
11873case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_mu:
11874 ID = Intrinsic::riscv_vlsseg7_mask;
11875 NF = 7;
11876 PolicyAttrs = 1;
11877IsMasked = true;
11878
11879 {
11880 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11881 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11882 SmallVector<llvm::Value*, 12> Operands;
11883
11884 // Please refer to comment under 'defvar NFList' in this file
11885 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11886 (!IsMasked && PolicyAttrs & RVV_VTA))
11887 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11888 else {
11889 if (IsMasked)
11890 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11891 else // Unmasked
11892 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11893 }
11894 unsigned PtrOperandIdx = IsMasked ?
11895 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11896 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11897 Value *PtrOperand = Ops[PtrOperandIdx];
11898 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11899 Value *VLOperand = Ops[PtrOperandIdx + 2];
11900 Operands.push_back(PtrOperand);
11901 Operands.push_back(StrideOperand);
11902 if (IsMasked)
11903 Operands.push_back(Ops[NF]);
11904 Operands.push_back(VLOperand);
11905 if (IsMasked)
11906 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11907
11908 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11909 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11910 clang::CharUnits Align =
11911 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11912 llvm::Value *V;
11913 for (unsigned I = 0; I < NF; ++I) {
11914 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11915 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11916 }
11917 return V;
11918 }
11919 break;
11920case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tu:
11921case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tu:
11922case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tu:
11923case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tu:
11924 ID = Intrinsic::riscv_vlsseg8;
11925 NF = 8;
11926 PolicyAttrs = 2;
11927IsMasked = false;
11928
11929 {
11930 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11931 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11932 SmallVector<llvm::Value*, 12> Operands;
11933
11934 // Please refer to comment under 'defvar NFList' in this file
11935 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11936 (!IsMasked && PolicyAttrs & RVV_VTA))
11937 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11938 else {
11939 if (IsMasked)
11940 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11941 else // Unmasked
11942 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11943 }
11944 unsigned PtrOperandIdx = IsMasked ?
11945 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11946 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11947 Value *PtrOperand = Ops[PtrOperandIdx];
11948 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11949 Value *VLOperand = Ops[PtrOperandIdx + 2];
11950 Operands.push_back(PtrOperand);
11951 Operands.push_back(StrideOperand);
11952 if (IsMasked)
11953 Operands.push_back(Ops[NF]);
11954 Operands.push_back(VLOperand);
11955 if (IsMasked)
11956 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11957
11958 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11959 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11960 clang::CharUnits Align =
11961 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11962 llvm::Value *V;
11963 for (unsigned I = 0; I < NF; ++I) {
11964 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11965 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11966 }
11967 return V;
11968 }
11969 break;
11970case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_ta:
11971case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_ta:
11972case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_ta:
11973case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_ta:
11974 ID = Intrinsic::riscv_vlsseg8;
11975 NF = 8;
11976 PolicyAttrs = 3;
11977IsMasked = false;
11978
11979 {
11980 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11981 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11982 SmallVector<llvm::Value*, 12> Operands;
11983
11984 // Please refer to comment under 'defvar NFList' in this file
11985 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11986 (!IsMasked && PolicyAttrs & RVV_VTA))
11987 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11988 else {
11989 if (IsMasked)
11990 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11991 else // Unmasked
11992 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11993 }
11994 unsigned PtrOperandIdx = IsMasked ?
11995 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11996 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11997 Value *PtrOperand = Ops[PtrOperandIdx];
11998 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11999 Value *VLOperand = Ops[PtrOperandIdx + 2];
12000 Operands.push_back(PtrOperand);
12001 Operands.push_back(StrideOperand);
12002 if (IsMasked)
12003 Operands.push_back(Ops[NF]);
12004 Operands.push_back(VLOperand);
12005 if (IsMasked)
12006 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12007
12008 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12009 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12010 clang::CharUnits Align =
12011 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12012 llvm::Value *V;
12013 for (unsigned I = 0; I < NF; ++I) {
12014 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12015 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12016 }
12017 return V;
12018 }
12019 break;
12020case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tum:
12021case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tum:
12022case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tum:
12023case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tum:
12024 ID = Intrinsic::riscv_vlsseg8_mask;
12025 NF = 8;
12026 PolicyAttrs = 2;
12027IsMasked = true;
12028
12029 {
12030 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12031 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12032 SmallVector<llvm::Value*, 12> Operands;
12033
12034 // Please refer to comment under 'defvar NFList' in this file
12035 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12036 (!IsMasked && PolicyAttrs & RVV_VTA))
12037 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12038 else {
12039 if (IsMasked)
12040 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12041 else // Unmasked
12042 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12043 }
12044 unsigned PtrOperandIdx = IsMasked ?
12045 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12046 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12047 Value *PtrOperand = Ops[PtrOperandIdx];
12048 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12049 Value *VLOperand = Ops[PtrOperandIdx + 2];
12050 Operands.push_back(PtrOperand);
12051 Operands.push_back(StrideOperand);
12052 if (IsMasked)
12053 Operands.push_back(Ops[NF]);
12054 Operands.push_back(VLOperand);
12055 if (IsMasked)
12056 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12057
12058 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12059 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12060 clang::CharUnits Align =
12061 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12062 llvm::Value *V;
12063 for (unsigned I = 0; I < NF; ++I) {
12064 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12065 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12066 }
12067 return V;
12068 }
12069 break;
12070case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tama:
12071case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tama:
12072case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tama:
12073case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tama:
12074 ID = Intrinsic::riscv_vlsseg8_mask;
12075 NF = 8;
12076 PolicyAttrs = 3;
12077IsMasked = true;
12078
12079 {
12080 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12081 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12082 SmallVector<llvm::Value*, 12> Operands;
12083
12084 // Please refer to comment under 'defvar NFList' in this file
12085 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12086 (!IsMasked && PolicyAttrs & RVV_VTA))
12087 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12088 else {
12089 if (IsMasked)
12090 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12091 else // Unmasked
12092 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12093 }
12094 unsigned PtrOperandIdx = IsMasked ?
12095 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12096 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12097 Value *PtrOperand = Ops[PtrOperandIdx];
12098 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12099 Value *VLOperand = Ops[PtrOperandIdx + 2];
12100 Operands.push_back(PtrOperand);
12101 Operands.push_back(StrideOperand);
12102 if (IsMasked)
12103 Operands.push_back(Ops[NF]);
12104 Operands.push_back(VLOperand);
12105 if (IsMasked)
12106 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12107
12108 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12109 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12110 clang::CharUnits Align =
12111 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12112 llvm::Value *V;
12113 for (unsigned I = 0; I < NF; ++I) {
12114 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12115 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12116 }
12117 return V;
12118 }
12119 break;
12120case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tumu:
12121case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tumu:
12122case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tumu:
12123case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tumu:
12124 ID = Intrinsic::riscv_vlsseg8_mask;
12125 NF = 8;
12126 PolicyAttrs = 0;
12127IsMasked = true;
12128
12129 {
12130 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12131 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12132 SmallVector<llvm::Value*, 12> Operands;
12133
12134 // Please refer to comment under 'defvar NFList' in this file
12135 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12136 (!IsMasked && PolicyAttrs & RVV_VTA))
12137 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12138 else {
12139 if (IsMasked)
12140 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12141 else // Unmasked
12142 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12143 }
12144 unsigned PtrOperandIdx = IsMasked ?
12145 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12146 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12147 Value *PtrOperand = Ops[PtrOperandIdx];
12148 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12149 Value *VLOperand = Ops[PtrOperandIdx + 2];
12150 Operands.push_back(PtrOperand);
12151 Operands.push_back(StrideOperand);
12152 if (IsMasked)
12153 Operands.push_back(Ops[NF]);
12154 Operands.push_back(VLOperand);
12155 if (IsMasked)
12156 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12157
12158 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12159 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12160 clang::CharUnits Align =
12161 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12162 llvm::Value *V;
12163 for (unsigned I = 0; I < NF; ++I) {
12164 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12165 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12166 }
12167 return V;
12168 }
12169 break;
12170case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_mu:
12171case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_mu:
12172case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_mu:
12173case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_mu:
12174 ID = Intrinsic::riscv_vlsseg8_mask;
12175 NF = 8;
12176 PolicyAttrs = 1;
12177IsMasked = true;
12178
12179 {
12180 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12181 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12182 SmallVector<llvm::Value*, 12> Operands;
12183
12184 // Please refer to comment under 'defvar NFList' in this file
12185 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12186 (!IsMasked && PolicyAttrs & RVV_VTA))
12187 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12188 else {
12189 if (IsMasked)
12190 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12191 else // Unmasked
12192 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12193 }
12194 unsigned PtrOperandIdx = IsMasked ?
12195 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12196 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12197 Value *PtrOperand = Ops[PtrOperandIdx];
12198 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12199 Value *VLOperand = Ops[PtrOperandIdx + 2];
12200 Operands.push_back(PtrOperand);
12201 Operands.push_back(StrideOperand);
12202 if (IsMasked)
12203 Operands.push_back(Ops[NF]);
12204 Operands.push_back(VLOperand);
12205 if (IsMasked)
12206 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12207
12208 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12209 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12210 clang::CharUnits Align =
12211 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12212 llvm::Value *V;
12213 for (unsigned I = 0; I < NF; ++I) {
12214 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12215 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12216 }
12217 return V;
12218 }
12219 break;
12220case RISCVVector::BI__builtin_rvv_vluxei8_v_tu:
12221case RISCVVector::BI__builtin_rvv_vluxei64_v_tu:
12222case RISCVVector::BI__builtin_rvv_vluxei16_v_tu:
12223case RISCVVector::BI__builtin_rvv_vluxei32_v_tu:
12224 ID = Intrinsic::riscv_vluxei;
12225 PolicyAttrs = 2;
12226 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
12227 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12228 break;
12229case RISCVVector::BI__builtin_rvv_vluxei8_v_ta:
12230case RISCVVector::BI__builtin_rvv_vluxei64_v_ta:
12231case RISCVVector::BI__builtin_rvv_vluxei16_v_ta:
12232case RISCVVector::BI__builtin_rvv_vluxei32_v_ta:
12233 ID = Intrinsic::riscv_vluxei;
12234 PolicyAttrs = 3;
12235 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
12236 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
12237 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12238 break;
12239case RISCVVector::BI__builtin_rvv_vluxei8_v_tum:
12240case RISCVVector::BI__builtin_rvv_vluxei64_v_tum:
12241case RISCVVector::BI__builtin_rvv_vluxei16_v_tum:
12242case RISCVVector::BI__builtin_rvv_vluxei32_v_tum:
12243 ID = Intrinsic::riscv_vluxei_mask;
12244 PolicyAttrs = 2;
12245 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
12246 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12247 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12248 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12249 break;
12250case RISCVVector::BI__builtin_rvv_vluxei8_v_tama:
12251case RISCVVector::BI__builtin_rvv_vluxei64_v_tama:
12252case RISCVVector::BI__builtin_rvv_vluxei16_v_tama:
12253case RISCVVector::BI__builtin_rvv_vluxei32_v_tama:
12254 ID = Intrinsic::riscv_vluxei_mask;
12255 PolicyAttrs = 3;
12256 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
12257 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12258 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12259 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
12260 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12261 break;
12262case RISCVVector::BI__builtin_rvv_vluxei8_v_tumu:
12263case RISCVVector::BI__builtin_rvv_vluxei64_v_tumu:
12264case RISCVVector::BI__builtin_rvv_vluxei16_v_tumu:
12265case RISCVVector::BI__builtin_rvv_vluxei32_v_tumu:
12266 ID = Intrinsic::riscv_vluxei_mask;
12267 PolicyAttrs = 0;
12268 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
12269 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12270 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12271 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12272 break;
12273case RISCVVector::BI__builtin_rvv_vluxei8_v_mu:
12274case RISCVVector::BI__builtin_rvv_vluxei64_v_mu:
12275case RISCVVector::BI__builtin_rvv_vluxei16_v_mu:
12276case RISCVVector::BI__builtin_rvv_vluxei32_v_mu:
12277 ID = Intrinsic::riscv_vluxei_mask;
12278 PolicyAttrs = 1;
12279 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
12280 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12281 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12282 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12283 break;
12284case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tu:
12285case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tu:
12286case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tu:
12287case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tu:
12288 ID = Intrinsic::riscv_vluxseg2;
12289 NF = 2;
12290 PolicyAttrs = 2;
12291IsMasked = false;
12292
12293 {
12294 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12295 SmallVector<llvm::Value*, 12> Operands;
12296
12297 // Please refer to comment under 'defvar NFList' in this file
12298 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12299 (!IsMasked && PolicyAttrs & RVV_VTA))
12300 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12301 else {
12302 if (IsMasked)
12303 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12304 else // Unmasked
12305 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12306 }
12307 unsigned PtrOperandIdx = IsMasked ?
12308 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12309 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12310 Value *PtrOperand = Ops[PtrOperandIdx];
12311 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12312 Value *VLOperand = Ops[PtrOperandIdx + 2];
12313 Operands.push_back(PtrOperand);
12314 Operands.push_back(IndexOperand);
12315 if (IsMasked)
12316 Operands.push_back(Ops[NF]);
12317 Operands.push_back(VLOperand);
12318 if (IsMasked)
12319 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12320 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12321
12322 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12323 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12324 clang::CharUnits Align =
12325 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12326 llvm::Value *V;
12327 for (unsigned I = 0; I < NF; ++I) {
12328 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12329 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12330 }
12331 return V;
12332 }
12333 break;
12334case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_ta:
12335case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_ta:
12336case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_ta:
12337case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_ta:
12338 ID = Intrinsic::riscv_vluxseg2;
12339 NF = 2;
12340 PolicyAttrs = 3;
12341IsMasked = false;
12342
12343 {
12344 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12345 SmallVector<llvm::Value*, 12> Operands;
12346
12347 // Please refer to comment under 'defvar NFList' in this file
12348 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12349 (!IsMasked && PolicyAttrs & RVV_VTA))
12350 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12351 else {
12352 if (IsMasked)
12353 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12354 else // Unmasked
12355 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12356 }
12357 unsigned PtrOperandIdx = IsMasked ?
12358 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12359 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12360 Value *PtrOperand = Ops[PtrOperandIdx];
12361 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12362 Value *VLOperand = Ops[PtrOperandIdx + 2];
12363 Operands.push_back(PtrOperand);
12364 Operands.push_back(IndexOperand);
12365 if (IsMasked)
12366 Operands.push_back(Ops[NF]);
12367 Operands.push_back(VLOperand);
12368 if (IsMasked)
12369 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12370 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12371
12372 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12373 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12374 clang::CharUnits Align =
12375 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12376 llvm::Value *V;
12377 for (unsigned I = 0; I < NF; ++I) {
12378 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12379 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12380 }
12381 return V;
12382 }
12383 break;
12384case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tum:
12385case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tum:
12386case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tum:
12387case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tum:
12388 ID = Intrinsic::riscv_vluxseg2_mask;
12389 NF = 2;
12390 PolicyAttrs = 2;
12391IsMasked = true;
12392
12393 {
12394 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12395 SmallVector<llvm::Value*, 12> Operands;
12396
12397 // Please refer to comment under 'defvar NFList' in this file
12398 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12399 (!IsMasked && PolicyAttrs & RVV_VTA))
12400 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12401 else {
12402 if (IsMasked)
12403 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12404 else // Unmasked
12405 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12406 }
12407 unsigned PtrOperandIdx = IsMasked ?
12408 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12409 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12410 Value *PtrOperand = Ops[PtrOperandIdx];
12411 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12412 Value *VLOperand = Ops[PtrOperandIdx + 2];
12413 Operands.push_back(PtrOperand);
12414 Operands.push_back(IndexOperand);
12415 if (IsMasked)
12416 Operands.push_back(Ops[NF]);
12417 Operands.push_back(VLOperand);
12418 if (IsMasked)
12419 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12420 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12421
12422 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12423 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12424 clang::CharUnits Align =
12425 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12426 llvm::Value *V;
12427 for (unsigned I = 0; I < NF; ++I) {
12428 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12429 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12430 }
12431 return V;
12432 }
12433 break;
12434case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tama:
12435case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tama:
12436case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tama:
12437case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tama:
12438 ID = Intrinsic::riscv_vluxseg2_mask;
12439 NF = 2;
12440 PolicyAttrs = 3;
12441IsMasked = true;
12442
12443 {
12444 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12445 SmallVector<llvm::Value*, 12> Operands;
12446
12447 // Please refer to comment under 'defvar NFList' in this file
12448 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12449 (!IsMasked && PolicyAttrs & RVV_VTA))
12450 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12451 else {
12452 if (IsMasked)
12453 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12454 else // Unmasked
12455 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12456 }
12457 unsigned PtrOperandIdx = IsMasked ?
12458 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12459 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12460 Value *PtrOperand = Ops[PtrOperandIdx];
12461 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12462 Value *VLOperand = Ops[PtrOperandIdx + 2];
12463 Operands.push_back(PtrOperand);
12464 Operands.push_back(IndexOperand);
12465 if (IsMasked)
12466 Operands.push_back(Ops[NF]);
12467 Operands.push_back(VLOperand);
12468 if (IsMasked)
12469 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12470 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12471
12472 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12473 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12474 clang::CharUnits Align =
12475 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12476 llvm::Value *V;
12477 for (unsigned I = 0; I < NF; ++I) {
12478 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12479 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12480 }
12481 return V;
12482 }
12483 break;
12484case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tumu:
12485case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tumu:
12486case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tumu:
12487case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tumu:
12488 ID = Intrinsic::riscv_vluxseg2_mask;
12489 NF = 2;
12490 PolicyAttrs = 0;
12491IsMasked = true;
12492
12493 {
12494 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12495 SmallVector<llvm::Value*, 12> Operands;
12496
12497 // Please refer to comment under 'defvar NFList' in this file
12498 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12499 (!IsMasked && PolicyAttrs & RVV_VTA))
12500 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12501 else {
12502 if (IsMasked)
12503 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12504 else // Unmasked
12505 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12506 }
12507 unsigned PtrOperandIdx = IsMasked ?
12508 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12509 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12510 Value *PtrOperand = Ops[PtrOperandIdx];
12511 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12512 Value *VLOperand = Ops[PtrOperandIdx + 2];
12513 Operands.push_back(PtrOperand);
12514 Operands.push_back(IndexOperand);
12515 if (IsMasked)
12516 Operands.push_back(Ops[NF]);
12517 Operands.push_back(VLOperand);
12518 if (IsMasked)
12519 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12520 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12521
12522 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12523 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12524 clang::CharUnits Align =
12525 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12526 llvm::Value *V;
12527 for (unsigned I = 0; I < NF; ++I) {
12528 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12529 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12530 }
12531 return V;
12532 }
12533 break;
12534case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_mu:
12535case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_mu:
12536case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_mu:
12537case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_mu:
12538 ID = Intrinsic::riscv_vluxseg2_mask;
12539 NF = 2;
12540 PolicyAttrs = 1;
12541IsMasked = true;
12542
12543 {
12544 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12545 SmallVector<llvm::Value*, 12> Operands;
12546
12547 // Please refer to comment under 'defvar NFList' in this file
12548 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12549 (!IsMasked && PolicyAttrs & RVV_VTA))
12550 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12551 else {
12552 if (IsMasked)
12553 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12554 else // Unmasked
12555 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12556 }
12557 unsigned PtrOperandIdx = IsMasked ?
12558 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12559 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12560 Value *PtrOperand = Ops[PtrOperandIdx];
12561 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12562 Value *VLOperand = Ops[PtrOperandIdx + 2];
12563 Operands.push_back(PtrOperand);
12564 Operands.push_back(IndexOperand);
12565 if (IsMasked)
12566 Operands.push_back(Ops[NF]);
12567 Operands.push_back(VLOperand);
12568 if (IsMasked)
12569 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12570 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12571
12572 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12573 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12574 clang::CharUnits Align =
12575 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12576 llvm::Value *V;
12577 for (unsigned I = 0; I < NF; ++I) {
12578 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12579 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12580 }
12581 return V;
12582 }
12583 break;
12584case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tu:
12585case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tu:
12586case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tu:
12587case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tu:
12588 ID = Intrinsic::riscv_vluxseg3;
12589 NF = 3;
12590 PolicyAttrs = 2;
12591IsMasked = false;
12592
12593 {
12594 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12595 SmallVector<llvm::Value*, 12> Operands;
12596
12597 // Please refer to comment under 'defvar NFList' in this file
12598 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12599 (!IsMasked && PolicyAttrs & RVV_VTA))
12600 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12601 else {
12602 if (IsMasked)
12603 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12604 else // Unmasked
12605 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12606 }
12607 unsigned PtrOperandIdx = IsMasked ?
12608 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12609 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12610 Value *PtrOperand = Ops[PtrOperandIdx];
12611 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12612 Value *VLOperand = Ops[PtrOperandIdx + 2];
12613 Operands.push_back(PtrOperand);
12614 Operands.push_back(IndexOperand);
12615 if (IsMasked)
12616 Operands.push_back(Ops[NF]);
12617 Operands.push_back(VLOperand);
12618 if (IsMasked)
12619 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12620 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12621
12622 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12623 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12624 clang::CharUnits Align =
12625 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12626 llvm::Value *V;
12627 for (unsigned I = 0; I < NF; ++I) {
12628 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12629 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12630 }
12631 return V;
12632 }
12633 break;
12634case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_ta:
12635case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_ta:
12636case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_ta:
12637case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_ta:
12638 ID = Intrinsic::riscv_vluxseg3;
12639 NF = 3;
12640 PolicyAttrs = 3;
12641IsMasked = false;
12642
12643 {
12644 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12645 SmallVector<llvm::Value*, 12> Operands;
12646
12647 // Please refer to comment under 'defvar NFList' in this file
12648 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12649 (!IsMasked && PolicyAttrs & RVV_VTA))
12650 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12651 else {
12652 if (IsMasked)
12653 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12654 else // Unmasked
12655 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12656 }
12657 unsigned PtrOperandIdx = IsMasked ?
12658 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12659 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12660 Value *PtrOperand = Ops[PtrOperandIdx];
12661 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12662 Value *VLOperand = Ops[PtrOperandIdx + 2];
12663 Operands.push_back(PtrOperand);
12664 Operands.push_back(IndexOperand);
12665 if (IsMasked)
12666 Operands.push_back(Ops[NF]);
12667 Operands.push_back(VLOperand);
12668 if (IsMasked)
12669 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12670 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12671
12672 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12673 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12674 clang::CharUnits Align =
12675 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12676 llvm::Value *V;
12677 for (unsigned I = 0; I < NF; ++I) {
12678 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12679 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12680 }
12681 return V;
12682 }
12683 break;
12684case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tum:
12685case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tum:
12686case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tum:
12687case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tum:
12688 ID = Intrinsic::riscv_vluxseg3_mask;
12689 NF = 3;
12690 PolicyAttrs = 2;
12691IsMasked = true;
12692
12693 {
12694 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12695 SmallVector<llvm::Value*, 12> Operands;
12696
12697 // Please refer to comment under 'defvar NFList' in this file
12698 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12699 (!IsMasked && PolicyAttrs & RVV_VTA))
12700 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12701 else {
12702 if (IsMasked)
12703 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12704 else // Unmasked
12705 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12706 }
12707 unsigned PtrOperandIdx = IsMasked ?
12708 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12709 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12710 Value *PtrOperand = Ops[PtrOperandIdx];
12711 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12712 Value *VLOperand = Ops[PtrOperandIdx + 2];
12713 Operands.push_back(PtrOperand);
12714 Operands.push_back(IndexOperand);
12715 if (IsMasked)
12716 Operands.push_back(Ops[NF]);
12717 Operands.push_back(VLOperand);
12718 if (IsMasked)
12719 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12720 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12721
12722 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12723 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12724 clang::CharUnits Align =
12725 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12726 llvm::Value *V;
12727 for (unsigned I = 0; I < NF; ++I) {
12728 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12729 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12730 }
12731 return V;
12732 }
12733 break;
12734case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tama:
12735case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tama:
12736case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tama:
12737case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tama:
12738 ID = Intrinsic::riscv_vluxseg3_mask;
12739 NF = 3;
12740 PolicyAttrs = 3;
12741IsMasked = true;
12742
12743 {
12744 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12745 SmallVector<llvm::Value*, 12> Operands;
12746
12747 // Please refer to comment under 'defvar NFList' in this file
12748 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12749 (!IsMasked && PolicyAttrs & RVV_VTA))
12750 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12751 else {
12752 if (IsMasked)
12753 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12754 else // Unmasked
12755 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12756 }
12757 unsigned PtrOperandIdx = IsMasked ?
12758 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12759 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12760 Value *PtrOperand = Ops[PtrOperandIdx];
12761 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12762 Value *VLOperand = Ops[PtrOperandIdx + 2];
12763 Operands.push_back(PtrOperand);
12764 Operands.push_back(IndexOperand);
12765 if (IsMasked)
12766 Operands.push_back(Ops[NF]);
12767 Operands.push_back(VLOperand);
12768 if (IsMasked)
12769 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12770 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12771
12772 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12773 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12774 clang::CharUnits Align =
12775 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12776 llvm::Value *V;
12777 for (unsigned I = 0; I < NF; ++I) {
12778 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12779 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12780 }
12781 return V;
12782 }
12783 break;
12784case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tumu:
12785case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tumu:
12786case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tumu:
12787case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tumu:
12788 ID = Intrinsic::riscv_vluxseg3_mask;
12789 NF = 3;
12790 PolicyAttrs = 0;
12791IsMasked = true;
12792
12793 {
12794 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12795 SmallVector<llvm::Value*, 12> Operands;
12796
12797 // Please refer to comment under 'defvar NFList' in this file
12798 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12799 (!IsMasked && PolicyAttrs & RVV_VTA))
12800 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12801 else {
12802 if (IsMasked)
12803 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12804 else // Unmasked
12805 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12806 }
12807 unsigned PtrOperandIdx = IsMasked ?
12808 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12809 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12810 Value *PtrOperand = Ops[PtrOperandIdx];
12811 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12812 Value *VLOperand = Ops[PtrOperandIdx + 2];
12813 Operands.push_back(PtrOperand);
12814 Operands.push_back(IndexOperand);
12815 if (IsMasked)
12816 Operands.push_back(Ops[NF]);
12817 Operands.push_back(VLOperand);
12818 if (IsMasked)
12819 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12820 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12821
12822 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12823 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12824 clang::CharUnits Align =
12825 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12826 llvm::Value *V;
12827 for (unsigned I = 0; I < NF; ++I) {
12828 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12829 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12830 }
12831 return V;
12832 }
12833 break;
12834case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_mu:
12835case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_mu:
12836case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_mu:
12837case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_mu:
12838 ID = Intrinsic::riscv_vluxseg3_mask;
12839 NF = 3;
12840 PolicyAttrs = 1;
12841IsMasked = true;
12842
12843 {
12844 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12845 SmallVector<llvm::Value*, 12> Operands;
12846
12847 // Please refer to comment under 'defvar NFList' in this file
12848 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12849 (!IsMasked && PolicyAttrs & RVV_VTA))
12850 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12851 else {
12852 if (IsMasked)
12853 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12854 else // Unmasked
12855 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12856 }
12857 unsigned PtrOperandIdx = IsMasked ?
12858 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12859 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12860 Value *PtrOperand = Ops[PtrOperandIdx];
12861 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12862 Value *VLOperand = Ops[PtrOperandIdx + 2];
12863 Operands.push_back(PtrOperand);
12864 Operands.push_back(IndexOperand);
12865 if (IsMasked)
12866 Operands.push_back(Ops[NF]);
12867 Operands.push_back(VLOperand);
12868 if (IsMasked)
12869 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12870 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12871
12872 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12873 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12874 clang::CharUnits Align =
12875 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12876 llvm::Value *V;
12877 for (unsigned I = 0; I < NF; ++I) {
12878 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12879 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12880 }
12881 return V;
12882 }
12883 break;
12884case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tu:
12885case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tu:
12886case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tu:
12887case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tu:
12888 ID = Intrinsic::riscv_vluxseg4;
12889 NF = 4;
12890 PolicyAttrs = 2;
12891IsMasked = false;
12892
12893 {
12894 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12895 SmallVector<llvm::Value*, 12> Operands;
12896
12897 // Please refer to comment under 'defvar NFList' in this file
12898 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12899 (!IsMasked && PolicyAttrs & RVV_VTA))
12900 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12901 else {
12902 if (IsMasked)
12903 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12904 else // Unmasked
12905 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12906 }
12907 unsigned PtrOperandIdx = IsMasked ?
12908 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12909 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12910 Value *PtrOperand = Ops[PtrOperandIdx];
12911 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12912 Value *VLOperand = Ops[PtrOperandIdx + 2];
12913 Operands.push_back(PtrOperand);
12914 Operands.push_back(IndexOperand);
12915 if (IsMasked)
12916 Operands.push_back(Ops[NF]);
12917 Operands.push_back(VLOperand);
12918 if (IsMasked)
12919 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12920 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12921
12922 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12923 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12924 clang::CharUnits Align =
12925 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12926 llvm::Value *V;
12927 for (unsigned I = 0; I < NF; ++I) {
12928 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12929 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12930 }
12931 return V;
12932 }
12933 break;
12934case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_ta:
12935case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_ta:
12936case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_ta:
12937case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_ta:
12938 ID = Intrinsic::riscv_vluxseg4;
12939 NF = 4;
12940 PolicyAttrs = 3;
12941IsMasked = false;
12942
12943 {
12944 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12945 SmallVector<llvm::Value*, 12> Operands;
12946
12947 // Please refer to comment under 'defvar NFList' in this file
12948 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12949 (!IsMasked && PolicyAttrs & RVV_VTA))
12950 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12951 else {
12952 if (IsMasked)
12953 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12954 else // Unmasked
12955 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12956 }
12957 unsigned PtrOperandIdx = IsMasked ?
12958 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12959 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12960 Value *PtrOperand = Ops[PtrOperandIdx];
12961 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12962 Value *VLOperand = Ops[PtrOperandIdx + 2];
12963 Operands.push_back(PtrOperand);
12964 Operands.push_back(IndexOperand);
12965 if (IsMasked)
12966 Operands.push_back(Ops[NF]);
12967 Operands.push_back(VLOperand);
12968 if (IsMasked)
12969 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12970 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12971
12972 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12973 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12974 clang::CharUnits Align =
12975 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12976 llvm::Value *V;
12977 for (unsigned I = 0; I < NF; ++I) {
12978 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12979 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12980 }
12981 return V;
12982 }
12983 break;
12984case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tum:
12985case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tum:
12986case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tum:
12987case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tum:
12988 ID = Intrinsic::riscv_vluxseg4_mask;
12989 NF = 4;
12990 PolicyAttrs = 2;
12991IsMasked = true;
12992
12993 {
12994 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12995 SmallVector<llvm::Value*, 12> Operands;
12996
12997 // Please refer to comment under 'defvar NFList' in this file
12998 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12999 (!IsMasked && PolicyAttrs & RVV_VTA))
13000 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13001 else {
13002 if (IsMasked)
13003 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13004 else // Unmasked
13005 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13006 }
13007 unsigned PtrOperandIdx = IsMasked ?
13008 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13009 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13010 Value *PtrOperand = Ops[PtrOperandIdx];
13011 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13012 Value *VLOperand = Ops[PtrOperandIdx + 2];
13013 Operands.push_back(PtrOperand);
13014 Operands.push_back(IndexOperand);
13015 if (IsMasked)
13016 Operands.push_back(Ops[NF]);
13017 Operands.push_back(VLOperand);
13018 if (IsMasked)
13019 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13020 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13021
13022 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13023 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13024 clang::CharUnits Align =
13025 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13026 llvm::Value *V;
13027 for (unsigned I = 0; I < NF; ++I) {
13028 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13029 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13030 }
13031 return V;
13032 }
13033 break;
13034case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tama:
13035case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tama:
13036case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tama:
13037case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tama:
13038 ID = Intrinsic::riscv_vluxseg4_mask;
13039 NF = 4;
13040 PolicyAttrs = 3;
13041IsMasked = true;
13042
13043 {
13044 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13045 SmallVector<llvm::Value*, 12> Operands;
13046
13047 // Please refer to comment under 'defvar NFList' in this file
13048 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13049 (!IsMasked && PolicyAttrs & RVV_VTA))
13050 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13051 else {
13052 if (IsMasked)
13053 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13054 else // Unmasked
13055 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13056 }
13057 unsigned PtrOperandIdx = IsMasked ?
13058 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13059 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13060 Value *PtrOperand = Ops[PtrOperandIdx];
13061 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13062 Value *VLOperand = Ops[PtrOperandIdx + 2];
13063 Operands.push_back(PtrOperand);
13064 Operands.push_back(IndexOperand);
13065 if (IsMasked)
13066 Operands.push_back(Ops[NF]);
13067 Operands.push_back(VLOperand);
13068 if (IsMasked)
13069 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13070 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13071
13072 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13073 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13074 clang::CharUnits Align =
13075 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13076 llvm::Value *V;
13077 for (unsigned I = 0; I < NF; ++I) {
13078 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13079 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13080 }
13081 return V;
13082 }
13083 break;
13084case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tumu:
13085case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tumu:
13086case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tumu:
13087case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tumu:
13088 ID = Intrinsic::riscv_vluxseg4_mask;
13089 NF = 4;
13090 PolicyAttrs = 0;
13091IsMasked = true;
13092
13093 {
13094 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13095 SmallVector<llvm::Value*, 12> Operands;
13096
13097 // Please refer to comment under 'defvar NFList' in this file
13098 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13099 (!IsMasked && PolicyAttrs & RVV_VTA))
13100 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13101 else {
13102 if (IsMasked)
13103 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13104 else // Unmasked
13105 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13106 }
13107 unsigned PtrOperandIdx = IsMasked ?
13108 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13109 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13110 Value *PtrOperand = Ops[PtrOperandIdx];
13111 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13112 Value *VLOperand = Ops[PtrOperandIdx + 2];
13113 Operands.push_back(PtrOperand);
13114 Operands.push_back(IndexOperand);
13115 if (IsMasked)
13116 Operands.push_back(Ops[NF]);
13117 Operands.push_back(VLOperand);
13118 if (IsMasked)
13119 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13120 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13121
13122 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13123 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13124 clang::CharUnits Align =
13125 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13126 llvm::Value *V;
13127 for (unsigned I = 0; I < NF; ++I) {
13128 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13129 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13130 }
13131 return V;
13132 }
13133 break;
13134case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_mu:
13135case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_mu:
13136case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_mu:
13137case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_mu:
13138 ID = Intrinsic::riscv_vluxseg4_mask;
13139 NF = 4;
13140 PolicyAttrs = 1;
13141IsMasked = true;
13142
13143 {
13144 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13145 SmallVector<llvm::Value*, 12> Operands;
13146
13147 // Please refer to comment under 'defvar NFList' in this file
13148 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13149 (!IsMasked && PolicyAttrs & RVV_VTA))
13150 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13151 else {
13152 if (IsMasked)
13153 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13154 else // Unmasked
13155 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13156 }
13157 unsigned PtrOperandIdx = IsMasked ?
13158 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13159 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13160 Value *PtrOperand = Ops[PtrOperandIdx];
13161 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13162 Value *VLOperand = Ops[PtrOperandIdx + 2];
13163 Operands.push_back(PtrOperand);
13164 Operands.push_back(IndexOperand);
13165 if (IsMasked)
13166 Operands.push_back(Ops[NF]);
13167 Operands.push_back(VLOperand);
13168 if (IsMasked)
13169 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13170 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13171
13172 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13173 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13174 clang::CharUnits Align =
13175 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13176 llvm::Value *V;
13177 for (unsigned I = 0; I < NF; ++I) {
13178 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13179 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13180 }
13181 return V;
13182 }
13183 break;
13184case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tu:
13185case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tu:
13186case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tu:
13187case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tu:
13188 ID = Intrinsic::riscv_vluxseg5;
13189 NF = 5;
13190 PolicyAttrs = 2;
13191IsMasked = false;
13192
13193 {
13194 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13195 SmallVector<llvm::Value*, 12> Operands;
13196
13197 // Please refer to comment under 'defvar NFList' in this file
13198 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13199 (!IsMasked && PolicyAttrs & RVV_VTA))
13200 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13201 else {
13202 if (IsMasked)
13203 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13204 else // Unmasked
13205 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13206 }
13207 unsigned PtrOperandIdx = IsMasked ?
13208 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13209 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13210 Value *PtrOperand = Ops[PtrOperandIdx];
13211 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13212 Value *VLOperand = Ops[PtrOperandIdx + 2];
13213 Operands.push_back(PtrOperand);
13214 Operands.push_back(IndexOperand);
13215 if (IsMasked)
13216 Operands.push_back(Ops[NF]);
13217 Operands.push_back(VLOperand);
13218 if (IsMasked)
13219 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13220 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13221
13222 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13223 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13224 clang::CharUnits Align =
13225 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13226 llvm::Value *V;
13227 for (unsigned I = 0; I < NF; ++I) {
13228 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13229 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13230 }
13231 return V;
13232 }
13233 break;
13234case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_ta:
13235case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_ta:
13236case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_ta:
13237case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_ta:
13238 ID = Intrinsic::riscv_vluxseg5;
13239 NF = 5;
13240 PolicyAttrs = 3;
13241IsMasked = false;
13242
13243 {
13244 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13245 SmallVector<llvm::Value*, 12> Operands;
13246
13247 // Please refer to comment under 'defvar NFList' in this file
13248 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13249 (!IsMasked && PolicyAttrs & RVV_VTA))
13250 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13251 else {
13252 if (IsMasked)
13253 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13254 else // Unmasked
13255 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13256 }
13257 unsigned PtrOperandIdx = IsMasked ?
13258 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13259 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13260 Value *PtrOperand = Ops[PtrOperandIdx];
13261 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13262 Value *VLOperand = Ops[PtrOperandIdx + 2];
13263 Operands.push_back(PtrOperand);
13264 Operands.push_back(IndexOperand);
13265 if (IsMasked)
13266 Operands.push_back(Ops[NF]);
13267 Operands.push_back(VLOperand);
13268 if (IsMasked)
13269 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13270 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13271
13272 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13273 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13274 clang::CharUnits Align =
13275 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13276 llvm::Value *V;
13277 for (unsigned I = 0; I < NF; ++I) {
13278 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13279 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13280 }
13281 return V;
13282 }
13283 break;
13284case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tum:
13285case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tum:
13286case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tum:
13287case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tum:
13288 ID = Intrinsic::riscv_vluxseg5_mask;
13289 NF = 5;
13290 PolicyAttrs = 2;
13291IsMasked = true;
13292
13293 {
13294 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13295 SmallVector<llvm::Value*, 12> Operands;
13296
13297 // Please refer to comment under 'defvar NFList' in this file
13298 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13299 (!IsMasked && PolicyAttrs & RVV_VTA))
13300 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13301 else {
13302 if (IsMasked)
13303 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13304 else // Unmasked
13305 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13306 }
13307 unsigned PtrOperandIdx = IsMasked ?
13308 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13309 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13310 Value *PtrOperand = Ops[PtrOperandIdx];
13311 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13312 Value *VLOperand = Ops[PtrOperandIdx + 2];
13313 Operands.push_back(PtrOperand);
13314 Operands.push_back(IndexOperand);
13315 if (IsMasked)
13316 Operands.push_back(Ops[NF]);
13317 Operands.push_back(VLOperand);
13318 if (IsMasked)
13319 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13320 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13321
13322 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13323 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13324 clang::CharUnits Align =
13325 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13326 llvm::Value *V;
13327 for (unsigned I = 0; I < NF; ++I) {
13328 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13329 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13330 }
13331 return V;
13332 }
13333 break;
13334case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tama:
13335case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tama:
13336case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tama:
13337case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tama:
13338 ID = Intrinsic::riscv_vluxseg5_mask;
13339 NF = 5;
13340 PolicyAttrs = 3;
13341IsMasked = true;
13342
13343 {
13344 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13345 SmallVector<llvm::Value*, 12> Operands;
13346
13347 // Please refer to comment under 'defvar NFList' in this file
13348 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13349 (!IsMasked && PolicyAttrs & RVV_VTA))
13350 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13351 else {
13352 if (IsMasked)
13353 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13354 else // Unmasked
13355 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13356 }
13357 unsigned PtrOperandIdx = IsMasked ?
13358 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13359 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13360 Value *PtrOperand = Ops[PtrOperandIdx];
13361 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13362 Value *VLOperand = Ops[PtrOperandIdx + 2];
13363 Operands.push_back(PtrOperand);
13364 Operands.push_back(IndexOperand);
13365 if (IsMasked)
13366 Operands.push_back(Ops[NF]);
13367 Operands.push_back(VLOperand);
13368 if (IsMasked)
13369 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13370 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13371
13372 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13373 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13374 clang::CharUnits Align =
13375 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13376 llvm::Value *V;
13377 for (unsigned I = 0; I < NF; ++I) {
13378 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13379 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13380 }
13381 return V;
13382 }
13383 break;
13384case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tumu:
13385case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tumu:
13386case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tumu:
13387case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tumu:
13388 ID = Intrinsic::riscv_vluxseg5_mask;
13389 NF = 5;
13390 PolicyAttrs = 0;
13391IsMasked = true;
13392
13393 {
13394 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13395 SmallVector<llvm::Value*, 12> Operands;
13396
13397 // Please refer to comment under 'defvar NFList' in this file
13398 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13399 (!IsMasked && PolicyAttrs & RVV_VTA))
13400 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13401 else {
13402 if (IsMasked)
13403 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13404 else // Unmasked
13405 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13406 }
13407 unsigned PtrOperandIdx = IsMasked ?
13408 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13409 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13410 Value *PtrOperand = Ops[PtrOperandIdx];
13411 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13412 Value *VLOperand = Ops[PtrOperandIdx + 2];
13413 Operands.push_back(PtrOperand);
13414 Operands.push_back(IndexOperand);
13415 if (IsMasked)
13416 Operands.push_back(Ops[NF]);
13417 Operands.push_back(VLOperand);
13418 if (IsMasked)
13419 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13420 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13421
13422 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13423 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13424 clang::CharUnits Align =
13425 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13426 llvm::Value *V;
13427 for (unsigned I = 0; I < NF; ++I) {
13428 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13429 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13430 }
13431 return V;
13432 }
13433 break;
13434case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_mu:
13435case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_mu:
13436case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_mu:
13437case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_mu:
13438 ID = Intrinsic::riscv_vluxseg5_mask;
13439 NF = 5;
13440 PolicyAttrs = 1;
13441IsMasked = true;
13442
13443 {
13444 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13445 SmallVector<llvm::Value*, 12> Operands;
13446
13447 // Please refer to comment under 'defvar NFList' in this file
13448 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13449 (!IsMasked && PolicyAttrs & RVV_VTA))
13450 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13451 else {
13452 if (IsMasked)
13453 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13454 else // Unmasked
13455 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13456 }
13457 unsigned PtrOperandIdx = IsMasked ?
13458 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13459 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13460 Value *PtrOperand = Ops[PtrOperandIdx];
13461 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13462 Value *VLOperand = Ops[PtrOperandIdx + 2];
13463 Operands.push_back(PtrOperand);
13464 Operands.push_back(IndexOperand);
13465 if (IsMasked)
13466 Operands.push_back(Ops[NF]);
13467 Operands.push_back(VLOperand);
13468 if (IsMasked)
13469 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13470 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13471
13472 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13473 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13474 clang::CharUnits Align =
13475 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13476 llvm::Value *V;
13477 for (unsigned I = 0; I < NF; ++I) {
13478 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13479 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13480 }
13481 return V;
13482 }
13483 break;
13484case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tu:
13485case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tu:
13486case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tu:
13487case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tu:
13488 ID = Intrinsic::riscv_vluxseg6;
13489 NF = 6;
13490 PolicyAttrs = 2;
13491IsMasked = false;
13492
13493 {
13494 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13495 SmallVector<llvm::Value*, 12> Operands;
13496
13497 // Please refer to comment under 'defvar NFList' in this file
13498 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13499 (!IsMasked && PolicyAttrs & RVV_VTA))
13500 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13501 else {
13502 if (IsMasked)
13503 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13504 else // Unmasked
13505 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13506 }
13507 unsigned PtrOperandIdx = IsMasked ?
13508 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13509 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13510 Value *PtrOperand = Ops[PtrOperandIdx];
13511 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13512 Value *VLOperand = Ops[PtrOperandIdx + 2];
13513 Operands.push_back(PtrOperand);
13514 Operands.push_back(IndexOperand);
13515 if (IsMasked)
13516 Operands.push_back(Ops[NF]);
13517 Operands.push_back(VLOperand);
13518 if (IsMasked)
13519 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13520 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13521
13522 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13523 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13524 clang::CharUnits Align =
13525 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13526 llvm::Value *V;
13527 for (unsigned I = 0; I < NF; ++I) {
13528 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13529 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13530 }
13531 return V;
13532 }
13533 break;
13534case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_ta:
13535case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_ta:
13536case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_ta:
13537case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_ta:
13538 ID = Intrinsic::riscv_vluxseg6;
13539 NF = 6;
13540 PolicyAttrs = 3;
13541IsMasked = false;
13542
13543 {
13544 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13545 SmallVector<llvm::Value*, 12> Operands;
13546
13547 // Please refer to comment under 'defvar NFList' in this file
13548 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13549 (!IsMasked && PolicyAttrs & RVV_VTA))
13550 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13551 else {
13552 if (IsMasked)
13553 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13554 else // Unmasked
13555 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13556 }
13557 unsigned PtrOperandIdx = IsMasked ?
13558 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13559 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13560 Value *PtrOperand = Ops[PtrOperandIdx];
13561 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13562 Value *VLOperand = Ops[PtrOperandIdx + 2];
13563 Operands.push_back(PtrOperand);
13564 Operands.push_back(IndexOperand);
13565 if (IsMasked)
13566 Operands.push_back(Ops[NF]);
13567 Operands.push_back(VLOperand);
13568 if (IsMasked)
13569 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13570 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13571
13572 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13573 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13574 clang::CharUnits Align =
13575 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13576 llvm::Value *V;
13577 for (unsigned I = 0; I < NF; ++I) {
13578 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13579 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13580 }
13581 return V;
13582 }
13583 break;
13584case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tum:
13585case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tum:
13586case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tum:
13587case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tum:
13588 ID = Intrinsic::riscv_vluxseg6_mask;
13589 NF = 6;
13590 PolicyAttrs = 2;
13591IsMasked = true;
13592
13593 {
13594 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13595 SmallVector<llvm::Value*, 12> Operands;
13596
13597 // Please refer to comment under 'defvar NFList' in this file
13598 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13599 (!IsMasked && PolicyAttrs & RVV_VTA))
13600 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13601 else {
13602 if (IsMasked)
13603 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13604 else // Unmasked
13605 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13606 }
13607 unsigned PtrOperandIdx = IsMasked ?
13608 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13609 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13610 Value *PtrOperand = Ops[PtrOperandIdx];
13611 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13612 Value *VLOperand = Ops[PtrOperandIdx + 2];
13613 Operands.push_back(PtrOperand);
13614 Operands.push_back(IndexOperand);
13615 if (IsMasked)
13616 Operands.push_back(Ops[NF]);
13617 Operands.push_back(VLOperand);
13618 if (IsMasked)
13619 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13620 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13621
13622 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13623 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13624 clang::CharUnits Align =
13625 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13626 llvm::Value *V;
13627 for (unsigned I = 0; I < NF; ++I) {
13628 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13629 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13630 }
13631 return V;
13632 }
13633 break;
13634case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tama:
13635case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tama:
13636case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tama:
13637case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tama:
13638 ID = Intrinsic::riscv_vluxseg6_mask;
13639 NF = 6;
13640 PolicyAttrs = 3;
13641IsMasked = true;
13642
13643 {
13644 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13645 SmallVector<llvm::Value*, 12> Operands;
13646
13647 // Please refer to comment under 'defvar NFList' in this file
13648 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13649 (!IsMasked && PolicyAttrs & RVV_VTA))
13650 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13651 else {
13652 if (IsMasked)
13653 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13654 else // Unmasked
13655 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13656 }
13657 unsigned PtrOperandIdx = IsMasked ?
13658 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13659 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13660 Value *PtrOperand = Ops[PtrOperandIdx];
13661 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13662 Value *VLOperand = Ops[PtrOperandIdx + 2];
13663 Operands.push_back(PtrOperand);
13664 Operands.push_back(IndexOperand);
13665 if (IsMasked)
13666 Operands.push_back(Ops[NF]);
13667 Operands.push_back(VLOperand);
13668 if (IsMasked)
13669 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13670 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13671
13672 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13673 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13674 clang::CharUnits Align =
13675 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13676 llvm::Value *V;
13677 for (unsigned I = 0; I < NF; ++I) {
13678 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13679 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13680 }
13681 return V;
13682 }
13683 break;
13684case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tumu:
13685case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tumu:
13686case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tumu:
13687case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tumu:
13688 ID = Intrinsic::riscv_vluxseg6_mask;
13689 NF = 6;
13690 PolicyAttrs = 0;
13691IsMasked = true;
13692
13693 {
13694 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13695 SmallVector<llvm::Value*, 12> Operands;
13696
13697 // Please refer to comment under 'defvar NFList' in this file
13698 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13699 (!IsMasked && PolicyAttrs & RVV_VTA))
13700 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13701 else {
13702 if (IsMasked)
13703 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13704 else // Unmasked
13705 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13706 }
13707 unsigned PtrOperandIdx = IsMasked ?
13708 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13709 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13710 Value *PtrOperand = Ops[PtrOperandIdx];
13711 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13712 Value *VLOperand = Ops[PtrOperandIdx + 2];
13713 Operands.push_back(PtrOperand);
13714 Operands.push_back(IndexOperand);
13715 if (IsMasked)
13716 Operands.push_back(Ops[NF]);
13717 Operands.push_back(VLOperand);
13718 if (IsMasked)
13719 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13720 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13721
13722 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13723 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13724 clang::CharUnits Align =
13725 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13726 llvm::Value *V;
13727 for (unsigned I = 0; I < NF; ++I) {
13728 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13729 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13730 }
13731 return V;
13732 }
13733 break;
13734case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_mu:
13735case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_mu:
13736case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_mu:
13737case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_mu:
13738 ID = Intrinsic::riscv_vluxseg6_mask;
13739 NF = 6;
13740 PolicyAttrs = 1;
13741IsMasked = true;
13742
13743 {
13744 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13745 SmallVector<llvm::Value*, 12> Operands;
13746
13747 // Please refer to comment under 'defvar NFList' in this file
13748 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13749 (!IsMasked && PolicyAttrs & RVV_VTA))
13750 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13751 else {
13752 if (IsMasked)
13753 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13754 else // Unmasked
13755 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13756 }
13757 unsigned PtrOperandIdx = IsMasked ?
13758 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13759 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13760 Value *PtrOperand = Ops[PtrOperandIdx];
13761 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13762 Value *VLOperand = Ops[PtrOperandIdx + 2];
13763 Operands.push_back(PtrOperand);
13764 Operands.push_back(IndexOperand);
13765 if (IsMasked)
13766 Operands.push_back(Ops[NF]);
13767 Operands.push_back(VLOperand);
13768 if (IsMasked)
13769 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13770 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13771
13772 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13773 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13774 clang::CharUnits Align =
13775 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13776 llvm::Value *V;
13777 for (unsigned I = 0; I < NF; ++I) {
13778 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13779 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13780 }
13781 return V;
13782 }
13783 break;
13784case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tu:
13785case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tu:
13786case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tu:
13787case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tu:
13788 ID = Intrinsic::riscv_vluxseg7;
13789 NF = 7;
13790 PolicyAttrs = 2;
13791IsMasked = false;
13792
13793 {
13794 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13795 SmallVector<llvm::Value*, 12> Operands;
13796
13797 // Please refer to comment under 'defvar NFList' in this file
13798 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13799 (!IsMasked && PolicyAttrs & RVV_VTA))
13800 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13801 else {
13802 if (IsMasked)
13803 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13804 else // Unmasked
13805 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13806 }
13807 unsigned PtrOperandIdx = IsMasked ?
13808 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13809 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13810 Value *PtrOperand = Ops[PtrOperandIdx];
13811 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13812 Value *VLOperand = Ops[PtrOperandIdx + 2];
13813 Operands.push_back(PtrOperand);
13814 Operands.push_back(IndexOperand);
13815 if (IsMasked)
13816 Operands.push_back(Ops[NF]);
13817 Operands.push_back(VLOperand);
13818 if (IsMasked)
13819 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13820 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13821
13822 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13823 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13824 clang::CharUnits Align =
13825 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13826 llvm::Value *V;
13827 for (unsigned I = 0; I < NF; ++I) {
13828 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13829 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13830 }
13831 return V;
13832 }
13833 break;
13834case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_ta:
13835case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_ta:
13836case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_ta:
13837case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_ta:
13838 ID = Intrinsic::riscv_vluxseg7;
13839 NF = 7;
13840 PolicyAttrs = 3;
13841IsMasked = false;
13842
13843 {
13844 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13845 SmallVector<llvm::Value*, 12> Operands;
13846
13847 // Please refer to comment under 'defvar NFList' in this file
13848 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13849 (!IsMasked && PolicyAttrs & RVV_VTA))
13850 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13851 else {
13852 if (IsMasked)
13853 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13854 else // Unmasked
13855 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13856 }
13857 unsigned PtrOperandIdx = IsMasked ?
13858 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13859 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13860 Value *PtrOperand = Ops[PtrOperandIdx];
13861 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13862 Value *VLOperand = Ops[PtrOperandIdx + 2];
13863 Operands.push_back(PtrOperand);
13864 Operands.push_back(IndexOperand);
13865 if (IsMasked)
13866 Operands.push_back(Ops[NF]);
13867 Operands.push_back(VLOperand);
13868 if (IsMasked)
13869 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13870 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13871
13872 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13873 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13874 clang::CharUnits Align =
13875 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13876 llvm::Value *V;
13877 for (unsigned I = 0; I < NF; ++I) {
13878 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13879 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13880 }
13881 return V;
13882 }
13883 break;
13884case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tum:
13885case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tum:
13886case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tum:
13887case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tum:
13888 ID = Intrinsic::riscv_vluxseg7_mask;
13889 NF = 7;
13890 PolicyAttrs = 2;
13891IsMasked = true;
13892
13893 {
13894 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13895 SmallVector<llvm::Value*, 12> Operands;
13896
13897 // Please refer to comment under 'defvar NFList' in this file
13898 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13899 (!IsMasked && PolicyAttrs & RVV_VTA))
13900 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13901 else {
13902 if (IsMasked)
13903 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13904 else // Unmasked
13905 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13906 }
13907 unsigned PtrOperandIdx = IsMasked ?
13908 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13909 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13910 Value *PtrOperand = Ops[PtrOperandIdx];
13911 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13912 Value *VLOperand = Ops[PtrOperandIdx + 2];
13913 Operands.push_back(PtrOperand);
13914 Operands.push_back(IndexOperand);
13915 if (IsMasked)
13916 Operands.push_back(Ops[NF]);
13917 Operands.push_back(VLOperand);
13918 if (IsMasked)
13919 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13920 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13921
13922 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13923 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13924 clang::CharUnits Align =
13925 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13926 llvm::Value *V;
13927 for (unsigned I = 0; I < NF; ++I) {
13928 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13929 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13930 }
13931 return V;
13932 }
13933 break;
13934case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tama:
13935case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tama:
13936case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tama:
13937case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tama:
13938 ID = Intrinsic::riscv_vluxseg7_mask;
13939 NF = 7;
13940 PolicyAttrs = 3;
13941IsMasked = true;
13942
13943 {
13944 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13945 SmallVector<llvm::Value*, 12> Operands;
13946
13947 // Please refer to comment under 'defvar NFList' in this file
13948 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13949 (!IsMasked && PolicyAttrs & RVV_VTA))
13950 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13951 else {
13952 if (IsMasked)
13953 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13954 else // Unmasked
13955 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13956 }
13957 unsigned PtrOperandIdx = IsMasked ?
13958 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13959 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13960 Value *PtrOperand = Ops[PtrOperandIdx];
13961 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13962 Value *VLOperand = Ops[PtrOperandIdx + 2];
13963 Operands.push_back(PtrOperand);
13964 Operands.push_back(IndexOperand);
13965 if (IsMasked)
13966 Operands.push_back(Ops[NF]);
13967 Operands.push_back(VLOperand);
13968 if (IsMasked)
13969 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13970 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13971
13972 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13973 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13974 clang::CharUnits Align =
13975 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13976 llvm::Value *V;
13977 for (unsigned I = 0; I < NF; ++I) {
13978 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13979 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13980 }
13981 return V;
13982 }
13983 break;
13984case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tumu:
13985case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tumu:
13986case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tumu:
13987case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tumu:
13988 ID = Intrinsic::riscv_vluxseg7_mask;
13989 NF = 7;
13990 PolicyAttrs = 0;
13991IsMasked = true;
13992
13993 {
13994 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13995 SmallVector<llvm::Value*, 12> Operands;
13996
13997 // Please refer to comment under 'defvar NFList' in this file
13998 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13999 (!IsMasked && PolicyAttrs & RVV_VTA))
14000 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14001 else {
14002 if (IsMasked)
14003 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14004 else // Unmasked
14005 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14006 }
14007 unsigned PtrOperandIdx = IsMasked ?
14008 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14009 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14010 Value *PtrOperand = Ops[PtrOperandIdx];
14011 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14012 Value *VLOperand = Ops[PtrOperandIdx + 2];
14013 Operands.push_back(PtrOperand);
14014 Operands.push_back(IndexOperand);
14015 if (IsMasked)
14016 Operands.push_back(Ops[NF]);
14017 Operands.push_back(VLOperand);
14018 if (IsMasked)
14019 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14020 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14021
14022 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14023 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14024 clang::CharUnits Align =
14025 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14026 llvm::Value *V;
14027 for (unsigned I = 0; I < NF; ++I) {
14028 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14029 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14030 }
14031 return V;
14032 }
14033 break;
14034case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_mu:
14035case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_mu:
14036case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_mu:
14037case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_mu:
14038 ID = Intrinsic::riscv_vluxseg7_mask;
14039 NF = 7;
14040 PolicyAttrs = 1;
14041IsMasked = true;
14042
14043 {
14044 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14045 SmallVector<llvm::Value*, 12> Operands;
14046
14047 // Please refer to comment under 'defvar NFList' in this file
14048 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14049 (!IsMasked && PolicyAttrs & RVV_VTA))
14050 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14051 else {
14052 if (IsMasked)
14053 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14054 else // Unmasked
14055 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14056 }
14057 unsigned PtrOperandIdx = IsMasked ?
14058 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14059 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14060 Value *PtrOperand = Ops[PtrOperandIdx];
14061 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14062 Value *VLOperand = Ops[PtrOperandIdx + 2];
14063 Operands.push_back(PtrOperand);
14064 Operands.push_back(IndexOperand);
14065 if (IsMasked)
14066 Operands.push_back(Ops[NF]);
14067 Operands.push_back(VLOperand);
14068 if (IsMasked)
14069 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14070 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14071
14072 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14073 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14074 clang::CharUnits Align =
14075 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14076 llvm::Value *V;
14077 for (unsigned I = 0; I < NF; ++I) {
14078 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14079 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14080 }
14081 return V;
14082 }
14083 break;
14084case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tu:
14085case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tu:
14086case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tu:
14087case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tu:
14088 ID = Intrinsic::riscv_vluxseg8;
14089 NF = 8;
14090 PolicyAttrs = 2;
14091IsMasked = false;
14092
14093 {
14094 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14095 SmallVector<llvm::Value*, 12> Operands;
14096
14097 // Please refer to comment under 'defvar NFList' in this file
14098 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14099 (!IsMasked && PolicyAttrs & RVV_VTA))
14100 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14101 else {
14102 if (IsMasked)
14103 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14104 else // Unmasked
14105 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14106 }
14107 unsigned PtrOperandIdx = IsMasked ?
14108 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14109 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14110 Value *PtrOperand = Ops[PtrOperandIdx];
14111 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14112 Value *VLOperand = Ops[PtrOperandIdx + 2];
14113 Operands.push_back(PtrOperand);
14114 Operands.push_back(IndexOperand);
14115 if (IsMasked)
14116 Operands.push_back(Ops[NF]);
14117 Operands.push_back(VLOperand);
14118 if (IsMasked)
14119 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14120 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14121
14122 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14123 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14124 clang::CharUnits Align =
14125 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14126 llvm::Value *V;
14127 for (unsigned I = 0; I < NF; ++I) {
14128 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14129 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14130 }
14131 return V;
14132 }
14133 break;
14134case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_ta:
14135case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_ta:
14136case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_ta:
14137case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_ta:
14138 ID = Intrinsic::riscv_vluxseg8;
14139 NF = 8;
14140 PolicyAttrs = 3;
14141IsMasked = false;
14142
14143 {
14144 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14145 SmallVector<llvm::Value*, 12> Operands;
14146
14147 // Please refer to comment under 'defvar NFList' in this file
14148 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14149 (!IsMasked && PolicyAttrs & RVV_VTA))
14150 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14151 else {
14152 if (IsMasked)
14153 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14154 else // Unmasked
14155 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14156 }
14157 unsigned PtrOperandIdx = IsMasked ?
14158 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14159 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14160 Value *PtrOperand = Ops[PtrOperandIdx];
14161 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14162 Value *VLOperand = Ops[PtrOperandIdx + 2];
14163 Operands.push_back(PtrOperand);
14164 Operands.push_back(IndexOperand);
14165 if (IsMasked)
14166 Operands.push_back(Ops[NF]);
14167 Operands.push_back(VLOperand);
14168 if (IsMasked)
14169 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14170 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14171
14172 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14173 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14174 clang::CharUnits Align =
14175 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14176 llvm::Value *V;
14177 for (unsigned I = 0; I < NF; ++I) {
14178 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14179 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14180 }
14181 return V;
14182 }
14183 break;
14184case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tum:
14185case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tum:
14186case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tum:
14187case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tum:
14188 ID = Intrinsic::riscv_vluxseg8_mask;
14189 NF = 8;
14190 PolicyAttrs = 2;
14191IsMasked = true;
14192
14193 {
14194 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14195 SmallVector<llvm::Value*, 12> Operands;
14196
14197 // Please refer to comment under 'defvar NFList' in this file
14198 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14199 (!IsMasked && PolicyAttrs & RVV_VTA))
14200 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14201 else {
14202 if (IsMasked)
14203 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14204 else // Unmasked
14205 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14206 }
14207 unsigned PtrOperandIdx = IsMasked ?
14208 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14209 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14210 Value *PtrOperand = Ops[PtrOperandIdx];
14211 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14212 Value *VLOperand = Ops[PtrOperandIdx + 2];
14213 Operands.push_back(PtrOperand);
14214 Operands.push_back(IndexOperand);
14215 if (IsMasked)
14216 Operands.push_back(Ops[NF]);
14217 Operands.push_back(VLOperand);
14218 if (IsMasked)
14219 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14220 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14221
14222 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14223 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14224 clang::CharUnits Align =
14225 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14226 llvm::Value *V;
14227 for (unsigned I = 0; I < NF; ++I) {
14228 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14229 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14230 }
14231 return V;
14232 }
14233 break;
14234case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tama:
14235case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tama:
14236case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tama:
14237case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tama:
14238 ID = Intrinsic::riscv_vluxseg8_mask;
14239 NF = 8;
14240 PolicyAttrs = 3;
14241IsMasked = true;
14242
14243 {
14244 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14245 SmallVector<llvm::Value*, 12> Operands;
14246
14247 // Please refer to comment under 'defvar NFList' in this file
14248 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14249 (!IsMasked && PolicyAttrs & RVV_VTA))
14250 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14251 else {
14252 if (IsMasked)
14253 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14254 else // Unmasked
14255 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14256 }
14257 unsigned PtrOperandIdx = IsMasked ?
14258 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14259 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14260 Value *PtrOperand = Ops[PtrOperandIdx];
14261 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14262 Value *VLOperand = Ops[PtrOperandIdx + 2];
14263 Operands.push_back(PtrOperand);
14264 Operands.push_back(IndexOperand);
14265 if (IsMasked)
14266 Operands.push_back(Ops[NF]);
14267 Operands.push_back(VLOperand);
14268 if (IsMasked)
14269 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14270 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14271
14272 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14273 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14274 clang::CharUnits Align =
14275 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14276 llvm::Value *V;
14277 for (unsigned I = 0; I < NF; ++I) {
14278 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14279 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14280 }
14281 return V;
14282 }
14283 break;
14284case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tumu:
14285case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tumu:
14286case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tumu:
14287case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tumu:
14288 ID = Intrinsic::riscv_vluxseg8_mask;
14289 NF = 8;
14290 PolicyAttrs = 0;
14291IsMasked = true;
14292
14293 {
14294 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14295 SmallVector<llvm::Value*, 12> Operands;
14296
14297 // Please refer to comment under 'defvar NFList' in this file
14298 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14299 (!IsMasked && PolicyAttrs & RVV_VTA))
14300 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14301 else {
14302 if (IsMasked)
14303 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14304 else // Unmasked
14305 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14306 }
14307 unsigned PtrOperandIdx = IsMasked ?
14308 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14309 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14310 Value *PtrOperand = Ops[PtrOperandIdx];
14311 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14312 Value *VLOperand = Ops[PtrOperandIdx + 2];
14313 Operands.push_back(PtrOperand);
14314 Operands.push_back(IndexOperand);
14315 if (IsMasked)
14316 Operands.push_back(Ops[NF]);
14317 Operands.push_back(VLOperand);
14318 if (IsMasked)
14319 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14320 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14321
14322 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14323 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14324 clang::CharUnits Align =
14325 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14326 llvm::Value *V;
14327 for (unsigned I = 0; I < NF; ++I) {
14328 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14329 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14330 }
14331 return V;
14332 }
14333 break;
14334case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_mu:
14335case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_mu:
14336case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_mu:
14337case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_mu:
14338 ID = Intrinsic::riscv_vluxseg8_mask;
14339 NF = 8;
14340 PolicyAttrs = 1;
14341IsMasked = true;
14342
14343 {
14344 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14345 SmallVector<llvm::Value*, 12> Operands;
14346
14347 // Please refer to comment under 'defvar NFList' in this file
14348 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14349 (!IsMasked && PolicyAttrs & RVV_VTA))
14350 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14351 else {
14352 if (IsMasked)
14353 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14354 else // Unmasked
14355 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14356 }
14357 unsigned PtrOperandIdx = IsMasked ?
14358 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14359 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14360 Value *PtrOperand = Ops[PtrOperandIdx];
14361 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14362 Value *VLOperand = Ops[PtrOperandIdx + 2];
14363 Operands.push_back(PtrOperand);
14364 Operands.push_back(IndexOperand);
14365 if (IsMasked)
14366 Operands.push_back(Ops[NF]);
14367 Operands.push_back(VLOperand);
14368 if (IsMasked)
14369 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14370 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14371
14372 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14373 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14374 clang::CharUnits Align =
14375 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14376 llvm::Value *V;
14377 for (unsigned I = 0; I < NF; ++I) {
14378 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14379 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14380 }
14381 return V;
14382 }
14383 break;
14384case RISCVVector::BI__builtin_rvv_vmacc_vv_tu:
14385case RISCVVector::BI__builtin_rvv_vmacc_vx_tu:
14386 ID = Intrinsic::riscv_vmacc;
14387 PolicyAttrs = 2;
14388 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14389 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14390 break;
14391case RISCVVector::BI__builtin_rvv_vmacc_vv_ta:
14392case RISCVVector::BI__builtin_rvv_vmacc_vx_ta:
14393 ID = Intrinsic::riscv_vmacc;
14394 PolicyAttrs = 3;
14395 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14396 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14397 break;
14398case RISCVVector::BI__builtin_rvv_vmacc_vv_tum:
14399case RISCVVector::BI__builtin_rvv_vmacc_vx_tum:
14400 ID = Intrinsic::riscv_vmacc_mask;
14401 PolicyAttrs = 2;
14402 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14403 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14404 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14405 break;
14406case RISCVVector::BI__builtin_rvv_vmacc_vv_tama:
14407case RISCVVector::BI__builtin_rvv_vmacc_vx_tama:
14408 ID = Intrinsic::riscv_vmacc_mask;
14409 PolicyAttrs = 3;
14410 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14411 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14412 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14413 break;
14414case RISCVVector::BI__builtin_rvv_vmacc_vv_tumu:
14415case RISCVVector::BI__builtin_rvv_vmacc_vx_tumu:
14416 ID = Intrinsic::riscv_vmacc_mask;
14417 PolicyAttrs = 0;
14418 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14419 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14420 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14421 break;
14422case RISCVVector::BI__builtin_rvv_vmacc_vv_mu:
14423case RISCVVector::BI__builtin_rvv_vmacc_vx_mu:
14424 ID = Intrinsic::riscv_vmacc_mask;
14425 PolicyAttrs = 1;
14426 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14427 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14428 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14429 break;
14430case RISCVVector::BI__builtin_rvv_vmadc_vv:
14431case RISCVVector::BI__builtin_rvv_vmadc_vx:
14432 ID = Intrinsic::riscv_vmadc;
14433 PolicyAttrs = 3;
14434 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14435 break;
14436case RISCVVector::BI__builtin_rvv_vmadc_vvm:
14437case RISCVVector::BI__builtin_rvv_vmadc_vxm:
14438 ID = Intrinsic::riscv_vmadc_carry_in;
14439 PolicyAttrs = 3;
14440 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14441 break;
14442case RISCVVector::BI__builtin_rvv_vmadd_vv_tu:
14443case RISCVVector::BI__builtin_rvv_vmadd_vx_tu:
14444 ID = Intrinsic::riscv_vmadd;
14445 PolicyAttrs = 2;
14446 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14447 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14448 break;
14449case RISCVVector::BI__builtin_rvv_vmadd_vv_ta:
14450case RISCVVector::BI__builtin_rvv_vmadd_vx_ta:
14451 ID = Intrinsic::riscv_vmadd;
14452 PolicyAttrs = 3;
14453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14454 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14455 break;
14456case RISCVVector::BI__builtin_rvv_vmadd_vv_tum:
14457case RISCVVector::BI__builtin_rvv_vmadd_vx_tum:
14458 ID = Intrinsic::riscv_vmadd_mask;
14459 PolicyAttrs = 2;
14460 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14461 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14462 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14463 break;
14464case RISCVVector::BI__builtin_rvv_vmadd_vv_tama:
14465case RISCVVector::BI__builtin_rvv_vmadd_vx_tama:
14466 ID = Intrinsic::riscv_vmadd_mask;
14467 PolicyAttrs = 3;
14468 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14469 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14470 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14471 break;
14472case RISCVVector::BI__builtin_rvv_vmadd_vv_tumu:
14473case RISCVVector::BI__builtin_rvv_vmadd_vx_tumu:
14474 ID = Intrinsic::riscv_vmadd_mask;
14475 PolicyAttrs = 0;
14476 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14477 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14478 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14479 break;
14480case RISCVVector::BI__builtin_rvv_vmadd_vv_mu:
14481case RISCVVector::BI__builtin_rvv_vmadd_vx_mu:
14482 ID = Intrinsic::riscv_vmadd_mask;
14483 PolicyAttrs = 1;
14484 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14485 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14486 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14487 break;
14488case RISCVVector::BI__builtin_rvv_vmmv_m:
14489 ID = Intrinsic::riscv_vmand;
14490 PolicyAttrs = 3;
14491IsMasked = false;
14492
14493 {
14494 // op1, vl
14495 IntrinsicTypes = {ResultType,
14496 Ops[1]->getType()};
14497 Ops.insert(Ops.begin() + 1, Ops[0]);
14498 break;
14499 }
14500 break;
14501case RISCVVector::BI__builtin_rvv_vmand_mm:
14502 ID = Intrinsic::riscv_vmand;
14503 PolicyAttrs = 3;
14504 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14505 break;
14506case RISCVVector::BI__builtin_rvv_vmandn_mm:
14507 ID = Intrinsic::riscv_vmandn;
14508 PolicyAttrs = 3;
14509 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14510 break;
14511case RISCVVector::BI__builtin_rvv_vmax_vv_tu:
14512case RISCVVector::BI__builtin_rvv_vmax_vx_tu:
14513 ID = Intrinsic::riscv_vmax;
14514 PolicyAttrs = 2;
14515 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14516 break;
14517case RISCVVector::BI__builtin_rvv_vmax_vv_ta:
14518case RISCVVector::BI__builtin_rvv_vmax_vx_ta:
14519 ID = Intrinsic::riscv_vmax;
14520 PolicyAttrs = 3;
14521 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14522 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14523 break;
14524case RISCVVector::BI__builtin_rvv_vmax_vv_tum:
14525case RISCVVector::BI__builtin_rvv_vmax_vx_tum:
14526 ID = Intrinsic::riscv_vmax_mask;
14527 PolicyAttrs = 2;
14528 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14529 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14530 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14531 break;
14532case RISCVVector::BI__builtin_rvv_vmax_vv_tama:
14533case RISCVVector::BI__builtin_rvv_vmax_vx_tama:
14534 ID = Intrinsic::riscv_vmax_mask;
14535 PolicyAttrs = 3;
14536 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14537 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14538 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14539 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14540 break;
14541case RISCVVector::BI__builtin_rvv_vmax_vv_tumu:
14542case RISCVVector::BI__builtin_rvv_vmax_vx_tumu:
14543 ID = Intrinsic::riscv_vmax_mask;
14544 PolicyAttrs = 0;
14545 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14546 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14547 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14548 break;
14549case RISCVVector::BI__builtin_rvv_vmax_vv_mu:
14550case RISCVVector::BI__builtin_rvv_vmax_vx_mu:
14551 ID = Intrinsic::riscv_vmax_mask;
14552 PolicyAttrs = 1;
14553 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14554 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14555 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14556 break;
14557case RISCVVector::BI__builtin_rvv_vmaxu_vv_tu:
14558case RISCVVector::BI__builtin_rvv_vmaxu_vx_tu:
14559 ID = Intrinsic::riscv_vmaxu;
14560 PolicyAttrs = 2;
14561 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14562 break;
14563case RISCVVector::BI__builtin_rvv_vmaxu_vv_ta:
14564case RISCVVector::BI__builtin_rvv_vmaxu_vx_ta:
14565 ID = Intrinsic::riscv_vmaxu;
14566 PolicyAttrs = 3;
14567 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14568 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14569 break;
14570case RISCVVector::BI__builtin_rvv_vmaxu_vv_tum:
14571case RISCVVector::BI__builtin_rvv_vmaxu_vx_tum:
14572 ID = Intrinsic::riscv_vmaxu_mask;
14573 PolicyAttrs = 2;
14574 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14575 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14576 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14577 break;
14578case RISCVVector::BI__builtin_rvv_vmaxu_vv_tama:
14579case RISCVVector::BI__builtin_rvv_vmaxu_vx_tama:
14580 ID = Intrinsic::riscv_vmaxu_mask;
14581 PolicyAttrs = 3;
14582 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14583 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14584 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14585 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14586 break;
14587case RISCVVector::BI__builtin_rvv_vmaxu_vv_tumu:
14588case RISCVVector::BI__builtin_rvv_vmaxu_vx_tumu:
14589 ID = Intrinsic::riscv_vmaxu_mask;
14590 PolicyAttrs = 0;
14591 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14592 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14593 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14594 break;
14595case RISCVVector::BI__builtin_rvv_vmaxu_vv_mu:
14596case RISCVVector::BI__builtin_rvv_vmaxu_vx_mu:
14597 ID = Intrinsic::riscv_vmaxu_mask;
14598 PolicyAttrs = 1;
14599 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14600 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14601 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14602 break;
14603case RISCVVector::BI__builtin_rvv_vmclr_m:
14604 ID = Intrinsic::riscv_vmclr;
14605 PolicyAttrs = 3;
14606 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14607 break;
14608case RISCVVector::BI__builtin_rvv_vmerge_vvm_tu:
14609case RISCVVector::BI__builtin_rvv_vmerge_vxm_tu:
14610 ID = Intrinsic::riscv_vmerge;
14611 PolicyAttrs = 2;
14612IsMasked = false;
14613
14614 // insert poison passthru
14615 if (PolicyAttrs & RVV_VTA)
14616 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14617 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14618 break;
14619case RISCVVector::BI__builtin_rvv_vmerge_vvm_ta:
14620case RISCVVector::BI__builtin_rvv_vmerge_vxm_ta:
14621 ID = Intrinsic::riscv_vmerge;
14622 PolicyAttrs = 3;
14623IsMasked = false;
14624
14625 // insert poison passthru
14626 if (PolicyAttrs & RVV_VTA)
14627 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14628 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14629 break;
14630case RISCVVector::BI__builtin_rvv_vmfeq_vv:
14631case RISCVVector::BI__builtin_rvv_vmfeq_vf:
14632 ID = Intrinsic::riscv_vmfeq;
14633 PolicyAttrs = 3;
14634 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14635 break;
14636case RISCVVector::BI__builtin_rvv_vmfeq_vv_tama:
14637case RISCVVector::BI__builtin_rvv_vmfeq_vf_tama:
14638 ID = Intrinsic::riscv_vmfeq_mask;
14639 PolicyAttrs = 3;
14640 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14641 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14642 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14643 break;
14644case RISCVVector::BI__builtin_rvv_vmfeq_vv_mu:
14645case RISCVVector::BI__builtin_rvv_vmfeq_vf_mu:
14646 ID = Intrinsic::riscv_vmfeq_mask;
14647 PolicyAttrs = 1;
14648 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14649 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14650 break;
14651case RISCVVector::BI__builtin_rvv_vmfge_vv:
14652case RISCVVector::BI__builtin_rvv_vmfge_vf:
14653 ID = Intrinsic::riscv_vmfge;
14654 PolicyAttrs = 3;
14655 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14656 break;
14657case RISCVVector::BI__builtin_rvv_vmfge_vv_tama:
14658case RISCVVector::BI__builtin_rvv_vmfge_vf_tama:
14659 ID = Intrinsic::riscv_vmfge_mask;
14660 PolicyAttrs = 3;
14661 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14662 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14663 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14664 break;
14665case RISCVVector::BI__builtin_rvv_vmfge_vv_mu:
14666case RISCVVector::BI__builtin_rvv_vmfge_vf_mu:
14667 ID = Intrinsic::riscv_vmfge_mask;
14668 PolicyAttrs = 1;
14669 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14670 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14671 break;
14672case RISCVVector::BI__builtin_rvv_vmfgt_vv:
14673case RISCVVector::BI__builtin_rvv_vmfgt_vf:
14674 ID = Intrinsic::riscv_vmfgt;
14675 PolicyAttrs = 3;
14676 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14677 break;
14678case RISCVVector::BI__builtin_rvv_vmfgt_vv_tama:
14679case RISCVVector::BI__builtin_rvv_vmfgt_vf_tama:
14680 ID = Intrinsic::riscv_vmfgt_mask;
14681 PolicyAttrs = 3;
14682 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14683 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14684 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14685 break;
14686case RISCVVector::BI__builtin_rvv_vmfgt_vv_mu:
14687case RISCVVector::BI__builtin_rvv_vmfgt_vf_mu:
14688 ID = Intrinsic::riscv_vmfgt_mask;
14689 PolicyAttrs = 1;
14690 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14691 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14692 break;
14693case RISCVVector::BI__builtin_rvv_vmfle_vv:
14694case RISCVVector::BI__builtin_rvv_vmfle_vf:
14695 ID = Intrinsic::riscv_vmfle;
14696 PolicyAttrs = 3;
14697 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14698 break;
14699case RISCVVector::BI__builtin_rvv_vmfle_vv_tama:
14700case RISCVVector::BI__builtin_rvv_vmfle_vf_tama:
14701 ID = Intrinsic::riscv_vmfle_mask;
14702 PolicyAttrs = 3;
14703 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14704 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14705 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14706 break;
14707case RISCVVector::BI__builtin_rvv_vmfle_vv_mu:
14708case RISCVVector::BI__builtin_rvv_vmfle_vf_mu:
14709 ID = Intrinsic::riscv_vmfle_mask;
14710 PolicyAttrs = 1;
14711 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14712 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14713 break;
14714case RISCVVector::BI__builtin_rvv_vmflt_vv:
14715case RISCVVector::BI__builtin_rvv_vmflt_vf:
14716 ID = Intrinsic::riscv_vmflt;
14717 PolicyAttrs = 3;
14718 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14719 break;
14720case RISCVVector::BI__builtin_rvv_vmflt_vv_tama:
14721case RISCVVector::BI__builtin_rvv_vmflt_vf_tama:
14722 ID = Intrinsic::riscv_vmflt_mask;
14723 PolicyAttrs = 3;
14724 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14725 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14726 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14727 break;
14728case RISCVVector::BI__builtin_rvv_vmflt_vv_mu:
14729case RISCVVector::BI__builtin_rvv_vmflt_vf_mu:
14730 ID = Intrinsic::riscv_vmflt_mask;
14731 PolicyAttrs = 1;
14732 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14733 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14734 break;
14735case RISCVVector::BI__builtin_rvv_vmfne_vv:
14736case RISCVVector::BI__builtin_rvv_vmfne_vf:
14737 ID = Intrinsic::riscv_vmfne;
14738 PolicyAttrs = 3;
14739 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14740 break;
14741case RISCVVector::BI__builtin_rvv_vmfne_vv_tama:
14742case RISCVVector::BI__builtin_rvv_vmfne_vf_tama:
14743 ID = Intrinsic::riscv_vmfne_mask;
14744 PolicyAttrs = 3;
14745 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14746 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14747 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14748 break;
14749case RISCVVector::BI__builtin_rvv_vmfne_vv_mu:
14750case RISCVVector::BI__builtin_rvv_vmfne_vf_mu:
14751 ID = Intrinsic::riscv_vmfne_mask;
14752 PolicyAttrs = 1;
14753 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14754 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14755 break;
14756case RISCVVector::BI__builtin_rvv_vmin_vv_tu:
14757case RISCVVector::BI__builtin_rvv_vmin_vx_tu:
14758 ID = Intrinsic::riscv_vmin;
14759 PolicyAttrs = 2;
14760 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14761 break;
14762case RISCVVector::BI__builtin_rvv_vmin_vv_ta:
14763case RISCVVector::BI__builtin_rvv_vmin_vx_ta:
14764 ID = Intrinsic::riscv_vmin;
14765 PolicyAttrs = 3;
14766 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14767 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14768 break;
14769case RISCVVector::BI__builtin_rvv_vmin_vv_tum:
14770case RISCVVector::BI__builtin_rvv_vmin_vx_tum:
14771 ID = Intrinsic::riscv_vmin_mask;
14772 PolicyAttrs = 2;
14773 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14774 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14775 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14776 break;
14777case RISCVVector::BI__builtin_rvv_vmin_vv_tama:
14778case RISCVVector::BI__builtin_rvv_vmin_vx_tama:
14779 ID = Intrinsic::riscv_vmin_mask;
14780 PolicyAttrs = 3;
14781 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14782 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14783 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14784 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14785 break;
14786case RISCVVector::BI__builtin_rvv_vmin_vv_tumu:
14787case RISCVVector::BI__builtin_rvv_vmin_vx_tumu:
14788 ID = Intrinsic::riscv_vmin_mask;
14789 PolicyAttrs = 0;
14790 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14791 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14792 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14793 break;
14794case RISCVVector::BI__builtin_rvv_vmin_vv_mu:
14795case RISCVVector::BI__builtin_rvv_vmin_vx_mu:
14796 ID = Intrinsic::riscv_vmin_mask;
14797 PolicyAttrs = 1;
14798 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14799 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14800 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14801 break;
14802case RISCVVector::BI__builtin_rvv_vminu_vv_tu:
14803case RISCVVector::BI__builtin_rvv_vminu_vx_tu:
14804 ID = Intrinsic::riscv_vminu;
14805 PolicyAttrs = 2;
14806 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14807 break;
14808case RISCVVector::BI__builtin_rvv_vminu_vv_ta:
14809case RISCVVector::BI__builtin_rvv_vminu_vx_ta:
14810 ID = Intrinsic::riscv_vminu;
14811 PolicyAttrs = 3;
14812 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14813 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14814 break;
14815case RISCVVector::BI__builtin_rvv_vminu_vv_tum:
14816case RISCVVector::BI__builtin_rvv_vminu_vx_tum:
14817 ID = Intrinsic::riscv_vminu_mask;
14818 PolicyAttrs = 2;
14819 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14820 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14821 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14822 break;
14823case RISCVVector::BI__builtin_rvv_vminu_vv_tama:
14824case RISCVVector::BI__builtin_rvv_vminu_vx_tama:
14825 ID = Intrinsic::riscv_vminu_mask;
14826 PolicyAttrs = 3;
14827 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14828 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14829 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14830 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14831 break;
14832case RISCVVector::BI__builtin_rvv_vminu_vv_tumu:
14833case RISCVVector::BI__builtin_rvv_vminu_vx_tumu:
14834 ID = Intrinsic::riscv_vminu_mask;
14835 PolicyAttrs = 0;
14836 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14837 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14838 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14839 break;
14840case RISCVVector::BI__builtin_rvv_vminu_vv_mu:
14841case RISCVVector::BI__builtin_rvv_vminu_vx_mu:
14842 ID = Intrinsic::riscv_vminu_mask;
14843 PolicyAttrs = 1;
14844 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14845 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14846 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14847 break;
14848case RISCVVector::BI__builtin_rvv_vmnot_m:
14849 ID = Intrinsic::riscv_vmnand;
14850 PolicyAttrs = 3;
14851IsMasked = false;
14852
14853 {
14854 // op1, vl
14855 IntrinsicTypes = {ResultType,
14856 Ops[1]->getType()};
14857 Ops.insert(Ops.begin() + 1, Ops[0]);
14858 break;
14859 }
14860 break;
14861case RISCVVector::BI__builtin_rvv_vmnand_mm:
14862 ID = Intrinsic::riscv_vmnand;
14863 PolicyAttrs = 3;
14864 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14865 break;
14866case RISCVVector::BI__builtin_rvv_vmnor_mm:
14867 ID = Intrinsic::riscv_vmnor;
14868 PolicyAttrs = 3;
14869 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14870 break;
14871case RISCVVector::BI__builtin_rvv_vmor_mm:
14872 ID = Intrinsic::riscv_vmor;
14873 PolicyAttrs = 3;
14874 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14875 break;
14876case RISCVVector::BI__builtin_rvv_vmorn_mm:
14877 ID = Intrinsic::riscv_vmorn;
14878 PolicyAttrs = 3;
14879 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14880 break;
14881case RISCVVector::BI__builtin_rvv_vmsbc_vv:
14882case RISCVVector::BI__builtin_rvv_vmsbc_vx:
14883 ID = Intrinsic::riscv_vmsbc;
14884 PolicyAttrs = 3;
14885 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14886 break;
14887case RISCVVector::BI__builtin_rvv_vmsbc_vvm:
14888case RISCVVector::BI__builtin_rvv_vmsbc_vxm:
14889 ID = Intrinsic::riscv_vmsbc_borrow_in;
14890 PolicyAttrs = 3;
14891 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14892 break;
14893case RISCVVector::BI__builtin_rvv_vmsbf_m:
14894 ID = Intrinsic::riscv_vmsbf;
14895 PolicyAttrs = 3;
14896 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14897 break;
14898case RISCVVector::BI__builtin_rvv_vmsbf_m_tama:
14899 ID = Intrinsic::riscv_vmsbf_mask;
14900 PolicyAttrs = 3;
14901 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14902 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14903 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14904 break;
14905case RISCVVector::BI__builtin_rvv_vmsbf_m_mu:
14906 ID = Intrinsic::riscv_vmsbf_mask;
14907 PolicyAttrs = 1;
14908 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14909 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14910 break;
14911case RISCVVector::BI__builtin_rvv_vmseq_vv:
14912case RISCVVector::BI__builtin_rvv_vmseq_vx:
14913 ID = Intrinsic::riscv_vmseq;
14914 PolicyAttrs = 3;
14915 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14916 break;
14917case RISCVVector::BI__builtin_rvv_vmseq_vv_tama:
14918case RISCVVector::BI__builtin_rvv_vmseq_vx_tama:
14919 ID = Intrinsic::riscv_vmseq_mask;
14920 PolicyAttrs = 3;
14921 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14922 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14923 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14924 break;
14925case RISCVVector::BI__builtin_rvv_vmseq_vv_mu:
14926case RISCVVector::BI__builtin_rvv_vmseq_vx_mu:
14927 ID = Intrinsic::riscv_vmseq_mask;
14928 PolicyAttrs = 1;
14929 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14930 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14931 break;
14932case RISCVVector::BI__builtin_rvv_vmset_m:
14933 ID = Intrinsic::riscv_vmset;
14934 PolicyAttrs = 3;
14935 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14936 break;
14937case RISCVVector::BI__builtin_rvv_vmsge_vv:
14938case RISCVVector::BI__builtin_rvv_vmsge_vx:
14939 ID = Intrinsic::riscv_vmsge;
14940 PolicyAttrs = 3;
14941 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14942 break;
14943case RISCVVector::BI__builtin_rvv_vmsge_vv_tama:
14944case RISCVVector::BI__builtin_rvv_vmsge_vx_tama:
14945 ID = Intrinsic::riscv_vmsge_mask;
14946 PolicyAttrs = 3;
14947 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14948 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14949 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14950 break;
14951case RISCVVector::BI__builtin_rvv_vmsge_vv_mu:
14952case RISCVVector::BI__builtin_rvv_vmsge_vx_mu:
14953 ID = Intrinsic::riscv_vmsge_mask;
14954 PolicyAttrs = 1;
14955 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14956 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14957 break;
14958case RISCVVector::BI__builtin_rvv_vmsgeu_vv:
14959case RISCVVector::BI__builtin_rvv_vmsgeu_vx:
14960 ID = Intrinsic::riscv_vmsgeu;
14961 PolicyAttrs = 3;
14962 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14963 break;
14964case RISCVVector::BI__builtin_rvv_vmsgeu_vv_tama:
14965case RISCVVector::BI__builtin_rvv_vmsgeu_vx_tama:
14966 ID = Intrinsic::riscv_vmsgeu_mask;
14967 PolicyAttrs = 3;
14968 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14969 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14970 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14971 break;
14972case RISCVVector::BI__builtin_rvv_vmsgeu_vv_mu:
14973case RISCVVector::BI__builtin_rvv_vmsgeu_vx_mu:
14974 ID = Intrinsic::riscv_vmsgeu_mask;
14975 PolicyAttrs = 1;
Value stored to 'PolicyAttrs' is never read
14976 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14977 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14978 break;
14979case RISCVVector::BI__builtin_rvv_vmsgt_vv:
14980case RISCVVector::BI__builtin_rvv_vmsgt_vx:
14981 ID = Intrinsic::riscv_vmsgt;
14982 PolicyAttrs = 3;
14983 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14984 break;
14985case RISCVVector::BI__builtin_rvv_vmsgt_vv_tama:
14986case RISCVVector::BI__builtin_rvv_vmsgt_vx_tama:
14987 ID = Intrinsic::riscv_vmsgt_mask;
14988 PolicyAttrs = 3;
14989 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14990 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14991 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14992 break;
14993case RISCVVector::BI__builtin_rvv_vmsgt_vv_mu:
14994case RISCVVector::BI__builtin_rvv_vmsgt_vx_mu:
14995 ID = Intrinsic::riscv_vmsgt_mask;
14996 PolicyAttrs = 1;
14997 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14998 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14999 break;
15000case RISCVVector::BI__builtin_rvv_vmsgtu_vv:
15001case RISCVVector::BI__builtin_rvv_vmsgtu_vx:
15002 ID = Intrinsic::riscv_vmsgtu;
15003 PolicyAttrs = 3;
15004 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15005 break;
15006case RISCVVector::BI__builtin_rvv_vmsgtu_vv_tama:
15007case RISCVVector::BI__builtin_rvv_vmsgtu_vx_tama:
15008 ID = Intrinsic::riscv_vmsgtu_mask;
15009 PolicyAttrs = 3;
15010 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15011 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15012 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15013 break;
15014case RISCVVector::BI__builtin_rvv_vmsgtu_vv_mu:
15015case RISCVVector::BI__builtin_rvv_vmsgtu_vx_mu:
15016 ID = Intrinsic::riscv_vmsgtu_mask;
15017 PolicyAttrs = 1;
15018 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15019 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15020 break;
15021case RISCVVector::BI__builtin_rvv_vmsif_m:
15022 ID = Intrinsic::riscv_vmsif;
15023 PolicyAttrs = 3;
15024 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15025 break;
15026case RISCVVector::BI__builtin_rvv_vmsif_m_tama:
15027 ID = Intrinsic::riscv_vmsif_mask;
15028 PolicyAttrs = 3;
15029 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15030 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15031 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15032 break;
15033case RISCVVector::BI__builtin_rvv_vmsif_m_mu:
15034 ID = Intrinsic::riscv_vmsif_mask;
15035 PolicyAttrs = 1;
15036 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15037 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15038 break;
15039case RISCVVector::BI__builtin_rvv_vmsle_vv:
15040case RISCVVector::BI__builtin_rvv_vmsle_vx:
15041 ID = Intrinsic::riscv_vmsle;
15042 PolicyAttrs = 3;
15043 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15044 break;
15045case RISCVVector::BI__builtin_rvv_vmsle_vv_tama:
15046case RISCVVector::BI__builtin_rvv_vmsle_vx_tama:
15047 ID = Intrinsic::riscv_vmsle_mask;
15048 PolicyAttrs = 3;
15049 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15050 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15051 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15052 break;
15053case RISCVVector::BI__builtin_rvv_vmsle_vv_mu:
15054case RISCVVector::BI__builtin_rvv_vmsle_vx_mu:
15055 ID = Intrinsic::riscv_vmsle_mask;
15056 PolicyAttrs = 1;
15057 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15058 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15059 break;
15060case RISCVVector::BI__builtin_rvv_vmsleu_vv:
15061case RISCVVector::BI__builtin_rvv_vmsleu_vx:
15062 ID = Intrinsic::riscv_vmsleu;
15063 PolicyAttrs = 3;
15064 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15065 break;
15066case RISCVVector::BI__builtin_rvv_vmsleu_vv_tama:
15067case RISCVVector::BI__builtin_rvv_vmsleu_vx_tama:
15068 ID = Intrinsic::riscv_vmsleu_mask;
15069 PolicyAttrs = 3;
15070 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15071 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15072 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15073 break;
15074case RISCVVector::BI__builtin_rvv_vmsleu_vv_mu:
15075case RISCVVector::BI__builtin_rvv_vmsleu_vx_mu:
15076 ID = Intrinsic::riscv_vmsleu_mask;
15077 PolicyAttrs = 1;
15078 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15079 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15080 break;
15081case RISCVVector::BI__builtin_rvv_vmslt_vv:
15082case RISCVVector::BI__builtin_rvv_vmslt_vx:
15083 ID = Intrinsic::riscv_vmslt;
15084 PolicyAttrs = 3;
15085 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15086 break;
15087case RISCVVector::BI__builtin_rvv_vmslt_vv_tama:
15088case RISCVVector::BI__builtin_rvv_vmslt_vx_tama:
15089 ID = Intrinsic::riscv_vmslt_mask;
15090 PolicyAttrs = 3;
15091 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15092 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15093 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15094 break;
15095case RISCVVector::BI__builtin_rvv_vmslt_vv_mu:
15096case RISCVVector::BI__builtin_rvv_vmslt_vx_mu:
15097 ID = Intrinsic::riscv_vmslt_mask;
15098 PolicyAttrs = 1;
15099 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15100 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15101 break;
15102case RISCVVector::BI__builtin_rvv_vmsltu_vv:
15103case RISCVVector::BI__builtin_rvv_vmsltu_vx:
15104 ID = Intrinsic::riscv_vmsltu;
15105 PolicyAttrs = 3;
15106 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15107 break;
15108case RISCVVector::BI__builtin_rvv_vmsltu_vv_tama:
15109case RISCVVector::BI__builtin_rvv_vmsltu_vx_tama:
15110 ID = Intrinsic::riscv_vmsltu_mask;
15111 PolicyAttrs = 3;
15112 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15113 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15114 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15115 break;
15116case RISCVVector::BI__builtin_rvv_vmsltu_vv_mu:
15117case RISCVVector::BI__builtin_rvv_vmsltu_vx_mu:
15118 ID = Intrinsic::riscv_vmsltu_mask;
15119 PolicyAttrs = 1;
15120 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15121 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15122 break;
15123case RISCVVector::BI__builtin_rvv_vmsne_vv:
15124case RISCVVector::BI__builtin_rvv_vmsne_vx:
15125 ID = Intrinsic::riscv_vmsne;
15126 PolicyAttrs = 3;
15127 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15128 break;
15129case RISCVVector::BI__builtin_rvv_vmsne_vv_tama:
15130case RISCVVector::BI__builtin_rvv_vmsne_vx_tama:
15131 ID = Intrinsic::riscv_vmsne_mask;
15132 PolicyAttrs = 3;
15133 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15134 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15135 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15136 break;
15137case RISCVVector::BI__builtin_rvv_vmsne_vv_mu:
15138case RISCVVector::BI__builtin_rvv_vmsne_vx_mu:
15139 ID = Intrinsic::riscv_vmsne_mask;
15140 PolicyAttrs = 1;
15141 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15142 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15143 break;
15144case RISCVVector::BI__builtin_rvv_vmsof_m:
15145 ID = Intrinsic::riscv_vmsof;
15146 PolicyAttrs = 3;
15147 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15148 break;
15149case RISCVVector::BI__builtin_rvv_vmsof_m_tama:
15150 ID = Intrinsic::riscv_vmsof_mask;
15151 PolicyAttrs = 3;
15152 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15153 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15154 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15155 break;
15156case RISCVVector::BI__builtin_rvv_vmsof_m_mu:
15157 ID = Intrinsic::riscv_vmsof_mask;
15158 PolicyAttrs = 1;
15159 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15160 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15161 break;
15162case RISCVVector::BI__builtin_rvv_vmul_vv_tu:
15163case RISCVVector::BI__builtin_rvv_vmul_vx_tu:
15164 ID = Intrinsic::riscv_vmul;
15165 PolicyAttrs = 2;
15166 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15167 break;
15168case RISCVVector::BI__builtin_rvv_vmul_vv_ta:
15169case RISCVVector::BI__builtin_rvv_vmul_vx_ta:
15170 ID = Intrinsic::riscv_vmul;
15171 PolicyAttrs = 3;
15172 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15173 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15174 break;
15175case RISCVVector::BI__builtin_rvv_vmul_vv_tum:
15176case RISCVVector::BI__builtin_rvv_vmul_vx_tum:
15177 ID = Intrinsic::riscv_vmul_mask;
15178 PolicyAttrs = 2;
15179 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15180 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15181 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15182 break;
15183case RISCVVector::BI__builtin_rvv_vmul_vv_tama:
15184case RISCVVector::BI__builtin_rvv_vmul_vx_tama:
15185 ID = Intrinsic::riscv_vmul_mask;
15186 PolicyAttrs = 3;
15187 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15188 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15189 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15190 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15191 break;
15192case RISCVVector::BI__builtin_rvv_vmul_vv_tumu:
15193case RISCVVector::BI__builtin_rvv_vmul_vx_tumu:
15194 ID = Intrinsic::riscv_vmul_mask;
15195 PolicyAttrs = 0;
15196 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15197 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15198 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15199 break;
15200case RISCVVector::BI__builtin_rvv_vmul_vv_mu:
15201case RISCVVector::BI__builtin_rvv_vmul_vx_mu:
15202 ID = Intrinsic::riscv_vmul_mask;
15203 PolicyAttrs = 1;
15204 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15205 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15206 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15207 break;
15208case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:
15209case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:
15210 ID = Intrinsic::riscv_vmulh;
15211 PolicyAttrs = 2;
15212 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15213 break;
15214case RISCVVector::BI__builtin_rvv_vmulh_vv_ta:
15215case RISCVVector::BI__builtin_rvv_vmulh_vx_ta:
15216 ID = Intrinsic::riscv_vmulh;
15217 PolicyAttrs = 3;
15218 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15219 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15220 break;
15221case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:
15222case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:
15223 ID = Intrinsic::riscv_vmulh_mask;
15224 PolicyAttrs = 2;
15225 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15226 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15227 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15228 break;
15229case RISCVVector::BI__builtin_rvv_vmulh_vv_tama:
15230case RISCVVector::BI__builtin_rvv_vmulh_vx_tama:
15231 ID = Intrinsic::riscv_vmulh_mask;
15232 PolicyAttrs = 3;
15233 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15234 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15235 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15236 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15237 break;
15238case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:
15239case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:
15240 ID = Intrinsic::riscv_vmulh_mask;
15241 PolicyAttrs = 0;
15242 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15243 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15244 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15245 break;
15246case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:
15247case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:
15248 ID = Intrinsic::riscv_vmulh_mask;
15249 PolicyAttrs = 1;
15250 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15251 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15252 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15253 break;
15254case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:
15255case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:
15256 ID = Intrinsic::riscv_vmulhsu;
15257 PolicyAttrs = 2;
15258 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15259 break;
15260case RISCVVector::BI__builtin_rvv_vmulhsu_vv_ta:
15261case RISCVVector::BI__builtin_rvv_vmulhsu_vx_ta:
15262 ID = Intrinsic::riscv_vmulhsu;
15263 PolicyAttrs = 3;
15264 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15265 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15266 break;
15267case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:
15268case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:
15269 ID = Intrinsic::riscv_vmulhsu_mask;
15270 PolicyAttrs = 2;
15271 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15272 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15273 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15274 break;
15275case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tama:
15276case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tama:
15277 ID = Intrinsic::riscv_vmulhsu_mask;
15278 PolicyAttrs = 3;
15279 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15280 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15281 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15282 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15283 break;
15284case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:
15285case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:
15286 ID = Intrinsic::riscv_vmulhsu_mask;
15287 PolicyAttrs = 0;
15288 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15289 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15290 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15291 break;
15292case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:
15293case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:
15294 ID = Intrinsic::riscv_vmulhsu_mask;
15295 PolicyAttrs = 1;
15296 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15297 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15298 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15299 break;
15300case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:
15301case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:
15302 ID = Intrinsic::riscv_vmulhu;
15303 PolicyAttrs = 2;
15304 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15305 break;
15306case RISCVVector::BI__builtin_rvv_vmulhu_vv_ta:
15307case RISCVVector::BI__builtin_rvv_vmulhu_vx_ta:
15308 ID = Intrinsic::riscv_vmulhu;
15309 PolicyAttrs = 3;
15310 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15311 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15312 break;
15313case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:
15314case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:
15315 ID = Intrinsic::riscv_vmulhu_mask;
15316 PolicyAttrs = 2;
15317 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15318 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15319 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15320 break;
15321case RISCVVector::BI__builtin_rvv_vmulhu_vv_tama:
15322case RISCVVector::BI__builtin_rvv_vmulhu_vx_tama:
15323 ID = Intrinsic::riscv_vmulhu_mask;
15324 PolicyAttrs = 3;
15325 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15326 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15327 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15328 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15329 break;
15330case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:
15331case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:
15332 ID = Intrinsic::riscv_vmulhu_mask;
15333 PolicyAttrs = 0;
15334 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15335 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15336 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15337 break;
15338case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:
15339case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:
15340 ID = Intrinsic::riscv_vmulhu_mask;
15341 PolicyAttrs = 1;
15342 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15343 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15344 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15345 break;
15346case RISCVVector::BI__builtin_rvv_vmv_s_x_tu:
15347 ID = Intrinsic::riscv_vmv_s_x;
15348 PolicyAttrs = 2;
15349 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15350 break;
15351case RISCVVector::BI__builtin_rvv_vmv_s_x_ta:
15352 ID = Intrinsic::riscv_vmv_s_x;
15353 PolicyAttrs = 3;
15354 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15355 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15356 break;
15357case RISCVVector::BI__builtin_rvv_vmv_v_v_tu:
15358 ID = Intrinsic::riscv_vmv_v_v;
15359 PolicyAttrs = 2;
15360 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15361 break;
15362case RISCVVector::BI__builtin_rvv_vmv_v_v_ta:
15363 ID = Intrinsic::riscv_vmv_v_v;
15364 PolicyAttrs = 3;
15365 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15366 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15367 break;
15368case RISCVVector::BI__builtin_rvv_vmv_v_x_tu:
15369 ID = Intrinsic::riscv_vmv_v_x;
15370 PolicyAttrs = 2;
15371 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15372 break;
15373case RISCVVector::BI__builtin_rvv_vmv_v_x_ta:
15374 ID = Intrinsic::riscv_vmv_v_x;
15375 PolicyAttrs = 3;
15376 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15377 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15378 break;
15379case RISCVVector::BI__builtin_rvv_vmv_x_s:
15380 ID = Intrinsic::riscv_vmv_x_s;
15381 PolicyAttrs = 3;
15382 IntrinsicTypes = {Ops[0]->getType()};
15383 break;
15384case RISCVVector::BI__builtin_rvv_vmxnor_mm:
15385 ID = Intrinsic::riscv_vmxnor;
15386 PolicyAttrs = 3;
15387 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15388 break;
15389case RISCVVector::BI__builtin_rvv_vmxor_mm:
15390 ID = Intrinsic::riscv_vmxor;
15391 PolicyAttrs = 3;
15392 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15393 break;
15394case RISCVVector::BI__builtin_rvv_vnclip_wv_tu:
15395case RISCVVector::BI__builtin_rvv_vnclip_wx_tu:
15396 ID = Intrinsic::riscv_vnclip;
15397 PolicyAttrs = 2;
15398 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15399 break;
15400case RISCVVector::BI__builtin_rvv_vnclip_wv_ta:
15401case RISCVVector::BI__builtin_rvv_vnclip_wx_ta:
15402 ID = Intrinsic::riscv_vnclip;
15403 PolicyAttrs = 3;
15404 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15405 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15406 break;
15407case RISCVVector::BI__builtin_rvv_vnclip_wv_tum:
15408case RISCVVector::BI__builtin_rvv_vnclip_wx_tum:
15409 ID = Intrinsic::riscv_vnclip_mask;
15410 PolicyAttrs = 2;
15411 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15412 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15413 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15414 break;
15415case RISCVVector::BI__builtin_rvv_vnclip_wv_tama:
15416case RISCVVector::BI__builtin_rvv_vnclip_wx_tama:
15417 ID = Intrinsic::riscv_vnclip_mask;
15418 PolicyAttrs = 3;
15419 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15420 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15421 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15422 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15423 break;
15424case RISCVVector::BI__builtin_rvv_vnclip_wv_tumu:
15425case RISCVVector::BI__builtin_rvv_vnclip_wx_tumu:
15426 ID = Intrinsic::riscv_vnclip_mask;
15427 PolicyAttrs = 0;
15428 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15429 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15430 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15431 break;
15432case RISCVVector::BI__builtin_rvv_vnclip_wv_mu:
15433case RISCVVector::BI__builtin_rvv_vnclip_wx_mu:
15434 ID = Intrinsic::riscv_vnclip_mask;
15435 PolicyAttrs = 1;
15436 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15437 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15438 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15439 break;
15440case RISCVVector::BI__builtin_rvv_vnclipu_wv_tu:
15441case RISCVVector::BI__builtin_rvv_vnclipu_wx_tu:
15442 ID = Intrinsic::riscv_vnclipu;
15443 PolicyAttrs = 2;
15444 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15445 break;
15446case RISCVVector::BI__builtin_rvv_vnclipu_wv_ta:
15447case RISCVVector::BI__builtin_rvv_vnclipu_wx_ta:
15448 ID = Intrinsic::riscv_vnclipu;
15449 PolicyAttrs = 3;
15450 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15451 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15452 break;
15453case RISCVVector::BI__builtin_rvv_vnclipu_wv_tum:
15454case RISCVVector::BI__builtin_rvv_vnclipu_wx_tum:
15455 ID = Intrinsic::riscv_vnclipu_mask;
15456 PolicyAttrs = 2;
15457 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15458 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15459 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15460 break;
15461case RISCVVector::BI__builtin_rvv_vnclipu_wv_tama:
15462case RISCVVector::BI__builtin_rvv_vnclipu_wx_tama:
15463 ID = Intrinsic::riscv_vnclipu_mask;
15464 PolicyAttrs = 3;
15465 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15466 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15467 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15468 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15469 break;
15470case RISCVVector::BI__builtin_rvv_vnclipu_wv_tumu:
15471case RISCVVector::BI__builtin_rvv_vnclipu_wx_tumu:
15472 ID = Intrinsic::riscv_vnclipu_mask;
15473 PolicyAttrs = 0;
15474 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15475 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15476 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15477 break;
15478case RISCVVector::BI__builtin_rvv_vnclipu_wv_mu:
15479case RISCVVector::BI__builtin_rvv_vnclipu_wx_mu:
15480 ID = Intrinsic::riscv_vnclipu_mask;
15481 PolicyAttrs = 1;
15482 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15483 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15484 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15485 break;
15486case RISCVVector::BI__builtin_rvv_vnmsac_vv_tu:
15487case RISCVVector::BI__builtin_rvv_vnmsac_vx_tu:
15488 ID = Intrinsic::riscv_vnmsac;
15489 PolicyAttrs = 2;
15490 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15491 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15492 break;
15493case RISCVVector::BI__builtin_rvv_vnmsac_vv_ta:
15494case RISCVVector::BI__builtin_rvv_vnmsac_vx_ta:
15495 ID = Intrinsic::riscv_vnmsac;
15496 PolicyAttrs = 3;
15497 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15498 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15499 break;
15500case RISCVVector::BI__builtin_rvv_vnmsac_vv_tum:
15501case RISCVVector::BI__builtin_rvv_vnmsac_vx_tum:
15502 ID = Intrinsic::riscv_vnmsac_mask;
15503 PolicyAttrs = 2;
15504 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15505 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15506 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15507 break;
15508case RISCVVector::BI__builtin_rvv_vnmsac_vv_tama:
15509case RISCVVector::BI__builtin_rvv_vnmsac_vx_tama:
15510 ID = Intrinsic::riscv_vnmsac_mask;
15511 PolicyAttrs = 3;
15512 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15513 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15514 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15515 break;
15516case RISCVVector::BI__builtin_rvv_vnmsac_vv_tumu:
15517case RISCVVector::BI__builtin_rvv_vnmsac_vx_tumu:
15518 ID = Intrinsic::riscv_vnmsac_mask;
15519 PolicyAttrs = 0;
15520 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15521 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15522 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15523 break;
15524case RISCVVector::BI__builtin_rvv_vnmsac_vv_mu:
15525case RISCVVector::BI__builtin_rvv_vnmsac_vx_mu:
15526 ID = Intrinsic::riscv_vnmsac_mask;
15527 PolicyAttrs = 1;
15528 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15529 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15530 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15531 break;
15532case RISCVVector::BI__builtin_rvv_vnmsub_vv_tu:
15533case RISCVVector::BI__builtin_rvv_vnmsub_vx_tu:
15534 ID = Intrinsic::riscv_vnmsub;
15535 PolicyAttrs = 2;
15536 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15537 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15538 break;
15539case RISCVVector::BI__builtin_rvv_vnmsub_vv_ta:
15540case RISCVVector::BI__builtin_rvv_vnmsub_vx_ta:
15541 ID = Intrinsic::riscv_vnmsub;
15542 PolicyAttrs = 3;
15543 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15544 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15545 break;
15546case RISCVVector::BI__builtin_rvv_vnmsub_vv_tum:
15547case RISCVVector::BI__builtin_rvv_vnmsub_vx_tum:
15548 ID = Intrinsic::riscv_vnmsub_mask;
15549 PolicyAttrs = 2;
15550 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15551 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15552 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15553 break;
15554case RISCVVector::BI__builtin_rvv_vnmsub_vv_tama:
15555case RISCVVector::BI__builtin_rvv_vnmsub_vx_tama:
15556 ID = Intrinsic::riscv_vnmsub_mask;
15557 PolicyAttrs = 3;
15558 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15559 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15560 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15561 break;
15562case RISCVVector::BI__builtin_rvv_vnmsub_vv_tumu:
15563case RISCVVector::BI__builtin_rvv_vnmsub_vx_tumu:
15564 ID = Intrinsic::riscv_vnmsub_mask;
15565 PolicyAttrs = 0;
15566 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15567 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15568 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15569 break;
15570case RISCVVector::BI__builtin_rvv_vnmsub_vv_mu:
15571case RISCVVector::BI__builtin_rvv_vnmsub_vx_mu:
15572 ID = Intrinsic::riscv_vnmsub_mask;
15573 PolicyAttrs = 1;
15574 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15575 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15576 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15577 break;
15578case RISCVVector::BI__builtin_rvv_vnsra_wv_tu:
15579case RISCVVector::BI__builtin_rvv_vnsra_wx_tu:
15580 ID = Intrinsic::riscv_vnsra;
15581 PolicyAttrs = 2;
15582 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15583 break;
15584case RISCVVector::BI__builtin_rvv_vnsra_wv_ta:
15585case RISCVVector::BI__builtin_rvv_vnsra_wx_ta:
15586 ID = Intrinsic::riscv_vnsra;
15587 PolicyAttrs = 3;
15588 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15589 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15590 break;
15591case RISCVVector::BI__builtin_rvv_vnsra_wv_tum:
15592case RISCVVector::BI__builtin_rvv_vnsra_wx_tum:
15593 ID = Intrinsic::riscv_vnsra_mask;
15594 PolicyAttrs = 2;
15595 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15596 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15597 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15598 break;
15599case RISCVVector::BI__builtin_rvv_vnsra_wv_tama:
15600case RISCVVector::BI__builtin_rvv_vnsra_wx_tama:
15601 ID = Intrinsic::riscv_vnsra_mask;
15602 PolicyAttrs = 3;
15603 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15604 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15605 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15606 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15607 break;
15608case RISCVVector::BI__builtin_rvv_vnsra_wv_tumu:
15609case RISCVVector::BI__builtin_rvv_vnsra_wx_tumu:
15610 ID = Intrinsic::riscv_vnsra_mask;
15611 PolicyAttrs = 0;
15612 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15613 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15614 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15615 break;
15616case RISCVVector::BI__builtin_rvv_vnsra_wv_mu:
15617case RISCVVector::BI__builtin_rvv_vnsra_wx_mu:
15618 ID = Intrinsic::riscv_vnsra_mask;
15619 PolicyAttrs = 1;
15620 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15621 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15622 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15623 break;
15624case RISCVVector::BI__builtin_rvv_vnsrl_wv_tu:
15625case RISCVVector::BI__builtin_rvv_vnsrl_wx_tu:
15626 ID = Intrinsic::riscv_vnsrl;
15627 PolicyAttrs = 2;
15628 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15629 break;
15630case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tu:
15631 ID = Intrinsic::riscv_vnsrl;
15632 PolicyAttrs = 2;
15633IsMasked = false;
15634
15635 {
15636 if (IsMasked) {
15637 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15638 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15639 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15640 } else {
15641 if (PolicyAttrs & RVV_VTA)
15642 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15643 }
15644 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15645 if (IsMasked) {
15646 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15647 // maskedoff, op1, xlen, mask, vl
15648 IntrinsicTypes = {ResultType,
15649 Ops[1]->getType(),
15650 Ops[4]->getType(),
15651 Ops[4]->getType()};
15652 } else {
15653 // passthru, op1, xlen, vl
15654 IntrinsicTypes = {ResultType,
15655 Ops[1]->getType(),
15656 Ops[3]->getType(),
15657 Ops[3]->getType()};
15658 }
15659 break;
15660 }
15661 break;
15662case RISCVVector::BI__builtin_rvv_vnsrl_wv_ta:
15663case RISCVVector::BI__builtin_rvv_vnsrl_wx_ta:
15664 ID = Intrinsic::riscv_vnsrl;
15665 PolicyAttrs = 3;
15666 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15667 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15668 break;
15669case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_ta:
15670 ID = Intrinsic::riscv_vnsrl;
15671 PolicyAttrs = 3;
15672IsMasked = false;
15673
15674 {
15675 if (IsMasked) {
15676 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15677 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15678 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15679 } else {
15680 if (PolicyAttrs & RVV_VTA)
15681 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15682 }
15683 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15684 if (IsMasked) {
15685 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15686 // maskedoff, op1, xlen, mask, vl
15687 IntrinsicTypes = {ResultType,
15688 Ops[1]->getType(),
15689 Ops[4]->getType(),
15690 Ops[4]->getType()};
15691 } else {
15692 // passthru, op1, xlen, vl
15693 IntrinsicTypes = {ResultType,
15694 Ops[1]->getType(),
15695 Ops[3]->getType(),
15696 Ops[3]->getType()};
15697 }
15698 break;
15699 }
15700 break;
15701case RISCVVector::BI__builtin_rvv_vnsrl_wv_tum:
15702case RISCVVector::BI__builtin_rvv_vnsrl_wx_tum:
15703 ID = Intrinsic::riscv_vnsrl_mask;
15704 PolicyAttrs = 2;
15705 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15706 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15707 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15708 break;
15709case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tum:
15710 ID = Intrinsic::riscv_vnsrl_mask;
15711 PolicyAttrs = 2;
15712IsMasked = true;
15713
15714 {
15715 if (IsMasked) {
15716 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15717 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15718 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15719 } else {
15720 if (PolicyAttrs & RVV_VTA)
15721 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15722 }
15723 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15724 if (IsMasked) {
15725 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15726 // maskedoff, op1, xlen, mask, vl
15727 IntrinsicTypes = {ResultType,
15728 Ops[1]->getType(),
15729 Ops[4]->getType(),
15730 Ops[4]->getType()};
15731 } else {
15732 // passthru, op1, xlen, vl
15733 IntrinsicTypes = {ResultType,
15734 Ops[1]->getType(),
15735 Ops[3]->getType(),
15736 Ops[3]->getType()};
15737 }
15738 break;
15739 }
15740 break;
15741case RISCVVector::BI__builtin_rvv_vnsrl_wv_tama:
15742case RISCVVector::BI__builtin_rvv_vnsrl_wx_tama:
15743 ID = Intrinsic::riscv_vnsrl_mask;
15744 PolicyAttrs = 3;
15745 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15746 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15747 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15748 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15749 break;
15750case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tama:
15751 ID = Intrinsic::riscv_vnsrl_mask;
15752 PolicyAttrs = 3;
15753IsMasked = true;
15754
15755 {
15756 if (IsMasked) {
15757 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15758 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15759 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15760 } else {
15761 if (PolicyAttrs & RVV_VTA)
15762 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15763 }
15764 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15765 if (IsMasked) {
15766 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15767 // maskedoff, op1, xlen, mask, vl
15768 IntrinsicTypes = {ResultType,
15769 Ops[1]->getType(),
15770 Ops[4]->getType(),
15771 Ops[4]->getType()};
15772 } else {
15773 // passthru, op1, xlen, vl
15774 IntrinsicTypes = {ResultType,
15775 Ops[1]->getType(),
15776 Ops[3]->getType(),
15777 Ops[3]->getType()};
15778 }
15779 break;
15780 }
15781 break;
15782case RISCVVector::BI__builtin_rvv_vnsrl_wv_tumu:
15783case RISCVVector::BI__builtin_rvv_vnsrl_wx_tumu:
15784 ID = Intrinsic::riscv_vnsrl_mask;
15785 PolicyAttrs = 0;
15786 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15787 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15788 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15789 break;
15790case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tumu:
15791 ID = Intrinsic::riscv_vnsrl_mask;
15792 PolicyAttrs = 0;
15793IsMasked = true;
15794
15795 {
15796 if (IsMasked) {
15797 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15798 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15799 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15800 } else {
15801 if (PolicyAttrs & RVV_VTA)
15802 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15803 }
15804 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15805 if (IsMasked) {
15806 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15807 // maskedoff, op1, xlen, mask, vl
15808 IntrinsicTypes = {ResultType,
15809 Ops[1]->getType(),
15810 Ops[4]->getType(),
15811 Ops[4]->getType()};
15812 } else {
15813 // passthru, op1, xlen, vl
15814 IntrinsicTypes = {ResultType,
15815 Ops[1]->getType(),
15816 Ops[3]->getType(),
15817 Ops[3]->getType()};
15818 }
15819 break;
15820 }
15821 break;
15822case RISCVVector::BI__builtin_rvv_vnsrl_wv_mu:
15823case RISCVVector::BI__builtin_rvv_vnsrl_wx_mu:
15824 ID = Intrinsic::riscv_vnsrl_mask;
15825 PolicyAttrs = 1;
15826 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15827 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15828 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15829 break;
15830case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_mu:
15831 ID = Intrinsic::riscv_vnsrl_mask;
15832 PolicyAttrs = 1;
15833IsMasked = true;
15834
15835 {
15836 if (IsMasked) {
15837 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15838 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15839 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15840 } else {
15841 if (PolicyAttrs & RVV_VTA)
15842 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15843 }
15844 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15845 if (IsMasked) {
15846 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15847 // maskedoff, op1, xlen, mask, vl
15848 IntrinsicTypes = {ResultType,
15849 Ops[1]->getType(),
15850 Ops[4]->getType(),
15851 Ops[4]->getType()};
15852 } else {
15853 // passthru, op1, xlen, vl
15854 IntrinsicTypes = {ResultType,
15855 Ops[1]->getType(),
15856 Ops[3]->getType(),
15857 Ops[3]->getType()};
15858 }
15859 break;
15860 }
15861 break;
15862case RISCVVector::BI__builtin_rvv_vor_vv_tu:
15863case RISCVVector::BI__builtin_rvv_vor_vx_tu:
15864 ID = Intrinsic::riscv_vor;
15865 PolicyAttrs = 2;
15866 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15867 break;
15868case RISCVVector::BI__builtin_rvv_vor_vv_ta:
15869case RISCVVector::BI__builtin_rvv_vor_vx_ta:
15870 ID = Intrinsic::riscv_vor;
15871 PolicyAttrs = 3;
15872 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15873 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15874 break;
15875case RISCVVector::BI__builtin_rvv_vor_vv_tum:
15876case RISCVVector::BI__builtin_rvv_vor_vx_tum:
15877 ID = Intrinsic::riscv_vor_mask;
15878 PolicyAttrs = 2;
15879 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15880 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15881 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15882 break;
15883case RISCVVector::BI__builtin_rvv_vor_vv_tama:
15884case RISCVVector::BI__builtin_rvv_vor_vx_tama:
15885 ID = Intrinsic::riscv_vor_mask;
15886 PolicyAttrs = 3;
15887 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15888 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15889 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15890 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15891 break;
15892case RISCVVector::BI__builtin_rvv_vor_vv_tumu:
15893case RISCVVector::BI__builtin_rvv_vor_vx_tumu:
15894 ID = Intrinsic::riscv_vor_mask;
15895 PolicyAttrs = 0;
15896 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15897 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15898 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15899 break;
15900case RISCVVector::BI__builtin_rvv_vor_vv_mu:
15901case RISCVVector::BI__builtin_rvv_vor_vx_mu:
15902 ID = Intrinsic::riscv_vor_mask;
15903 PolicyAttrs = 1;
15904 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15905 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15906 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15907 break;
15908case RISCVVector::BI__builtin_rvv_vredand_vs_tu:
15909 ID = Intrinsic::riscv_vredand;
15910 PolicyAttrs = 2;
15911 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15912 break;
15913case RISCVVector::BI__builtin_rvv_vredand_vs_ta:
15914 ID = Intrinsic::riscv_vredand;
15915 PolicyAttrs = 3;
15916 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15917 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15918 break;
15919case RISCVVector::BI__builtin_rvv_vredand_vs_tum:
15920 ID = Intrinsic::riscv_vredand_mask;
15921 PolicyAttrs = 2;
15922 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15923 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15924 break;
15925case RISCVVector::BI__builtin_rvv_vredand_vs_tama:
15926 ID = Intrinsic::riscv_vredand_mask;
15927 PolicyAttrs = 3;
15928 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15929 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15930 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15931 break;
15932case RISCVVector::BI__builtin_rvv_vredmax_vs_tu:
15933 ID = Intrinsic::riscv_vredmax;
15934 PolicyAttrs = 2;
15935 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15936 break;
15937case RISCVVector::BI__builtin_rvv_vredmax_vs_ta:
15938 ID = Intrinsic::riscv_vredmax;
15939 PolicyAttrs = 3;
15940 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15941 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15942 break;
15943case RISCVVector::BI__builtin_rvv_vredmax_vs_tum:
15944 ID = Intrinsic::riscv_vredmax_mask;
15945 PolicyAttrs = 2;
15946 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15947 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15948 break;
15949case RISCVVector::BI__builtin_rvv_vredmax_vs_tama:
15950 ID = Intrinsic::riscv_vredmax_mask;
15951 PolicyAttrs = 3;
15952 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15953 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15954 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15955 break;
15956case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tu:
15957 ID = Intrinsic::riscv_vredmaxu;
15958 PolicyAttrs = 2;
15959 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15960 break;
15961case RISCVVector::BI__builtin_rvv_vredmaxu_vs_ta:
15962 ID = Intrinsic::riscv_vredmaxu;
15963 PolicyAttrs = 3;
15964 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15965 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15966 break;
15967case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tum:
15968 ID = Intrinsic::riscv_vredmaxu_mask;
15969 PolicyAttrs = 2;
15970 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15971 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15972 break;
15973case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tama:
15974 ID = Intrinsic::riscv_vredmaxu_mask;
15975 PolicyAttrs = 3;
15976 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15977 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15978 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15979 break;
15980case RISCVVector::BI__builtin_rvv_vredmin_vs_tu:
15981 ID = Intrinsic::riscv_vredmin;
15982 PolicyAttrs = 2;
15983 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15984 break;
15985case RISCVVector::BI__builtin_rvv_vredmin_vs_ta:
15986 ID = Intrinsic::riscv_vredmin;
15987 PolicyAttrs = 3;
15988 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15989 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15990 break;
15991case RISCVVector::BI__builtin_rvv_vredmin_vs_tum:
15992 ID = Intrinsic::riscv_vredmin_mask;
15993 PolicyAttrs = 2;
15994 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15995 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15996 break;
15997case RISCVVector::BI__builtin_rvv_vredmin_vs_tama:
15998 ID = Intrinsic::riscv_vredmin_mask;
15999 PolicyAttrs = 3;
16000 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16001 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16002 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16003 break;
16004case RISCVVector::BI__builtin_rvv_vredminu_vs_tu:
16005 ID = Intrinsic::riscv_vredminu;
16006 PolicyAttrs = 2;
16007 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16008 break;
16009case RISCVVector::BI__builtin_rvv_vredminu_vs_ta:
16010 ID = Intrinsic::riscv_vredminu;
16011 PolicyAttrs = 3;
16012 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16013 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16014 break;
16015case RISCVVector::BI__builtin_rvv_vredminu_vs_tum:
16016 ID = Intrinsic::riscv_vredminu_mask;
16017 PolicyAttrs = 2;
16018 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16019 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16020 break;
16021case RISCVVector::BI__builtin_rvv_vredminu_vs_tama:
16022 ID = Intrinsic::riscv_vredminu_mask;
16023 PolicyAttrs = 3;
16024 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16025 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16026 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16027 break;
16028case RISCVVector::BI__builtin_rvv_vredor_vs_tu:
16029 ID = Intrinsic::riscv_vredor;
16030 PolicyAttrs = 2;
16031 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16032 break;
16033case RISCVVector::BI__builtin_rvv_vredor_vs_ta:
16034 ID = Intrinsic::riscv_vredor;
16035 PolicyAttrs = 3;
16036 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16037 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16038 break;
16039case RISCVVector::BI__builtin_rvv_vredor_vs_tum:
16040 ID = Intrinsic::riscv_vredor_mask;
16041 PolicyAttrs = 2;
16042 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16043 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16044 break;
16045case RISCVVector::BI__builtin_rvv_vredor_vs_tama:
16046 ID = Intrinsic::riscv_vredor_mask;
16047 PolicyAttrs = 3;
16048 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16049 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16050 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16051 break;
16052case RISCVVector::BI__builtin_rvv_vredsum_vs_tu:
16053 ID = Intrinsic::riscv_vredsum;
16054 PolicyAttrs = 2;
16055 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16056 break;
16057case RISCVVector::BI__builtin_rvv_vredsum_vs_ta:
16058 ID = Intrinsic::riscv_vredsum;
16059 PolicyAttrs = 3;
16060 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16061 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16062 break;
16063case RISCVVector::BI__builtin_rvv_vredsum_vs_tum:
16064 ID = Intrinsic::riscv_vredsum_mask;
16065 PolicyAttrs = 2;
16066 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16067 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16068 break;
16069case RISCVVector::BI__builtin_rvv_vredsum_vs_tama:
16070 ID = Intrinsic::riscv_vredsum_mask;
16071 PolicyAttrs = 3;
16072 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16073 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16074 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16075 break;
16076case RISCVVector::BI__builtin_rvv_vredxor_vs_tu:
16077 ID = Intrinsic::riscv_vredxor;
16078 PolicyAttrs = 2;
16079 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16080 break;
16081case RISCVVector::BI__builtin_rvv_vredxor_vs_ta:
16082 ID = Intrinsic::riscv_vredxor;
16083 PolicyAttrs = 3;
16084 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16085 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16086 break;
16087case RISCVVector::BI__builtin_rvv_vredxor_vs_tum:
16088 ID = Intrinsic::riscv_vredxor_mask;
16089 PolicyAttrs = 2;
16090 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16091 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16092 break;
16093case RISCVVector::BI__builtin_rvv_vredxor_vs_tama:
16094 ID = Intrinsic::riscv_vredxor_mask;
16095 PolicyAttrs = 3;
16096 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16097 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16098 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16099 break;
16100case RISCVVector::BI__builtin_rvv_vrem_vv_tu:
16101case RISCVVector::BI__builtin_rvv_vrem_vx_tu:
16102 ID = Intrinsic::riscv_vrem;
16103 PolicyAttrs = 2;
16104 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16105 break;
16106case RISCVVector::BI__builtin_rvv_vrem_vv_ta:
16107case RISCVVector::BI__builtin_rvv_vrem_vx_ta:
16108 ID = Intrinsic::riscv_vrem;
16109 PolicyAttrs = 3;
16110 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16111 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16112 break;
16113case RISCVVector::BI__builtin_rvv_vrem_vv_tum:
16114case RISCVVector::BI__builtin_rvv_vrem_vx_tum:
16115 ID = Intrinsic::riscv_vrem_mask;
16116 PolicyAttrs = 2;
16117 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16118 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16119 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16120 break;
16121case RISCVVector::BI__builtin_rvv_vrem_vv_tama:
16122case RISCVVector::BI__builtin_rvv_vrem_vx_tama:
16123 ID = Intrinsic::riscv_vrem_mask;
16124 PolicyAttrs = 3;
16125 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16126 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16127 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16128 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16129 break;
16130case RISCVVector::BI__builtin_rvv_vrem_vv_tumu:
16131case RISCVVector::BI__builtin_rvv_vrem_vx_tumu:
16132 ID = Intrinsic::riscv_vrem_mask;
16133 PolicyAttrs = 0;
16134 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16135 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16136 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16137 break;
16138case RISCVVector::BI__builtin_rvv_vrem_vv_mu:
16139case RISCVVector::BI__builtin_rvv_vrem_vx_mu:
16140 ID = Intrinsic::riscv_vrem_mask;
16141 PolicyAttrs = 1;
16142 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16143 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16144 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16145 break;
16146case RISCVVector::BI__builtin_rvv_vremu_vv_tu:
16147case RISCVVector::BI__builtin_rvv_vremu_vx_tu:
16148 ID = Intrinsic::riscv_vremu;
16149 PolicyAttrs = 2;
16150 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16151 break;
16152case RISCVVector::BI__builtin_rvv_vremu_vv_ta:
16153case RISCVVector::BI__builtin_rvv_vremu_vx_ta:
16154 ID = Intrinsic::riscv_vremu;
16155 PolicyAttrs = 3;
16156 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16157 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16158 break;
16159case RISCVVector::BI__builtin_rvv_vremu_vv_tum:
16160case RISCVVector::BI__builtin_rvv_vremu_vx_tum:
16161 ID = Intrinsic::riscv_vremu_mask;
16162 PolicyAttrs = 2;
16163 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16164 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16165 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16166 break;
16167case RISCVVector::BI__builtin_rvv_vremu_vv_tama:
16168case RISCVVector::BI__builtin_rvv_vremu_vx_tama:
16169 ID = Intrinsic::riscv_vremu_mask;
16170 PolicyAttrs = 3;
16171 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16172 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16173 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16174 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16175 break;
16176case RISCVVector::BI__builtin_rvv_vremu_vv_tumu:
16177case RISCVVector::BI__builtin_rvv_vremu_vx_tumu:
16178 ID = Intrinsic::riscv_vremu_mask;
16179 PolicyAttrs = 0;
16180 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16181 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16182 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16183 break;
16184case RISCVVector::BI__builtin_rvv_vremu_vv_mu:
16185case RISCVVector::BI__builtin_rvv_vremu_vx_mu:
16186 ID = Intrinsic::riscv_vremu_mask;
16187 PolicyAttrs = 1;
16188 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16189 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16190 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16191 break;
16192case RISCVVector::BI__builtin_rvv_vrgather_vv_tu:
16193 ID = Intrinsic::riscv_vrgather_vv;
16194 PolicyAttrs = 2;
16195 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16196 break;
16197case RISCVVector::BI__builtin_rvv_vrgather_vv_ta:
16198 ID = Intrinsic::riscv_vrgather_vv;
16199 PolicyAttrs = 3;
16200 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16201 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16202 break;
16203case RISCVVector::BI__builtin_rvv_vrgather_vv_tum:
16204 ID = Intrinsic::riscv_vrgather_vv_mask;
16205 PolicyAttrs = 2;
16206 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16207 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16208 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16209 break;
16210case RISCVVector::BI__builtin_rvv_vrgather_vv_tama:
16211 ID = Intrinsic::riscv_vrgather_vv_mask;
16212 PolicyAttrs = 3;
16213 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16214 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16215 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16216 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16217 break;
16218case RISCVVector::BI__builtin_rvv_vrgather_vv_tumu:
16219 ID = Intrinsic::riscv_vrgather_vv_mask;
16220 PolicyAttrs = 0;
16221 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16222 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16223 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16224 break;
16225case RISCVVector::BI__builtin_rvv_vrgather_vv_mu:
16226 ID = Intrinsic::riscv_vrgather_vv_mask;
16227 PolicyAttrs = 1;
16228 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16229 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16230 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16231 break;
16232case RISCVVector::BI__builtin_rvv_vrgather_vx_tu:
16233 ID = Intrinsic::riscv_vrgather_vx;
16234 PolicyAttrs = 2;
16235 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16236 break;
16237case RISCVVector::BI__builtin_rvv_vrgather_vx_ta:
16238 ID = Intrinsic::riscv_vrgather_vx;
16239 PolicyAttrs = 3;
16240 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16241 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16242 break;
16243case RISCVVector::BI__builtin_rvv_vrgather_vx_tum:
16244 ID = Intrinsic::riscv_vrgather_vx_mask;
16245 PolicyAttrs = 2;
16246 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16247 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16248 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16249 break;
16250case RISCVVector::BI__builtin_rvv_vrgather_vx_tama:
16251 ID = Intrinsic::riscv_vrgather_vx_mask;
16252 PolicyAttrs = 3;
16253 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16254 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16255 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16256 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16257 break;
16258case RISCVVector::BI__builtin_rvv_vrgather_vx_tumu:
16259 ID = Intrinsic::riscv_vrgather_vx_mask;
16260 PolicyAttrs = 0;
16261 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16262 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16263 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16264 break;
16265case RISCVVector::BI__builtin_rvv_vrgather_vx_mu:
16266 ID = Intrinsic::riscv_vrgather_vx_mask;
16267 PolicyAttrs = 1;
16268 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16269 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16270 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16271 break;
16272case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tu:
16273 ID = Intrinsic::riscv_vrgatherei16_vv;
16274 PolicyAttrs = 2;
16275 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16276 break;
16277case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_ta:
16278 ID = Intrinsic::riscv_vrgatherei16_vv;
16279 PolicyAttrs = 3;
16280 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16281 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16282 break;
16283case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tum:
16284 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16285 PolicyAttrs = 2;
16286 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16287 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16288 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16289 break;
16290case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tama:
16291 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16292 PolicyAttrs = 3;
16293 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16294 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16295 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16296 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16297 break;
16298case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tumu:
16299 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16300 PolicyAttrs = 0;
16301 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16302 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16303 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16304 break;
16305case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_mu:
16306 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16307 PolicyAttrs = 1;
16308 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16309 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16310 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16311 break;
16312case RISCVVector::BI__builtin_rvv_vrsub_vx_tu:
16313 ID = Intrinsic::riscv_vrsub;
16314 PolicyAttrs = 2;
16315 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16316 break;
16317case RISCVVector::BI__builtin_rvv_vneg_v_tu:
16318 ID = Intrinsic::riscv_vrsub;
16319 PolicyAttrs = 2;
16320IsMasked = false;
16321
16322 {
16323 if (IsMasked) {
16324 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16325 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16326 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16327 } else {
16328 if (PolicyAttrs & RVV_VTA)
16329 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16330 }
16331 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16332 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16333
16334 if (IsMasked) {
16335 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16336 // maskedoff, op1, op2, mask, vl, policy
16337 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16338 } else {
16339 // passthru, op1, op2, vl
16340 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16341 }
16342 break;
16343 }
16344 break;
16345case RISCVVector::BI__builtin_rvv_vrsub_vx_ta:
16346 ID = Intrinsic::riscv_vrsub;
16347 PolicyAttrs = 3;
16348 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16349 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16350 break;
16351case RISCVVector::BI__builtin_rvv_vneg_v_ta:
16352 ID = Intrinsic::riscv_vrsub;
16353 PolicyAttrs = 3;
16354IsMasked = false;
16355
16356 {
16357 if (IsMasked) {
16358 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16359 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16360 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16361 } else {
16362 if (PolicyAttrs & RVV_VTA)
16363 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16364 }
16365 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16366 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16367
16368 if (IsMasked) {
16369 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16370 // maskedoff, op1, op2, mask, vl, policy
16371 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16372 } else {
16373 // passthru, op1, op2, vl
16374 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16375 }
16376 break;
16377 }
16378 break;
16379case RISCVVector::BI__builtin_rvv_vrsub_vx_tum:
16380 ID = Intrinsic::riscv_vrsub_mask;
16381 PolicyAttrs = 2;
16382 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16383 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16384 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16385 break;
16386case RISCVVector::BI__builtin_rvv_vneg_v_tum:
16387 ID = Intrinsic::riscv_vrsub_mask;
16388 PolicyAttrs = 2;
16389IsMasked = true;
16390
16391 {
16392 if (IsMasked) {
16393 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16394 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16395 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16396 } else {
16397 if (PolicyAttrs & RVV_VTA)
16398 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16399 }
16400 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16401 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16402
16403 if (IsMasked) {
16404 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16405 // maskedoff, op1, op2, mask, vl, policy
16406 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16407 } else {
16408 // passthru, op1, op2, vl
16409 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16410 }
16411 break;
16412 }
16413 break;
16414case RISCVVector::BI__builtin_rvv_vrsub_vx_tama:
16415 ID = Intrinsic::riscv_vrsub_mask;
16416 PolicyAttrs = 3;
16417 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16418 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16419 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16420 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16421 break;
16422case RISCVVector::BI__builtin_rvv_vneg_v_tama:
16423 ID = Intrinsic::riscv_vrsub_mask;
16424 PolicyAttrs = 3;
16425IsMasked = true;
16426
16427 {
16428 if (IsMasked) {
16429 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16430 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16431 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16432 } else {
16433 if (PolicyAttrs & RVV_VTA)
16434 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16435 }
16436 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16437 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16438
16439 if (IsMasked) {
16440 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16441 // maskedoff, op1, op2, mask, vl, policy
16442 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16443 } else {
16444 // passthru, op1, op2, vl
16445 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16446 }
16447 break;
16448 }
16449 break;
16450case RISCVVector::BI__builtin_rvv_vrsub_vx_tumu:
16451 ID = Intrinsic::riscv_vrsub_mask;
16452 PolicyAttrs = 0;
16453 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16454 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16455 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16456 break;
16457case RISCVVector::BI__builtin_rvv_vneg_v_tumu:
16458 ID = Intrinsic::riscv_vrsub_mask;
16459 PolicyAttrs = 0;
16460IsMasked = true;
16461
16462 {
16463 if (IsMasked) {
16464 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16465 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16466 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16467 } else {
16468 if (PolicyAttrs & RVV_VTA)
16469 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16470 }
16471 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16472 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16473
16474 if (IsMasked) {
16475 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16476 // maskedoff, op1, op2, mask, vl, policy
16477 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16478 } else {
16479 // passthru, op1, op2, vl
16480 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16481 }
16482 break;
16483 }
16484 break;
16485case RISCVVector::BI__builtin_rvv_vrsub_vx_mu:
16486 ID = Intrinsic::riscv_vrsub_mask;
16487 PolicyAttrs = 1;
16488 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16489 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16490 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16491 break;
16492case RISCVVector::BI__builtin_rvv_vneg_v_mu:
16493 ID = Intrinsic::riscv_vrsub_mask;
16494 PolicyAttrs = 1;
16495IsMasked = true;
16496
16497 {
16498 if (IsMasked) {
16499 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16500 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16501 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16502 } else {
16503 if (PolicyAttrs & RVV_VTA)
16504 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16505 }
16506 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16507 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16508
16509 if (IsMasked) {
16510 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16511 // maskedoff, op1, op2, mask, vl, policy
16512 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16513 } else {
16514 // passthru, op1, op2, vl
16515 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16516 }
16517 break;
16518 }
16519 break;
16520case RISCVVector::BI__builtin_rvv_vsadd_vv_tu:
16521case RISCVVector::BI__builtin_rvv_vsadd_vx_tu:
16522 ID = Intrinsic::riscv_vsadd;
16523 PolicyAttrs = 2;
16524 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16525 break;
16526case RISCVVector::BI__builtin_rvv_vsadd_vv_ta:
16527case RISCVVector::BI__builtin_rvv_vsadd_vx_ta:
16528 ID = Intrinsic::riscv_vsadd;
16529 PolicyAttrs = 3;
16530 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16531 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16532 break;
16533case RISCVVector::BI__builtin_rvv_vsadd_vv_tum:
16534case RISCVVector::BI__builtin_rvv_vsadd_vx_tum:
16535 ID = Intrinsic::riscv_vsadd_mask;
16536 PolicyAttrs = 2;
16537 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16538 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16539 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16540 break;
16541case RISCVVector::BI__builtin_rvv_vsadd_vv_tama:
16542case RISCVVector::BI__builtin_rvv_vsadd_vx_tama:
16543 ID = Intrinsic::riscv_vsadd_mask;
16544 PolicyAttrs = 3;
16545 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16546 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16547 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16548 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16549 break;
16550case RISCVVector::BI__builtin_rvv_vsadd_vv_tumu:
16551case RISCVVector::BI__builtin_rvv_vsadd_vx_tumu:
16552 ID = Intrinsic::riscv_vsadd_mask;
16553 PolicyAttrs = 0;
16554 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16555 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16556 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16557 break;
16558case RISCVVector::BI__builtin_rvv_vsadd_vv_mu:
16559case RISCVVector::BI__builtin_rvv_vsadd_vx_mu:
16560 ID = Intrinsic::riscv_vsadd_mask;
16561 PolicyAttrs = 1;
16562 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16563 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16564 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16565 break;
16566case RISCVVector::BI__builtin_rvv_vsaddu_vv_tu:
16567case RISCVVector::BI__builtin_rvv_vsaddu_vx_tu:
16568 ID = Intrinsic::riscv_vsaddu;
16569 PolicyAttrs = 2;
16570 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16571 break;
16572case RISCVVector::BI__builtin_rvv_vsaddu_vv_ta:
16573case RISCVVector::BI__builtin_rvv_vsaddu_vx_ta:
16574 ID = Intrinsic::riscv_vsaddu;
16575 PolicyAttrs = 3;
16576 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16577 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16578 break;
16579case RISCVVector::BI__builtin_rvv_vsaddu_vv_tum:
16580case RISCVVector::BI__builtin_rvv_vsaddu_vx_tum:
16581 ID = Intrinsic::riscv_vsaddu_mask;
16582 PolicyAttrs = 2;
16583 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16584 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16585 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16586 break;
16587case RISCVVector::BI__builtin_rvv_vsaddu_vv_tama:
16588case RISCVVector::BI__builtin_rvv_vsaddu_vx_tama:
16589 ID = Intrinsic::riscv_vsaddu_mask;
16590 PolicyAttrs = 3;
16591 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16592 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16593 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16594 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16595 break;
16596case RISCVVector::BI__builtin_rvv_vsaddu_vv_tumu:
16597case RISCVVector::BI__builtin_rvv_vsaddu_vx_tumu:
16598 ID = Intrinsic::riscv_vsaddu_mask;
16599 PolicyAttrs = 0;
16600 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16601 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16602 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16603 break;
16604case RISCVVector::BI__builtin_rvv_vsaddu_vv_mu:
16605case RISCVVector::BI__builtin_rvv_vsaddu_vx_mu:
16606 ID = Intrinsic::riscv_vsaddu_mask;
16607 PolicyAttrs = 1;
16608 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16609 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16610 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16611 break;
16612case RISCVVector::BI__builtin_rvv_vsbc_vvm_tu:
16613case RISCVVector::BI__builtin_rvv_vsbc_vxm_tu:
16614 ID = Intrinsic::riscv_vsbc;
16615 PolicyAttrs = 2;
16616 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16617 break;
16618case RISCVVector::BI__builtin_rvv_vsbc_vvm_ta:
16619case RISCVVector::BI__builtin_rvv_vsbc_vxm_ta:
16620 ID = Intrinsic::riscv_vsbc;
16621 PolicyAttrs = 3;
16622 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16623 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16624 break;
16625case RISCVVector::BI__builtin_rvv_vse8_v:
16626case RISCVVector::BI__builtin_rvv_vse16_v:
16627case RISCVVector::BI__builtin_rvv_vse32_v:
16628case RISCVVector::BI__builtin_rvv_vse64_v:
16629 ID = Intrinsic::riscv_vse;
16630 PolicyAttrs = 3;
16631IsMasked = false;
16632
16633 if (IsMasked) {
16634 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
16635 std::swap(Ops[0], Ops[2]);
16636 } else {
16637 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
16638 std::swap(Ops[0], Ops[1]);
16639 }
16640 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
16641 if (IsMasked)
16642 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
16643 else
16644 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
16645 break;
16646case RISCVVector::BI__builtin_rvv_vse8_v_m:
16647case RISCVVector::BI__builtin_rvv_vse16_v_m:
16648case RISCVVector::BI__builtin_rvv_vse32_v_m:
16649case RISCVVector::BI__builtin_rvv_vse64_v_m:
16650 ID = Intrinsic::riscv_vse_mask;
16651 PolicyAttrs = 3;
16652IsMasked = true;
16653
16654 if (IsMasked) {
16655 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
16656 std::swap(Ops[0], Ops[2]);
16657 } else {
16658 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
16659 std::swap(Ops[0], Ops[1]);
16660 }
16661 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
16662 if (IsMasked)
16663 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
16664 else
16665 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
16666 break;
16667case RISCVVector::BI__builtin_rvv_vsetvli:
16668 ID = Intrinsic::riscv_vsetvli;
16669 PolicyAttrs = 3;
16670IsMasked = false;
16671IntrinsicTypes = {ResultType};break;
16672case RISCVVector::BI__builtin_rvv_vsetvlimax:
16673 ID = Intrinsic::riscv_vsetvlimax;
16674 PolicyAttrs = 3;
16675IsMasked = false;
16676IntrinsicTypes = {ResultType};break;
16677case RISCVVector::BI__builtin_rvv_vsext_vf2_tu:
16678case RISCVVector::BI__builtin_rvv_vsext_vf4_tu:
16679case RISCVVector::BI__builtin_rvv_vsext_vf8_tu:
16680 ID = Intrinsic::riscv_vsext;
16681 PolicyAttrs = 2;
16682 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16683 break;
16684case RISCVVector::BI__builtin_rvv_vsext_vf2_ta:
16685case RISCVVector::BI__builtin_rvv_vsext_vf4_ta:
16686case RISCVVector::BI__builtin_rvv_vsext_vf8_ta:
16687 ID = Intrinsic::riscv_vsext;
16688 PolicyAttrs = 3;
16689 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16690 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16691 break;
16692case RISCVVector::BI__builtin_rvv_vsext_vf2_tum:
16693case RISCVVector::BI__builtin_rvv_vsext_vf4_tum:
16694case RISCVVector::BI__builtin_rvv_vsext_vf8_tum:
16695 ID = Intrinsic::riscv_vsext_mask;
16696 PolicyAttrs = 2;
16697 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16698 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16699 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16700 break;
16701case RISCVVector::BI__builtin_rvv_vsext_vf2_tama:
16702case RISCVVector::BI__builtin_rvv_vsext_vf4_tama:
16703case RISCVVector::BI__builtin_rvv_vsext_vf8_tama:
16704 ID = Intrinsic::riscv_vsext_mask;
16705 PolicyAttrs = 3;
16706 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16707 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16708 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16709 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16710 break;
16711case RISCVVector::BI__builtin_rvv_vsext_vf2_tumu:
16712case RISCVVector::BI__builtin_rvv_vsext_vf4_tumu:
16713case RISCVVector::BI__builtin_rvv_vsext_vf8_tumu:
16714 ID = Intrinsic::riscv_vsext_mask;
16715 PolicyAttrs = 0;
16716 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16717 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16718 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16719 break;
16720case RISCVVector::BI__builtin_rvv_vsext_vf2_mu:
16721case RISCVVector::BI__builtin_rvv_vsext_vf4_mu:
16722case RISCVVector::BI__builtin_rvv_vsext_vf8_mu:
16723 ID = Intrinsic::riscv_vsext_mask;
16724 PolicyAttrs = 1;
16725 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16726 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16727 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16728 break;
16729case RISCVVector::BI__builtin_rvv_vslide1down_vx_tu:
16730 ID = Intrinsic::riscv_vslide1down;
16731 PolicyAttrs = 2;
16732 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16733 break;
16734case RISCVVector::BI__builtin_rvv_vslide1down_vx_ta:
16735 ID = Intrinsic::riscv_vslide1down;
16736 PolicyAttrs = 3;
16737 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16738 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16739 break;
16740case RISCVVector::BI__builtin_rvv_vslide1down_vx_tum:
16741 ID = Intrinsic::riscv_vslide1down_mask;
16742 PolicyAttrs = 2;
16743 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16744 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16745 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16746 break;
16747case RISCVVector::BI__builtin_rvv_vslide1down_vx_tama:
16748 ID = Intrinsic::riscv_vslide1down_mask;
16749 PolicyAttrs = 3;
16750 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16751 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16752 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16753 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16754 break;
16755case RISCVVector::BI__builtin_rvv_vslide1down_vx_tumu:
16756 ID = Intrinsic::riscv_vslide1down_mask;
16757 PolicyAttrs = 0;
16758 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16759 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16760 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16761 break;
16762case RISCVVector::BI__builtin_rvv_vslide1down_vx_mu:
16763 ID = Intrinsic::riscv_vslide1down_mask;
16764 PolicyAttrs = 1;
16765 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16766 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16767 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16768 break;
16769case RISCVVector::BI__builtin_rvv_vslide1up_vx_tu:
16770 ID = Intrinsic::riscv_vslide1up;
16771 PolicyAttrs = 2;
16772 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16773 break;
16774case RISCVVector::BI__builtin_rvv_vslide1up_vx_ta:
16775 ID = Intrinsic::riscv_vslide1up;
16776 PolicyAttrs = 3;
16777 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16778 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16779 break;
16780case RISCVVector::BI__builtin_rvv_vslide1up_vx_tum:
16781 ID = Intrinsic::riscv_vslide1up_mask;
16782 PolicyAttrs = 2;
16783 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16784 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16785 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16786 break;
16787case RISCVVector::BI__builtin_rvv_vslide1up_vx_tama:
16788 ID = Intrinsic::riscv_vslide1up_mask;
16789 PolicyAttrs = 3;
16790 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16791 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16792 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16793 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16794 break;
16795case RISCVVector::BI__builtin_rvv_vslide1up_vx_tumu:
16796 ID = Intrinsic::riscv_vslide1up_mask;
16797 PolicyAttrs = 0;
16798 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16799 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16800 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16801 break;
16802case RISCVVector::BI__builtin_rvv_vslide1up_vx_mu:
16803 ID = Intrinsic::riscv_vslide1up_mask;
16804 PolicyAttrs = 1;
16805 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16806 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16807 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16808 break;
16809case RISCVVector::BI__builtin_rvv_vslidedown_vx_tu:
16810 ID = Intrinsic::riscv_vslidedown;
16811 PolicyAttrs = 2;
16812IsMasked = false;
16813
16814 if (IsMasked) {
16815 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16816 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16817 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16818 } else {
16819 if (PolicyAttrs & RVV_VTA)
16820 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16821 }
16822
16823 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16824 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16825 break;
16826case RISCVVector::BI__builtin_rvv_vslidedown_vx_ta:
16827 ID = Intrinsic::riscv_vslidedown;
16828 PolicyAttrs = 3;
16829IsMasked = false;
16830
16831 if (IsMasked) {
16832 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16833 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16834 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16835 } else {
16836 if (PolicyAttrs & RVV_VTA)
16837 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16838 }
16839
16840 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16841 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16842 break;
16843case RISCVVector::BI__builtin_rvv_vslidedown_vx_tum:
16844 ID = Intrinsic::riscv_vslidedown_mask;
16845 PolicyAttrs = 2;
16846IsMasked = true;
16847
16848 if (IsMasked) {
16849 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16850 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16851 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16852 } else {
16853 if (PolicyAttrs & RVV_VTA)
16854 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16855 }
16856
16857 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16858 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16859 break;
16860case RISCVVector::BI__builtin_rvv_vslidedown_vx_tama:
16861 ID = Intrinsic::riscv_vslidedown_mask;
16862 PolicyAttrs = 3;
16863IsMasked = true;
16864
16865 if (IsMasked) {
16866 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16867 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16868 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16869 } else {
16870 if (PolicyAttrs & RVV_VTA)
16871 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16872 }
16873
16874 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16875 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16876 break;
16877case RISCVVector::BI__builtin_rvv_vslidedown_vx_tumu:
16878 ID = Intrinsic::riscv_vslidedown_mask;
16879 PolicyAttrs = 0;
16880IsMasked = true;
16881
16882 if (IsMasked) {
16883 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16884 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16885 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16886 } else {
16887 if (PolicyAttrs & RVV_VTA)
16888 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16889 }
16890
16891 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16892 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16893 break;
16894case RISCVVector::BI__builtin_rvv_vslidedown_vx_mu:
16895 ID = Intrinsic::riscv_vslidedown_mask;
16896 PolicyAttrs = 1;
16897IsMasked = true;
16898
16899 if (IsMasked) {
16900 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16901 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16902 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16903 } else {
16904 if (PolicyAttrs & RVV_VTA)
16905 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16906 }
16907
16908 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16909 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16910 break;
16911case RISCVVector::BI__builtin_rvv_vslideup_vx_tu:
16912 ID = Intrinsic::riscv_vslideup;
16913 PolicyAttrs = 2;
16914 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16915 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16916 break;
16917case RISCVVector::BI__builtin_rvv_vslideup_vx_ta:
16918 ID = Intrinsic::riscv_vslideup;
16919 PolicyAttrs = 3;
16920 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16921 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16922 break;
16923case RISCVVector::BI__builtin_rvv_vslideup_vx_tum:
16924 ID = Intrinsic::riscv_vslideup_mask;
16925 PolicyAttrs = 2;
16926 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16927 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16928 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16929 break;
16930case RISCVVector::BI__builtin_rvv_vslideup_vx_tama:
16931 ID = Intrinsic::riscv_vslideup_mask;
16932 PolicyAttrs = 3;
16933 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16934 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16935 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16936 break;
16937case RISCVVector::BI__builtin_rvv_vslideup_vx_tumu:
16938 ID = Intrinsic::riscv_vslideup_mask;
16939 PolicyAttrs = 0;
16940 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16941 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16942 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16943 break;
16944case RISCVVector::BI__builtin_rvv_vslideup_vx_mu:
16945 ID = Intrinsic::riscv_vslideup_mask;
16946 PolicyAttrs = 1;
16947 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16948 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16949 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16950 break;
16951case RISCVVector::BI__builtin_rvv_vsll_vv_tu:
16952case RISCVVector::BI__builtin_rvv_vsll_vx_tu:
16953 ID = Intrinsic::riscv_vsll;
16954 PolicyAttrs = 2;
16955 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16956 break;
16957case RISCVVector::BI__builtin_rvv_vsll_vv_ta:
16958case RISCVVector::BI__builtin_rvv_vsll_vx_ta:
16959 ID = Intrinsic::riscv_vsll;
16960 PolicyAttrs = 3;
16961 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16962 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16963 break;
16964case RISCVVector::BI__builtin_rvv_vsll_vv_tum:
16965case RISCVVector::BI__builtin_rvv_vsll_vx_tum:
16966 ID = Intrinsic::riscv_vsll_mask;
16967 PolicyAttrs = 2;
16968 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16969 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16970 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16971 break;
16972case RISCVVector::BI__builtin_rvv_vsll_vv_tama:
16973case RISCVVector::BI__builtin_rvv_vsll_vx_tama:
16974 ID = Intrinsic::riscv_vsll_mask;
16975 PolicyAttrs = 3;
16976 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16977 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16978 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16979 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16980 break;
16981case RISCVVector::BI__builtin_rvv_vsll_vv_tumu:
16982case RISCVVector::BI__builtin_rvv_vsll_vx_tumu:
16983 ID = Intrinsic::riscv_vsll_mask;
16984 PolicyAttrs = 0;
16985 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16986 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16987 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16988 break;
16989case RISCVVector::BI__builtin_rvv_vsll_vv_mu:
16990case RISCVVector::BI__builtin_rvv_vsll_vx_mu:
16991 ID = Intrinsic::riscv_vsll_mask;
16992 PolicyAttrs = 1;
16993 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16994 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16995 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16996 break;
16997case RISCVVector::BI__builtin_rvv_vsm_v:
16998 ID = Intrinsic::riscv_vsm;
16999 PolicyAttrs = 3;
17000IsMasked = false;
17001
17002 if (IsMasked) {
17003 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
17004 std::swap(Ops[0], Ops[2]);
17005 } else {
17006 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
17007 std::swap(Ops[0], Ops[1]);
17008 }
17009 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17010 if (IsMasked)
17011 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17012 else
17013 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
17014 break;
17015case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:
17016case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:
17017 ID = Intrinsic::riscv_vsmul;
17018 PolicyAttrs = 2;
17019 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17020 break;
17021case RISCVVector::BI__builtin_rvv_vsmul_vv_ta:
17022case RISCVVector::BI__builtin_rvv_vsmul_vx_ta:
17023 ID = Intrinsic::riscv_vsmul;
17024 PolicyAttrs = 3;
17025 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17026 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17027 break;
17028case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:
17029case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:
17030 ID = Intrinsic::riscv_vsmul_mask;
17031 PolicyAttrs = 2;
17032 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17033 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17034 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17035 break;
17036case RISCVVector::BI__builtin_rvv_vsmul_vv_tama:
17037case RISCVVector::BI__builtin_rvv_vsmul_vx_tama:
17038 ID = Intrinsic::riscv_vsmul_mask;
17039 PolicyAttrs = 3;
17040 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17041 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17042 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17043 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17044 break;
17045case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:
17046case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu:
17047 ID = Intrinsic::riscv_vsmul_mask;
17048 PolicyAttrs = 0;
17049 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17050 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17051 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17052 break;
17053case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:
17054case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:
17055 ID = Intrinsic::riscv_vsmul_mask;
17056 PolicyAttrs = 1;
17057 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17058 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17059 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17060 break;
17061case RISCVVector::BI__builtin_rvv_vsoxei8_v:
17062case RISCVVector::BI__builtin_rvv_vsoxei16_v:
17063case RISCVVector::BI__builtin_rvv_vsoxei32_v:
17064case RISCVVector::BI__builtin_rvv_vsoxei64_v:
17065 ID = Intrinsic::riscv_vsoxei;
17066 PolicyAttrs = 3;
17067IsMasked = false;
17068
17069 if (IsMasked) {
17070 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
17071 std::swap(Ops[0], Ops[3]);
17072 } else {
17073 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
17074 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17075 }
17076 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17077 if (IsMasked)
17078 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
17079 else
17080 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
17081 break;
17082case RISCVVector::BI__builtin_rvv_vsoxei8_v_m:
17083case RISCVVector::BI__builtin_rvv_vsoxei16_v_m:
17084case RISCVVector::BI__builtin_rvv_vsoxei32_v_m:
17085case RISCVVector::BI__builtin_rvv_vsoxei64_v_m:
17086 ID = Intrinsic::riscv_vsoxei_mask;
17087 PolicyAttrs = 3;
17088IsMasked = true;
17089
17090 if (IsMasked) {
17091 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
17092 std::swap(Ops[0], Ops[3]);
17093 } else {
17094 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
17095 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17096 }
17097 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17098 if (IsMasked)
17099 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
17100 else
17101 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
17102 break;
17103case RISCVVector::BI__builtin_rvv_vsoxseg2ei8_v:
17104case RISCVVector::BI__builtin_rvv_vsoxseg2ei16_v:
17105case RISCVVector::BI__builtin_rvv_vsoxseg2ei32_v:
17106case RISCVVector::BI__builtin_rvv_vsoxseg2ei64_v:
17107 ID = Intrinsic::riscv_vsoxseg2;
17108 NF = 2;
17109 PolicyAttrs = 3;
17110IsMasked = false;
17111
17112 {
17113 if (IsMasked) {
17114 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17115 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17116 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17117 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17118 IntrinsicTypes = {Ops[0]->getType(),
17119 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17120 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17120, __extension__ __PRETTY_FUNCTION__))
;
17121 } else {
17122 // Builtin: (ptr, index, val0, val1, ..., vl)
17123 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17124 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17125 IntrinsicTypes = {Ops[0]->getType(),
17126 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17127 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17127, __extension__ __PRETTY_FUNCTION__))
;
17128 }
17129 }
17130 break;
17131case RISCVVector::BI__builtin_rvv_vsoxseg2ei8_v_m:
17132case RISCVVector::BI__builtin_rvv_vsoxseg2ei16_v_m:
17133case RISCVVector::BI__builtin_rvv_vsoxseg2ei32_v_m:
17134case RISCVVector::BI__builtin_rvv_vsoxseg2ei64_v_m:
17135 ID = Intrinsic::riscv_vsoxseg2_mask;
17136 NF = 2;
17137 PolicyAttrs = 3;
17138IsMasked = true;
17139
17140 {
17141 if (IsMasked) {
17142 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17143 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17144 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17145 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17146 IntrinsicTypes = {Ops[0]->getType(),
17147 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17148 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17148, __extension__ __PRETTY_FUNCTION__))
;
17149 } else {
17150 // Builtin: (ptr, index, val0, val1, ..., vl)
17151 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17152 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17153 IntrinsicTypes = {Ops[0]->getType(),
17154 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17155 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17155, __extension__ __PRETTY_FUNCTION__))
;
17156 }
17157 }
17158 break;
17159case RISCVVector::BI__builtin_rvv_vsoxseg3ei8_v:
17160case RISCVVector::BI__builtin_rvv_vsoxseg3ei16_v:
17161case RISCVVector::BI__builtin_rvv_vsoxseg3ei32_v:
17162case RISCVVector::BI__builtin_rvv_vsoxseg3ei64_v:
17163 ID = Intrinsic::riscv_vsoxseg3;
17164 NF = 3;
17165 PolicyAttrs = 3;
17166IsMasked = false;
17167
17168 {
17169 if (IsMasked) {
17170 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17171 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17172 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17173 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17174 IntrinsicTypes = {Ops[0]->getType(),
17175 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17176 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17176, __extension__ __PRETTY_FUNCTION__))
;
17177 } else {
17178 // Builtin: (ptr, index, val0, val1, ..., vl)
17179 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17180 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17181 IntrinsicTypes = {Ops[0]->getType(),
17182 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17183 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17183, __extension__ __PRETTY_FUNCTION__))
;
17184 }
17185 }
17186 break;
17187case RISCVVector::BI__builtin_rvv_vsoxseg3ei8_v_m:
17188case RISCVVector::BI__builtin_rvv_vsoxseg3ei16_v_m:
17189case RISCVVector::BI__builtin_rvv_vsoxseg3ei32_v_m:
17190case RISCVVector::BI__builtin_rvv_vsoxseg3ei64_v_m:
17191 ID = Intrinsic::riscv_vsoxseg3_mask;
17192 NF = 3;
17193 PolicyAttrs = 3;
17194IsMasked = true;
17195
17196 {
17197 if (IsMasked) {
17198 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17199 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17200 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17201 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17202 IntrinsicTypes = {Ops[0]->getType(),
17203 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17204 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17204, __extension__ __PRETTY_FUNCTION__))
;
17205 } else {
17206 // Builtin: (ptr, index, val0, val1, ..., vl)
17207 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17208 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17209 IntrinsicTypes = {Ops[0]->getType(),
17210 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17211 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17211, __extension__ __PRETTY_FUNCTION__))
;
17212 }
17213 }
17214 break;
17215case RISCVVector::BI__builtin_rvv_vsoxseg4ei8_v:
17216case RISCVVector::BI__builtin_rvv_vsoxseg4ei16_v:
17217case RISCVVector::BI__builtin_rvv_vsoxseg4ei32_v:
17218case RISCVVector::BI__builtin_rvv_vsoxseg4ei64_v:
17219 ID = Intrinsic::riscv_vsoxseg4;
17220 NF = 4;
17221 PolicyAttrs = 3;
17222IsMasked = false;
17223
17224 {
17225 if (IsMasked) {
17226 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17227 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17228 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17229 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17230 IntrinsicTypes = {Ops[0]->getType(),
17231 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17232 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17232, __extension__ __PRETTY_FUNCTION__))
;
17233 } else {
17234 // Builtin: (ptr, index, val0, val1, ..., vl)
17235 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17236 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17237 IntrinsicTypes = {Ops[0]->getType(),
17238 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17239 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17239, __extension__ __PRETTY_FUNCTION__))
;
17240 }
17241 }
17242 break;
17243case RISCVVector::BI__builtin_rvv_vsoxseg4ei8_v_m:
17244case RISCVVector::BI__builtin_rvv_vsoxseg4ei16_v_m:
17245case RISCVVector::BI__builtin_rvv_vsoxseg4ei32_v_m:
17246case RISCVVector::BI__builtin_rvv_vsoxseg4ei64_v_m:
17247 ID = Intrinsic::riscv_vsoxseg4_mask;
17248 NF = 4;
17249 PolicyAttrs = 3;
17250IsMasked = true;
17251
17252 {
17253 if (IsMasked) {
17254 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17255 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17256 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17257 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17258 IntrinsicTypes = {Ops[0]->getType(),
17259 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17260 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17260, __extension__ __PRETTY_FUNCTION__))
;
17261 } else {
17262 // Builtin: (ptr, index, val0, val1, ..., vl)
17263 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17264 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17265 IntrinsicTypes = {Ops[0]->getType(),
17266 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17267 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17267, __extension__ __PRETTY_FUNCTION__))
;
17268 }
17269 }
17270 break;
17271case RISCVVector::BI__builtin_rvv_vsoxseg5ei8_v:
17272case RISCVVector::BI__builtin_rvv_vsoxseg5ei16_v:
17273case RISCVVector::BI__builtin_rvv_vsoxseg5ei32_v:
17274case RISCVVector::BI__builtin_rvv_vsoxseg5ei64_v:
17275 ID = Intrinsic::riscv_vsoxseg5;
17276 NF = 5;
17277 PolicyAttrs = 3;
17278IsMasked = false;
17279
17280 {
17281 if (IsMasked) {
17282 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17283 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17284 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17285 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17286 IntrinsicTypes = {Ops[0]->getType(),
17287 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17288 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17288, __extension__ __PRETTY_FUNCTION__))
;
17289 } else {
17290 // Builtin: (ptr, index, val0, val1, ..., vl)
17291 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17292 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17293 IntrinsicTypes = {Ops[0]->getType(),
17294 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17295 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17295, __extension__ __PRETTY_FUNCTION__))
;
17296 }
17297 }
17298 break;
17299case RISCVVector::BI__builtin_rvv_vsoxseg5ei8_v_m:
17300case RISCVVector::BI__builtin_rvv_vsoxseg5ei16_v_m:
17301case RISCVVector::BI__builtin_rvv_vsoxseg5ei32_v_m:
17302case RISCVVector::BI__builtin_rvv_vsoxseg5ei64_v_m:
17303 ID = Intrinsic::riscv_vsoxseg5_mask;
17304 NF = 5;
17305 PolicyAttrs = 3;
17306IsMasked = true;
17307
17308 {
17309 if (IsMasked) {
17310 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17311 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17312 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17313 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17314 IntrinsicTypes = {Ops[0]->getType(),
17315 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17316 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17316, __extension__ __PRETTY_FUNCTION__))
;
17317 } else {
17318 // Builtin: (ptr, index, val0, val1, ..., vl)
17319 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17320 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17321 IntrinsicTypes = {Ops[0]->getType(),
17322 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17323 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17323, __extension__ __PRETTY_FUNCTION__))
;
17324 }
17325 }
17326 break;
17327case RISCVVector::BI__builtin_rvv_vsoxseg6ei8_v:
17328case RISCVVector::BI__builtin_rvv_vsoxseg6ei16_v:
17329case RISCVVector::BI__builtin_rvv_vsoxseg6ei32_v:
17330case RISCVVector::BI__builtin_rvv_vsoxseg6ei64_v:
17331 ID = Intrinsic::riscv_vsoxseg6;
17332 NF = 6;
17333 PolicyAttrs = 3;
17334IsMasked = false;
17335
17336 {
17337 if (IsMasked) {
17338 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17339 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17340 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17341 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17342 IntrinsicTypes = {Ops[0]->getType(),
17343 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17344 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17344, __extension__ __PRETTY_FUNCTION__))
;
17345 } else {
17346 // Builtin: (ptr, index, val0, val1, ..., vl)
17347 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17348 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17349 IntrinsicTypes = {Ops[0]->getType(),
17350 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17351 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17351, __extension__ __PRETTY_FUNCTION__))
;
17352 }
17353 }
17354 break;
17355case RISCVVector::BI__builtin_rvv_vsoxseg6ei8_v_m:
17356case RISCVVector::BI__builtin_rvv_vsoxseg6ei16_v_m:
17357case RISCVVector::BI__builtin_rvv_vsoxseg6ei32_v_m:
17358case RISCVVector::BI__builtin_rvv_vsoxseg6ei64_v_m:
17359 ID = Intrinsic::riscv_vsoxseg6_mask;
17360 NF = 6;
17361 PolicyAttrs = 3;
17362IsMasked = true;
17363
17364 {
17365 if (IsMasked) {
17366 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17367 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17368 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17369 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17370 IntrinsicTypes = {Ops[0]->getType(),
17371 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17372 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17372, __extension__ __PRETTY_FUNCTION__))
;
17373 } else {
17374 // Builtin: (ptr, index, val0, val1, ..., vl)
17375 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17376 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17377 IntrinsicTypes = {Ops[0]->getType(),
17378 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17379 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17379, __extension__ __PRETTY_FUNCTION__))
;
17380 }
17381 }
17382 break;
17383case RISCVVector::BI__builtin_rvv_vsoxseg7ei8_v:
17384case RISCVVector::BI__builtin_rvv_vsoxseg7ei16_v:
17385case RISCVVector::BI__builtin_rvv_vsoxseg7ei32_v:
17386case RISCVVector::BI__builtin_rvv_vsoxseg7ei64_v:
17387 ID = Intrinsic::riscv_vsoxseg7;
17388 NF = 7;
17389 PolicyAttrs = 3;
17390IsMasked = false;
17391
17392 {
17393 if (IsMasked) {
17394 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17395 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17396 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17397 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17398 IntrinsicTypes = {Ops[0]->getType(),
17399 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17400 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17400, __extension__ __PRETTY_FUNCTION__))
;
17401 } else {
17402 // Builtin: (ptr, index, val0, val1, ..., vl)
17403 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17404 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17405 IntrinsicTypes = {Ops[0]->getType(),
17406 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17407 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17407, __extension__ __PRETTY_FUNCTION__))
;
17408 }
17409 }
17410 break;
17411case RISCVVector::BI__builtin_rvv_vsoxseg7ei8_v_m:
17412case RISCVVector::BI__builtin_rvv_vsoxseg7ei16_v_m:
17413case RISCVVector::BI__builtin_rvv_vsoxseg7ei32_v_m:
17414case RISCVVector::BI__builtin_rvv_vsoxseg7ei64_v_m:
17415 ID = Intrinsic::riscv_vsoxseg7_mask;
17416 NF = 7;
17417 PolicyAttrs = 3;
17418IsMasked = true;
17419
17420 {
17421 if (IsMasked) {
17422 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17423 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17424 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17425 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17426 IntrinsicTypes = {Ops[0]->getType(),
17427 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17428 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17428, __extension__ __PRETTY_FUNCTION__))
;
17429 } else {
17430 // Builtin: (ptr, index, val0, val1, ..., vl)
17431 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17432 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17433 IntrinsicTypes = {Ops[0]->getType(),
17434 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17435 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17435, __extension__ __PRETTY_FUNCTION__))
;
17436 }
17437 }
17438 break;
17439case RISCVVector::BI__builtin_rvv_vsoxseg8ei8_v:
17440case RISCVVector::BI__builtin_rvv_vsoxseg8ei16_v:
17441case RISCVVector::BI__builtin_rvv_vsoxseg8ei32_v:
17442case RISCVVector::BI__builtin_rvv_vsoxseg8ei64_v:
17443 ID = Intrinsic::riscv_vsoxseg8;
17444 NF = 8;
17445 PolicyAttrs = 3;
17446IsMasked = false;
17447
17448 {
17449 if (IsMasked) {
17450 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17451 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17452 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17453 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17454 IntrinsicTypes = {Ops[0]->getType(),
17455 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17456 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17456, __extension__ __PRETTY_FUNCTION__))
;
17457 } else {
17458 // Builtin: (ptr, index, val0, val1, ..., vl)
17459 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17460 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17461 IntrinsicTypes = {Ops[0]->getType(),
17462 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17463 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17463, __extension__ __PRETTY_FUNCTION__))
;
17464 }
17465 }
17466 break;
17467case RISCVVector::BI__builtin_rvv_vsoxseg8ei8_v_m:
17468case RISCVVector::BI__builtin_rvv_vsoxseg8ei16_v_m:
17469case RISCVVector::BI__builtin_rvv_vsoxseg8ei32_v_m:
17470case RISCVVector::BI__builtin_rvv_vsoxseg8ei64_v_m:
17471 ID = Intrinsic::riscv_vsoxseg8_mask;
17472 NF = 8;
17473 PolicyAttrs = 3;
17474IsMasked = true;
17475
17476 {
17477 if (IsMasked) {
17478 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17479 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17480 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17481 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17482 IntrinsicTypes = {Ops[0]->getType(),
17483 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17484 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17484, __extension__ __PRETTY_FUNCTION__))
;
17485 } else {
17486 // Builtin: (ptr, index, val0, val1, ..., vl)
17487 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17488 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17489 IntrinsicTypes = {Ops[0]->getType(),
17490 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17491 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17491, __extension__ __PRETTY_FUNCTION__))
;
17492 }
17493 }
17494 break;
17495case RISCVVector::BI__builtin_rvv_vsra_vv_tu:
17496case RISCVVector::BI__builtin_rvv_vsra_vx_tu:
17497 ID = Intrinsic::riscv_vsra;
17498 PolicyAttrs = 2;
17499 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17500 break;
17501case RISCVVector::BI__builtin_rvv_vsra_vv_ta:
17502case RISCVVector::BI__builtin_rvv_vsra_vx_ta:
17503 ID = Intrinsic::riscv_vsra;
17504 PolicyAttrs = 3;
17505 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17506 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17507 break;
17508case RISCVVector::BI__builtin_rvv_vsra_vv_tum:
17509case RISCVVector::BI__builtin_rvv_vsra_vx_tum:
17510 ID = Intrinsic::riscv_vsra_mask;
17511 PolicyAttrs = 2;
17512 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17513 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17514 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17515 break;
17516case RISCVVector::BI__builtin_rvv_vsra_vv_tama:
17517case RISCVVector::BI__builtin_rvv_vsra_vx_tama:
17518 ID = Intrinsic::riscv_vsra_mask;
17519 PolicyAttrs = 3;
17520 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17521 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17522 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17523 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17524 break;
17525case RISCVVector::BI__builtin_rvv_vsra_vv_tumu:
17526case RISCVVector::BI__builtin_rvv_vsra_vx_tumu:
17527 ID = Intrinsic::riscv_vsra_mask;
17528 PolicyAttrs = 0;
17529 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17530 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17531 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17532 break;
17533case RISCVVector::BI__builtin_rvv_vsra_vv_mu:
17534case RISCVVector::BI__builtin_rvv_vsra_vx_mu:
17535 ID = Intrinsic::riscv_vsra_mask;
17536 PolicyAttrs = 1;
17537 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17538 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17539 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17540 break;
17541case RISCVVector::BI__builtin_rvv_vsrl_vv_tu:
17542case RISCVVector::BI__builtin_rvv_vsrl_vx_tu:
17543 ID = Intrinsic::riscv_vsrl;
17544 PolicyAttrs = 2;
17545 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17546 break;
17547case RISCVVector::BI__builtin_rvv_vsrl_vv_ta:
17548case RISCVVector::BI__builtin_rvv_vsrl_vx_ta:
17549 ID = Intrinsic::riscv_vsrl;
17550 PolicyAttrs = 3;
17551 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17552 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17553 break;
17554case RISCVVector::BI__builtin_rvv_vsrl_vv_tum:
17555case RISCVVector::BI__builtin_rvv_vsrl_vx_tum:
17556 ID = Intrinsic::riscv_vsrl_mask;
17557 PolicyAttrs = 2;
17558 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17559 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17560 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17561 break;
17562case RISCVVector::BI__builtin_rvv_vsrl_vv_tama:
17563case RISCVVector::BI__builtin_rvv_vsrl_vx_tama:
17564 ID = Intrinsic::riscv_vsrl_mask;
17565 PolicyAttrs = 3;
17566 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17567 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17568 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17569 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17570 break;
17571case RISCVVector::BI__builtin_rvv_vsrl_vv_tumu:
17572case RISCVVector::BI__builtin_rvv_vsrl_vx_tumu:
17573 ID = Intrinsic::riscv_vsrl_mask;
17574 PolicyAttrs = 0;
17575 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17576 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17577 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17578 break;
17579case RISCVVector::BI__builtin_rvv_vsrl_vv_mu:
17580case RISCVVector::BI__builtin_rvv_vsrl_vx_mu:
17581 ID = Intrinsic::riscv_vsrl_mask;
17582 PolicyAttrs = 1;
17583 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17584 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17585 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17586 break;
17587case RISCVVector::BI__builtin_rvv_vsse16_v:
17588case RISCVVector::BI__builtin_rvv_vsse32_v:
17589case RISCVVector::BI__builtin_rvv_vsse64_v:
17590case RISCVVector::BI__builtin_rvv_vsse8_v:
17591 ID = Intrinsic::riscv_vsse;
17592 PolicyAttrs = 3;
17593IsMasked = false;
17594
17595 if (IsMasked) {
17596 // Builtin: (mask, ptr, stride, value, vl). Intrinsic: (value, ptr, stride, mask, vl)
17597 std::swap(Ops[0], Ops[3]);
17598 } else {
17599 // Builtin: (ptr, stride, value, vl). Intrinsic: (value, ptr, stride, vl)
17600 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17601 }
17602 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17603 if (IsMasked)
17604 IntrinsicTypes = {Ops[0]->getType(), Ops[4]->getType()};
17605 else
17606 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17607 break;
17608case RISCVVector::BI__builtin_rvv_vsse16_v_m:
17609case RISCVVector::BI__builtin_rvv_vsse32_v_m:
17610case RISCVVector::BI__builtin_rvv_vsse64_v_m:
17611case RISCVVector::BI__builtin_rvv_vsse8_v_m:
17612 ID = Intrinsic::riscv_vsse_mask;
17613 PolicyAttrs = 3;
17614IsMasked = true;
17615
17616 if (IsMasked) {
17617 // Builtin: (mask, ptr, stride, value, vl). Intrinsic: (value, ptr, stride, mask, vl)
17618 std::swap(Ops[0], Ops[3]);
17619 } else {
17620 // Builtin: (ptr, stride, value, vl). Intrinsic: (value, ptr, stride, vl)
17621 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17622 }
17623 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17624 if (IsMasked)
17625 IntrinsicTypes = {Ops[0]->getType(), Ops[4]->getType()};
17626 else
17627 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17628 break;
17629case RISCVVector::BI__builtin_rvv_vsseg2e16_v:
17630case RISCVVector::BI__builtin_rvv_vsseg2e32_v:
17631case RISCVVector::BI__builtin_rvv_vsseg2e64_v:
17632case RISCVVector::BI__builtin_rvv_vsseg2e8_v:
17633 ID = Intrinsic::riscv_vsseg2;
17634 NF = 2;
17635 PolicyAttrs = 3;
17636IsMasked = false;
17637
17638 {
17639 if (IsMasked) {
17640 // Builtin: (mask, ptr, val0, val1, ..., vl)
17641 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17642 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17643 std::swap(Ops[NF], Ops[NF + 1]);
17644 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17645 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17645, __extension__ __PRETTY_FUNCTION__))
;
17646 } else {
17647 // Builtin: (ptr, val0, val1, ..., vl)
17648 // Intrinsic: (val0, val1, ..., ptr, vl)
17649 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17650 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17651 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17651, __extension__ __PRETTY_FUNCTION__))
;
17652 }
17653 }
17654 break;
17655case RISCVVector::BI__builtin_rvv_vsseg2e16_v_m:
17656case RISCVVector::BI__builtin_rvv_vsseg2e32_v_m:
17657case RISCVVector::BI__builtin_rvv_vsseg2e64_v_m:
17658case RISCVVector::BI__builtin_rvv_vsseg2e8_v_m:
17659 ID = Intrinsic::riscv_vsseg2_mask;
17660 NF = 2;
17661 PolicyAttrs = 3;
17662IsMasked = true;
17663
17664 {
17665 if (IsMasked) {
17666 // Builtin: (mask, ptr, val0, val1, ..., vl)
17667 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17668 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17669 std::swap(Ops[NF], Ops[NF + 1]);
17670 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17671 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17671, __extension__ __PRETTY_FUNCTION__))
;
17672 } else {
17673 // Builtin: (ptr, val0, val1, ..., vl)
17674 // Intrinsic: (val0, val1, ..., ptr, vl)
17675 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17676 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17677 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17677, __extension__ __PRETTY_FUNCTION__))
;
17678 }
17679 }
17680 break;
17681case RISCVVector::BI__builtin_rvv_vsseg3e8_v:
17682case RISCVVector::BI__builtin_rvv_vsseg3e16_v:
17683case RISCVVector::BI__builtin_rvv_vsseg3e32_v:
17684case RISCVVector::BI__builtin_rvv_vsseg3e64_v:
17685 ID = Intrinsic::riscv_vsseg3;
17686 NF = 3;
17687 PolicyAttrs = 3;
17688IsMasked = false;
17689
17690 {
17691 if (IsMasked) {
17692 // Builtin: (mask, ptr, val0, val1, ..., vl)
17693 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17694 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17695 std::swap(Ops[NF], Ops[NF + 1]);
17696 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17697 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17697, __extension__ __PRETTY_FUNCTION__))
;
17698 } else {
17699 // Builtin: (ptr, val0, val1, ..., vl)
17700 // Intrinsic: (val0, val1, ..., ptr, vl)
17701 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17702 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17703 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17703, __extension__ __PRETTY_FUNCTION__))
;
17704 }
17705 }
17706 break;
17707case RISCVVector::BI__builtin_rvv_vsseg3e8_v_m:
17708case RISCVVector::BI__builtin_rvv_vsseg3e16_v_m:
17709case RISCVVector::BI__builtin_rvv_vsseg3e32_v_m:
17710case RISCVVector::BI__builtin_rvv_vsseg3e64_v_m:
17711 ID = Intrinsic::riscv_vsseg3_mask;
17712 NF = 3;
17713 PolicyAttrs = 3;
17714IsMasked = true;
17715
17716 {
17717 if (IsMasked) {
17718 // Builtin: (mask, ptr, val0, val1, ..., vl)
17719 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17720 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17721 std::swap(Ops[NF], Ops[NF + 1]);
17722 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17723 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17723, __extension__ __PRETTY_FUNCTION__))
;
17724 } else {
17725 // Builtin: (ptr, val0, val1, ..., vl)
17726 // Intrinsic: (val0, val1, ..., ptr, vl)
17727 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17728 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17729 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17729, __extension__ __PRETTY_FUNCTION__))
;
17730 }
17731 }
17732 break;
17733case RISCVVector::BI__builtin_rvv_vsseg4e8_v:
17734case RISCVVector::BI__builtin_rvv_vsseg4e16_v:
17735case RISCVVector::BI__builtin_rvv_vsseg4e32_v:
17736case RISCVVector::BI__builtin_rvv_vsseg4e64_v:
17737 ID = Intrinsic::riscv_vsseg4;
17738 NF = 4;
17739 PolicyAttrs = 3;
17740IsMasked = false;
17741
17742 {
17743 if (IsMasked) {
17744 // Builtin: (mask, ptr, val0, val1, ..., vl)
17745 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17746 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17747 std::swap(Ops[NF], Ops[NF + 1]);
17748 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17749 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17749, __extension__ __PRETTY_FUNCTION__))
;
17750 } else {
17751 // Builtin: (ptr, val0, val1, ..., vl)
17752 // Intrinsic: (val0, val1, ..., ptr, vl)
17753 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17754 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17755 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17755, __extension__ __PRETTY_FUNCTION__))
;
17756 }
17757 }
17758 break;
17759case RISCVVector::BI__builtin_rvv_vsseg4e8_v_m:
17760case RISCVVector::BI__builtin_rvv_vsseg4e16_v_m:
17761case RISCVVector::BI__builtin_rvv_vsseg4e32_v_m:
17762case RISCVVector::BI__builtin_rvv_vsseg4e64_v_m:
17763 ID = Intrinsic::riscv_vsseg4_mask;
17764 NF = 4;
17765 PolicyAttrs = 3;
17766IsMasked = true;
17767
17768 {
17769 if (IsMasked) {
17770 // Builtin: (mask, ptr, val0, val1, ..., vl)
17771 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17772 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17773 std::swap(Ops[NF], Ops[NF + 1]);
17774 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17775 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17775, __extension__ __PRETTY_FUNCTION__))
;
17776 } else {
17777 // Builtin: (ptr, val0, val1, ..., vl)
17778 // Intrinsic: (val0, val1, ..., ptr, vl)
17779 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17780 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17781 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17781, __extension__ __PRETTY_FUNCTION__))
;
17782 }
17783 }
17784 break;
17785case RISCVVector::BI__builtin_rvv_vsseg5e8_v:
17786case RISCVVector::BI__builtin_rvv_vsseg5e16_v:
17787case RISCVVector::BI__builtin_rvv_vsseg5e32_v:
17788case RISCVVector::BI__builtin_rvv_vsseg5e64_v:
17789 ID = Intrinsic::riscv_vsseg5;
17790 NF = 5;
17791 PolicyAttrs = 3;
17792IsMasked = false;
17793
17794 {
17795 if (IsMasked) {
17796 // Builtin: (mask, ptr, val0, val1, ..., vl)
17797 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17798 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17799 std::swap(Ops[NF], Ops[NF + 1]);
17800 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17801 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17801, __extension__ __PRETTY_FUNCTION__))
;
17802 } else {
17803 // Builtin: (ptr, val0, val1, ..., vl)
17804 // Intrinsic: (val0, val1, ..., ptr, vl)
17805 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17806 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17807 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17807, __extension__ __PRETTY_FUNCTION__))
;
17808 }
17809 }
17810 break;
17811case RISCVVector::BI__builtin_rvv_vsseg5e8_v_m:
17812case RISCVVector::BI__builtin_rvv_vsseg5e16_v_m:
17813case RISCVVector::BI__builtin_rvv_vsseg5e32_v_m:
17814case RISCVVector::BI__builtin_rvv_vsseg5e64_v_m:
17815 ID = Intrinsic::riscv_vsseg5_mask;
17816 NF = 5;
17817 PolicyAttrs = 3;
17818IsMasked = true;
17819
17820 {
17821 if (IsMasked) {
17822 // Builtin: (mask, ptr, val0, val1, ..., vl)
17823 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17824 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17825 std::swap(Ops[NF], Ops[NF + 1]);
17826 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17827 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17827, __extension__ __PRETTY_FUNCTION__))
;
17828 } else {
17829 // Builtin: (ptr, val0, val1, ..., vl)
17830 // Intrinsic: (val0, val1, ..., ptr, vl)
17831 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17832 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17833 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17833, __extension__ __PRETTY_FUNCTION__))
;
17834 }
17835 }
17836 break;
17837case RISCVVector::BI__builtin_rvv_vsseg6e8_v:
17838case RISCVVector::BI__builtin_rvv_vsseg6e16_v:
17839case RISCVVector::BI__builtin_rvv_vsseg6e32_v:
17840case RISCVVector::BI__builtin_rvv_vsseg6e64_v:
17841 ID = Intrinsic::riscv_vsseg6;
17842 NF = 6;
17843 PolicyAttrs = 3;
17844IsMasked = false;
17845
17846 {
17847 if (IsMasked) {
17848 // Builtin: (mask, ptr, val0, val1, ..., vl)
17849 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17850 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17851 std::swap(Ops[NF], Ops[NF + 1]);
17852 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17853 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17853, __extension__ __PRETTY_FUNCTION__))
;
17854 } else {
17855 // Builtin: (ptr, val0, val1, ..., vl)
17856 // Intrinsic: (val0, val1, ..., ptr, vl)
17857 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17858 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17859 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17859, __extension__ __PRETTY_FUNCTION__))
;
17860 }
17861 }
17862 break;
17863case RISCVVector::BI__builtin_rvv_vsseg6e8_v_m:
17864case RISCVVector::BI__builtin_rvv_vsseg6e16_v_m:
17865case RISCVVector::BI__builtin_rvv_vsseg6e32_v_m:
17866case RISCVVector::BI__builtin_rvv_vsseg6e64_v_m:
17867 ID = Intrinsic::riscv_vsseg6_mask;
17868 NF = 6;
17869 PolicyAttrs = 3;
17870IsMasked = true;
17871
17872 {
17873 if (IsMasked) {
17874 // Builtin: (mask, ptr, val0, val1, ..., vl)
17875 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17876 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17877 std::swap(Ops[NF], Ops[NF + 1]);
17878 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17879 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17879, __extension__ __PRETTY_FUNCTION__))
;
17880 } else {
17881 // Builtin: (ptr, val0, val1, ..., vl)
17882 // Intrinsic: (val0, val1, ..., ptr, vl)
17883 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17884 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17885 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17885, __extension__ __PRETTY_FUNCTION__))
;
17886 }
17887 }
17888 break;
17889case RISCVVector::BI__builtin_rvv_vsseg7e8_v:
17890case RISCVVector::BI__builtin_rvv_vsseg7e16_v:
17891case RISCVVector::BI__builtin_rvv_vsseg7e32_v:
17892case RISCVVector::BI__builtin_rvv_vsseg7e64_v:
17893 ID = Intrinsic::riscv_vsseg7;
17894 NF = 7;
17895 PolicyAttrs = 3;
17896IsMasked = false;
17897
17898 {
17899 if (IsMasked) {
17900 // Builtin: (mask, ptr, val0, val1, ..., vl)
17901 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17902 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17903 std::swap(Ops[NF], Ops[NF + 1]);
17904 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17905 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17905, __extension__ __PRETTY_FUNCTION__))
;
17906 } else {
17907 // Builtin: (ptr, val0, val1, ..., vl)
17908 // Intrinsic: (val0, val1, ..., ptr, vl)
17909 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17910 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17911 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17911, __extension__ __PRETTY_FUNCTION__))
;
17912 }
17913 }
17914 break;
17915case RISCVVector::BI__builtin_rvv_vsseg7e8_v_m:
17916case RISCVVector::BI__builtin_rvv_vsseg7e16_v_m:
17917case RISCVVector::BI__builtin_rvv_vsseg7e32_v_m:
17918case RISCVVector::BI__builtin_rvv_vsseg7e64_v_m:
17919 ID = Intrinsic::riscv_vsseg7_mask;
17920 NF = 7;
17921 PolicyAttrs = 3;
17922IsMasked = true;
17923
17924 {
17925 if (IsMasked) {
17926 // Builtin: (mask, ptr, val0, val1, ..., vl)
17927 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17928 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17929 std::swap(Ops[NF], Ops[NF + 1]);
17930 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17931 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17931, __extension__ __PRETTY_FUNCTION__))
;
17932 } else {
17933 // Builtin: (ptr, val0, val1, ..., vl)
17934 // Intrinsic: (val0, val1, ..., ptr, vl)
17935 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17936 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17937 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17937, __extension__ __PRETTY_FUNCTION__))
;
17938 }
17939 }
17940 break;
17941case RISCVVector::BI__builtin_rvv_vsseg8e8_v:
17942case RISCVVector::BI__builtin_rvv_vsseg8e16_v:
17943case RISCVVector::BI__builtin_rvv_vsseg8e32_v:
17944case RISCVVector::BI__builtin_rvv_vsseg8e64_v:
17945 ID = Intrinsic::riscv_vsseg8;
17946 NF = 8;
17947 PolicyAttrs = 3;
17948IsMasked = false;
17949
17950 {
17951 if (IsMasked) {
17952 // Builtin: (mask, ptr, val0, val1, ..., vl)
17953 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17954 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17955 std::swap(Ops[NF], Ops[NF + 1]);
17956 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17957 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17957, __extension__ __PRETTY_FUNCTION__))
;
17958 } else {
17959 // Builtin: (ptr, val0, val1, ..., vl)
17960 // Intrinsic: (val0, val1, ..., ptr, vl)
17961 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17962 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17963 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17963, __extension__ __PRETTY_FUNCTION__))
;
17964 }
17965 }
17966 break;
17967case RISCVVector::BI__builtin_rvv_vsseg8e8_v_m:
17968case RISCVVector::BI__builtin_rvv_vsseg8e16_v_m:
17969case RISCVVector::BI__builtin_rvv_vsseg8e32_v_m:
17970case RISCVVector::BI__builtin_rvv_vsseg8e64_v_m:
17971 ID = Intrinsic::riscv_vsseg8_mask;
17972 NF = 8;
17973 PolicyAttrs = 3;
17974IsMasked = true;
17975
17976 {
17977 if (IsMasked) {
17978 // Builtin: (mask, ptr, val0, val1, ..., vl)
17979 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17980 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17981 std::swap(Ops[NF], Ops[NF + 1]);
17982 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17983 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17983, __extension__ __PRETTY_FUNCTION__))
;
17984 } else {
17985 // Builtin: (ptr, val0, val1, ..., vl)
17986 // Intrinsic: (val0, val1, ..., ptr, vl)
17987 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17988 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17989 assert(Ops.size() == NF + 2)(static_cast <bool> (Ops.size() == NF + 2) ? void (0) :
__assert_fail ("Ops.size() == NF + 2", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 17989, __extension__ __PRETTY_FUNCTION__))
;
17990 }
17991 }
17992 break;
17993case RISCVVector::BI__builtin_rvv_vssra_vv_tu:
17994case RISCVVector::BI__builtin_rvv_vssra_vx_tu:
17995 ID = Intrinsic::riscv_vssra;
17996 PolicyAttrs = 2;
17997 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17998 break;
17999case RISCVVector::BI__builtin_rvv_vssra_vv_ta:
18000case RISCVVector::BI__builtin_rvv_vssra_vx_ta:
18001 ID = Intrinsic::riscv_vssra;
18002 PolicyAttrs = 3;
18003 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18004 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18005 break;
18006case RISCVVector::BI__builtin_rvv_vssra_vv_tum:
18007case RISCVVector::BI__builtin_rvv_vssra_vx_tum:
18008 ID = Intrinsic::riscv_vssra_mask;
18009 PolicyAttrs = 2;
18010 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18011 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18012 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18013 break;
18014case RISCVVector::BI__builtin_rvv_vssra_vv_tama:
18015case RISCVVector::BI__builtin_rvv_vssra_vx_tama:
18016 ID = Intrinsic::riscv_vssra_mask;
18017 PolicyAttrs = 3;
18018 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18019 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18020 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18021 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18022 break;
18023case RISCVVector::BI__builtin_rvv_vssra_vv_tumu:
18024case RISCVVector::BI__builtin_rvv_vssra_vx_tumu:
18025 ID = Intrinsic::riscv_vssra_mask;
18026 PolicyAttrs = 0;
18027 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18028 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18029 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18030 break;
18031case RISCVVector::BI__builtin_rvv_vssra_vv_mu:
18032case RISCVVector::BI__builtin_rvv_vssra_vx_mu:
18033 ID = Intrinsic::riscv_vssra_mask;
18034 PolicyAttrs = 1;
18035 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18036 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18037 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18038 break;
18039case RISCVVector::BI__builtin_rvv_vssrl_vv_tu:
18040case RISCVVector::BI__builtin_rvv_vssrl_vx_tu:
18041 ID = Intrinsic::riscv_vssrl;
18042 PolicyAttrs = 2;
18043 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18044 break;
18045case RISCVVector::BI__builtin_rvv_vssrl_vv_ta:
18046case RISCVVector::BI__builtin_rvv_vssrl_vx_ta:
18047 ID = Intrinsic::riscv_vssrl;
18048 PolicyAttrs = 3;
18049 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18050 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18051 break;
18052case RISCVVector::BI__builtin_rvv_vssrl_vv_tum:
18053case RISCVVector::BI__builtin_rvv_vssrl_vx_tum:
18054 ID = Intrinsic::riscv_vssrl_mask;
18055 PolicyAttrs = 2;
18056 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18057 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18058 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18059 break;
18060case RISCVVector::BI__builtin_rvv_vssrl_vv_tama:
18061case RISCVVector::BI__builtin_rvv_vssrl_vx_tama:
18062 ID = Intrinsic::riscv_vssrl_mask;
18063 PolicyAttrs = 3;
18064 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18065 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18066 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18067 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18068 break;
18069case RISCVVector::BI__builtin_rvv_vssrl_vv_tumu:
18070case RISCVVector::BI__builtin_rvv_vssrl_vx_tumu:
18071 ID = Intrinsic::riscv_vssrl_mask;
18072 PolicyAttrs = 0;
18073 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18074 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18075 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18076 break;
18077case RISCVVector::BI__builtin_rvv_vssrl_vv_mu:
18078case RISCVVector::BI__builtin_rvv_vssrl_vx_mu:
18079 ID = Intrinsic::riscv_vssrl_mask;
18080 PolicyAttrs = 1;
18081 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18082 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18083 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18084 break;
18085case RISCVVector::BI__builtin_rvv_vssseg2e16_v:
18086case RISCVVector::BI__builtin_rvv_vssseg2e32_v:
18087case RISCVVector::BI__builtin_rvv_vssseg2e64_v:
18088case RISCVVector::BI__builtin_rvv_vssseg2e8_v:
18089 ID = Intrinsic::riscv_vssseg2;
18090 NF = 2;
18091 PolicyAttrs = 3;
18092IsMasked = false;
18093
18094 {
18095 if (IsMasked) {
18096 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18097 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18098 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18099 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18100 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18100, __extension__ __PRETTY_FUNCTION__))
;
18101 } else {
18102 // Builtin: (ptr, stride, val0, val1, ..., vl).
18103 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18104 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18105 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18105, __extension__ __PRETTY_FUNCTION__))
;
18106 }
18107 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18108 }
18109 break;
18110case RISCVVector::BI__builtin_rvv_vssseg2e16_v_m:
18111case RISCVVector::BI__builtin_rvv_vssseg2e32_v_m:
18112case RISCVVector::BI__builtin_rvv_vssseg2e64_v_m:
18113case RISCVVector::BI__builtin_rvv_vssseg2e8_v_m:
18114 ID = Intrinsic::riscv_vssseg2_mask;
18115 NF = 2;
18116 PolicyAttrs = 3;
18117IsMasked = true;
18118
18119 {
18120 if (IsMasked) {
18121 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18122 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18123 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18124 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18125 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18125, __extension__ __PRETTY_FUNCTION__))
;
18126 } else {
18127 // Builtin: (ptr, stride, val0, val1, ..., vl).
18128 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18129 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18130 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18130, __extension__ __PRETTY_FUNCTION__))
;
18131 }
18132 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18133 }
18134 break;
18135case RISCVVector::BI__builtin_rvv_vssseg3e8_v:
18136case RISCVVector::BI__builtin_rvv_vssseg3e16_v:
18137case RISCVVector::BI__builtin_rvv_vssseg3e32_v:
18138case RISCVVector::BI__builtin_rvv_vssseg3e64_v:
18139 ID = Intrinsic::riscv_vssseg3;
18140 NF = 3;
18141 PolicyAttrs = 3;
18142IsMasked = false;
18143
18144 {
18145 if (IsMasked) {
18146 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18147 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18148 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18149 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18150 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18150, __extension__ __PRETTY_FUNCTION__))
;
18151 } else {
18152 // Builtin: (ptr, stride, val0, val1, ..., vl).
18153 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18154 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18155 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18155, __extension__ __PRETTY_FUNCTION__))
;
18156 }
18157 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18158 }
18159 break;
18160case RISCVVector::BI__builtin_rvv_vssseg3e8_v_m:
18161case RISCVVector::BI__builtin_rvv_vssseg3e16_v_m:
18162case RISCVVector::BI__builtin_rvv_vssseg3e32_v_m:
18163case RISCVVector::BI__builtin_rvv_vssseg3e64_v_m:
18164 ID = Intrinsic::riscv_vssseg3_mask;
18165 NF = 3;
18166 PolicyAttrs = 3;
18167IsMasked = true;
18168
18169 {
18170 if (IsMasked) {
18171 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18172 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18173 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18174 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18175 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18175, __extension__ __PRETTY_FUNCTION__))
;
18176 } else {
18177 // Builtin: (ptr, stride, val0, val1, ..., vl).
18178 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18179 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18180 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18180, __extension__ __PRETTY_FUNCTION__))
;
18181 }
18182 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18183 }
18184 break;
18185case RISCVVector::BI__builtin_rvv_vssseg4e8_v:
18186case RISCVVector::BI__builtin_rvv_vssseg4e16_v:
18187case RISCVVector::BI__builtin_rvv_vssseg4e32_v:
18188case RISCVVector::BI__builtin_rvv_vssseg4e64_v:
18189 ID = Intrinsic::riscv_vssseg4;
18190 NF = 4;
18191 PolicyAttrs = 3;
18192IsMasked = false;
18193
18194 {
18195 if (IsMasked) {
18196 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18197 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18198 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18199 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18200 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18200, __extension__ __PRETTY_FUNCTION__))
;
18201 } else {
18202 // Builtin: (ptr, stride, val0, val1, ..., vl).
18203 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18204 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18205 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18205, __extension__ __PRETTY_FUNCTION__))
;
18206 }
18207 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18208 }
18209 break;
18210case RISCVVector::BI__builtin_rvv_vssseg4e8_v_m:
18211case RISCVVector::BI__builtin_rvv_vssseg4e16_v_m:
18212case RISCVVector::BI__builtin_rvv_vssseg4e32_v_m:
18213case RISCVVector::BI__builtin_rvv_vssseg4e64_v_m:
18214 ID = Intrinsic::riscv_vssseg4_mask;
18215 NF = 4;
18216 PolicyAttrs = 3;
18217IsMasked = true;
18218
18219 {
18220 if (IsMasked) {
18221 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18222 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18223 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18224 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18225 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18225, __extension__ __PRETTY_FUNCTION__))
;
18226 } else {
18227 // Builtin: (ptr, stride, val0, val1, ..., vl).
18228 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18229 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18230 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18230, __extension__ __PRETTY_FUNCTION__))
;
18231 }
18232 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18233 }
18234 break;
18235case RISCVVector::BI__builtin_rvv_vssseg5e8_v:
18236case RISCVVector::BI__builtin_rvv_vssseg5e16_v:
18237case RISCVVector::BI__builtin_rvv_vssseg5e32_v:
18238case RISCVVector::BI__builtin_rvv_vssseg5e64_v:
18239 ID = Intrinsic::riscv_vssseg5;
18240 NF = 5;
18241 PolicyAttrs = 3;
18242IsMasked = false;
18243
18244 {
18245 if (IsMasked) {
18246 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18247 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18248 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18249 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18250 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18250, __extension__ __PRETTY_FUNCTION__))
;
18251 } else {
18252 // Builtin: (ptr, stride, val0, val1, ..., vl).
18253 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18254 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18255 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18255, __extension__ __PRETTY_FUNCTION__))
;
18256 }
18257 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18258 }
18259 break;
18260case RISCVVector::BI__builtin_rvv_vssseg5e8_v_m:
18261case RISCVVector::BI__builtin_rvv_vssseg5e16_v_m:
18262case RISCVVector::BI__builtin_rvv_vssseg5e32_v_m:
18263case RISCVVector::BI__builtin_rvv_vssseg5e64_v_m:
18264 ID = Intrinsic::riscv_vssseg5_mask;
18265 NF = 5;
18266 PolicyAttrs = 3;
18267IsMasked = true;
18268
18269 {
18270 if (IsMasked) {
18271 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18272 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18273 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18274 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18275 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18275, __extension__ __PRETTY_FUNCTION__))
;
18276 } else {
18277 // Builtin: (ptr, stride, val0, val1, ..., vl).
18278 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18279 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18280 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18280, __extension__ __PRETTY_FUNCTION__))
;
18281 }
18282 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18283 }
18284 break;
18285case RISCVVector::BI__builtin_rvv_vssseg6e8_v:
18286case RISCVVector::BI__builtin_rvv_vssseg6e16_v:
18287case RISCVVector::BI__builtin_rvv_vssseg6e32_v:
18288case RISCVVector::BI__builtin_rvv_vssseg6e64_v:
18289 ID = Intrinsic::riscv_vssseg6;
18290 NF = 6;
18291 PolicyAttrs = 3;
18292IsMasked = false;
18293
18294 {
18295 if (IsMasked) {
18296 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18297 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18298 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18299 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18300 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18300, __extension__ __PRETTY_FUNCTION__))
;
18301 } else {
18302 // Builtin: (ptr, stride, val0, val1, ..., vl).
18303 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18304 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18305 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18305, __extension__ __PRETTY_FUNCTION__))
;
18306 }
18307 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18308 }
18309 break;
18310case RISCVVector::BI__builtin_rvv_vssseg6e8_v_m:
18311case RISCVVector::BI__builtin_rvv_vssseg6e16_v_m:
18312case RISCVVector::BI__builtin_rvv_vssseg6e32_v_m:
18313case RISCVVector::BI__builtin_rvv_vssseg6e64_v_m:
18314 ID = Intrinsic::riscv_vssseg6_mask;
18315 NF = 6;
18316 PolicyAttrs = 3;
18317IsMasked = true;
18318
18319 {
18320 if (IsMasked) {
18321 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18322 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18323 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18324 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18325 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18325, __extension__ __PRETTY_FUNCTION__))
;
18326 } else {
18327 // Builtin: (ptr, stride, val0, val1, ..., vl).
18328 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18329 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18330 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18330, __extension__ __PRETTY_FUNCTION__))
;
18331 }
18332 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18333 }
18334 break;
18335case RISCVVector::BI__builtin_rvv_vssseg7e8_v:
18336case RISCVVector::BI__builtin_rvv_vssseg7e16_v:
18337case RISCVVector::BI__builtin_rvv_vssseg7e32_v:
18338case RISCVVector::BI__builtin_rvv_vssseg7e64_v:
18339 ID = Intrinsic::riscv_vssseg7;
18340 NF = 7;
18341 PolicyAttrs = 3;
18342IsMasked = false;
18343
18344 {
18345 if (IsMasked) {
18346 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18347 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18348 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18349 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18350 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18350, __extension__ __PRETTY_FUNCTION__))
;
18351 } else {
18352 // Builtin: (ptr, stride, val0, val1, ..., vl).
18353 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18354 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18355 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18355, __extension__ __PRETTY_FUNCTION__))
;
18356 }
18357 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18358 }
18359 break;
18360case RISCVVector::BI__builtin_rvv_vssseg7e8_v_m:
18361case RISCVVector::BI__builtin_rvv_vssseg7e16_v_m:
18362case RISCVVector::BI__builtin_rvv_vssseg7e32_v_m:
18363case RISCVVector::BI__builtin_rvv_vssseg7e64_v_m:
18364 ID = Intrinsic::riscv_vssseg7_mask;
18365 NF = 7;
18366 PolicyAttrs = 3;
18367IsMasked = true;
18368
18369 {
18370 if (IsMasked) {
18371 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18372 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18373 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18374 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18375 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18375, __extension__ __PRETTY_FUNCTION__))
;
18376 } else {
18377 // Builtin: (ptr, stride, val0, val1, ..., vl).
18378 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18379 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18380 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18380, __extension__ __PRETTY_FUNCTION__))
;
18381 }
18382 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18383 }
18384 break;
18385case RISCVVector::BI__builtin_rvv_vssseg8e8_v:
18386case RISCVVector::BI__builtin_rvv_vssseg8e16_v:
18387case RISCVVector::BI__builtin_rvv_vssseg8e32_v:
18388case RISCVVector::BI__builtin_rvv_vssseg8e64_v:
18389 ID = Intrinsic::riscv_vssseg8;
18390 NF = 8;
18391 PolicyAttrs = 3;
18392IsMasked = false;
18393
18394 {
18395 if (IsMasked) {
18396 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18397 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18398 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18399 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18400 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18400, __extension__ __PRETTY_FUNCTION__))
;
18401 } else {
18402 // Builtin: (ptr, stride, val0, val1, ..., vl).
18403 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18404 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18405 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18405, __extension__ __PRETTY_FUNCTION__))
;
18406 }
18407 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18408 }
18409 break;
18410case RISCVVector::BI__builtin_rvv_vssseg8e8_v_m:
18411case RISCVVector::BI__builtin_rvv_vssseg8e16_v_m:
18412case RISCVVector::BI__builtin_rvv_vssseg8e32_v_m:
18413case RISCVVector::BI__builtin_rvv_vssseg8e64_v_m:
18414 ID = Intrinsic::riscv_vssseg8_mask;
18415 NF = 8;
18416 PolicyAttrs = 3;
18417IsMasked = true;
18418
18419 {
18420 if (IsMasked) {
18421 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18422 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18423 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18424 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18425 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18425, __extension__ __PRETTY_FUNCTION__))
;
18426 } else {
18427 // Builtin: (ptr, stride, val0, val1, ..., vl).
18428 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18429 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18430 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18430, __extension__ __PRETTY_FUNCTION__))
;
18431 }
18432 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18433 }
18434 break;
18435case RISCVVector::BI__builtin_rvv_vssub_vv_tu:
18436case RISCVVector::BI__builtin_rvv_vssub_vx_tu:
18437 ID = Intrinsic::riscv_vssub;
18438 PolicyAttrs = 2;
18439 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18440 break;
18441case RISCVVector::BI__builtin_rvv_vssub_vv_ta:
18442case RISCVVector::BI__builtin_rvv_vssub_vx_ta:
18443 ID = Intrinsic::riscv_vssub;
18444 PolicyAttrs = 3;
18445 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18446 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18447 break;
18448case RISCVVector::BI__builtin_rvv_vssub_vv_tum:
18449case RISCVVector::BI__builtin_rvv_vssub_vx_tum:
18450 ID = Intrinsic::riscv_vssub_mask;
18451 PolicyAttrs = 2;
18452 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18454 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18455 break;
18456case RISCVVector::BI__builtin_rvv_vssub_vv_tama:
18457case RISCVVector::BI__builtin_rvv_vssub_vx_tama:
18458 ID = Intrinsic::riscv_vssub_mask;
18459 PolicyAttrs = 3;
18460 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18461 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18462 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18463 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18464 break;
18465case RISCVVector::BI__builtin_rvv_vssub_vv_tumu:
18466case RISCVVector::BI__builtin_rvv_vssub_vx_tumu:
18467 ID = Intrinsic::riscv_vssub_mask;
18468 PolicyAttrs = 0;
18469 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18470 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18471 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18472 break;
18473case RISCVVector::BI__builtin_rvv_vssub_vv_mu:
18474case RISCVVector::BI__builtin_rvv_vssub_vx_mu:
18475 ID = Intrinsic::riscv_vssub_mask;
18476 PolicyAttrs = 1;
18477 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18478 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18479 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18480 break;
18481case RISCVVector::BI__builtin_rvv_vssubu_vv_tu:
18482case RISCVVector::BI__builtin_rvv_vssubu_vx_tu:
18483 ID = Intrinsic::riscv_vssubu;
18484 PolicyAttrs = 2;
18485 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18486 break;
18487case RISCVVector::BI__builtin_rvv_vssubu_vv_ta:
18488case RISCVVector::BI__builtin_rvv_vssubu_vx_ta:
18489 ID = Intrinsic::riscv_vssubu;
18490 PolicyAttrs = 3;
18491 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18492 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18493 break;
18494case RISCVVector::BI__builtin_rvv_vssubu_vv_tum:
18495case RISCVVector::BI__builtin_rvv_vssubu_vx_tum:
18496 ID = Intrinsic::riscv_vssubu_mask;
18497 PolicyAttrs = 2;
18498 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18499 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18500 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18501 break;
18502case RISCVVector::BI__builtin_rvv_vssubu_vv_tama:
18503case RISCVVector::BI__builtin_rvv_vssubu_vx_tama:
18504 ID = Intrinsic::riscv_vssubu_mask;
18505 PolicyAttrs = 3;
18506 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18507 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18508 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18509 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18510 break;
18511case RISCVVector::BI__builtin_rvv_vssubu_vv_tumu:
18512case RISCVVector::BI__builtin_rvv_vssubu_vx_tumu:
18513 ID = Intrinsic::riscv_vssubu_mask;
18514 PolicyAttrs = 0;
18515 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18516 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18517 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18518 break;
18519case RISCVVector::BI__builtin_rvv_vssubu_vv_mu:
18520case RISCVVector::BI__builtin_rvv_vssubu_vx_mu:
18521 ID = Intrinsic::riscv_vssubu_mask;
18522 PolicyAttrs = 1;
18523 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18524 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18525 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18526 break;
18527case RISCVVector::BI__builtin_rvv_vsub_vv_tu:
18528case RISCVVector::BI__builtin_rvv_vsub_vx_tu:
18529 ID = Intrinsic::riscv_vsub;
18530 PolicyAttrs = 2;
18531 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18532 break;
18533case RISCVVector::BI__builtin_rvv_vsub_vv_ta:
18534case RISCVVector::BI__builtin_rvv_vsub_vx_ta:
18535 ID = Intrinsic::riscv_vsub;
18536 PolicyAttrs = 3;
18537 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18538 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18539 break;
18540case RISCVVector::BI__builtin_rvv_vsub_vv_tum:
18541case RISCVVector::BI__builtin_rvv_vsub_vx_tum:
18542 ID = Intrinsic::riscv_vsub_mask;
18543 PolicyAttrs = 2;
18544 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18545 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18546 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18547 break;
18548case RISCVVector::BI__builtin_rvv_vsub_vv_tama:
18549case RISCVVector::BI__builtin_rvv_vsub_vx_tama:
18550 ID = Intrinsic::riscv_vsub_mask;
18551 PolicyAttrs = 3;
18552 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18553 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18554 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18555 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18556 break;
18557case RISCVVector::BI__builtin_rvv_vsub_vv_tumu:
18558case RISCVVector::BI__builtin_rvv_vsub_vx_tumu:
18559 ID = Intrinsic::riscv_vsub_mask;
18560 PolicyAttrs = 0;
18561 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18562 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18563 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18564 break;
18565case RISCVVector::BI__builtin_rvv_vsub_vv_mu:
18566case RISCVVector::BI__builtin_rvv_vsub_vx_mu:
18567 ID = Intrinsic::riscv_vsub_mask;
18568 PolicyAttrs = 1;
18569 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18570 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18571 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18572 break;
18573case RISCVVector::BI__builtin_rvv_vsuxei16_v:
18574case RISCVVector::BI__builtin_rvv_vsuxei32_v:
18575case RISCVVector::BI__builtin_rvv_vsuxei8_v:
18576case RISCVVector::BI__builtin_rvv_vsuxei64_v:
18577 ID = Intrinsic::riscv_vsuxei;
18578 PolicyAttrs = 3;
18579IsMasked = false;
18580
18581 if (IsMasked) {
18582 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
18583 std::swap(Ops[0], Ops[3]);
18584 } else {
18585 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
18586 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
18587 }
18588 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
18589 if (IsMasked)
18590 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
18591 else
18592 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
18593 break;
18594case RISCVVector::BI__builtin_rvv_vsuxei16_v_m:
18595case RISCVVector::BI__builtin_rvv_vsuxei32_v_m:
18596case RISCVVector::BI__builtin_rvv_vsuxei8_v_m:
18597case RISCVVector::BI__builtin_rvv_vsuxei64_v_m:
18598 ID = Intrinsic::riscv_vsuxei_mask;
18599 PolicyAttrs = 3;
18600IsMasked = true;
18601
18602 if (IsMasked) {
18603 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
18604 std::swap(Ops[0], Ops[3]);
18605 } else {
18606 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
18607 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
18608 }
18609 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
18610 if (IsMasked)
18611 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
18612 else
18613 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
18614 break;
18615case RISCVVector::BI__builtin_rvv_vsuxseg2ei16_v:
18616case RISCVVector::BI__builtin_rvv_vsuxseg2ei32_v:
18617case RISCVVector::BI__builtin_rvv_vsuxseg2ei64_v:
18618case RISCVVector::BI__builtin_rvv_vsuxseg2ei8_v:
18619 ID = Intrinsic::riscv_vsuxseg2;
18620 NF = 2;
18621 PolicyAttrs = 3;
18622IsMasked = false;
18623
18624 {
18625 if (IsMasked) {
18626 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18627 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18628 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18629 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18630 IntrinsicTypes = {Ops[0]->getType(),
18631 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18632 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18632, __extension__ __PRETTY_FUNCTION__))
;
18633 } else {
18634 // Builtin: (ptr, index, val0, val1, ..., vl)
18635 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18636 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18637 IntrinsicTypes = {Ops[0]->getType(),
18638 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18639 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18639, __extension__ __PRETTY_FUNCTION__))
;
18640 }
18641 }
18642 break;
18643case RISCVVector::BI__builtin_rvv_vsuxseg2ei16_v_m:
18644case RISCVVector::BI__builtin_rvv_vsuxseg2ei32_v_m:
18645case RISCVVector::BI__builtin_rvv_vsuxseg2ei64_v_m:
18646case RISCVVector::BI__builtin_rvv_vsuxseg2ei8_v_m:
18647 ID = Intrinsic::riscv_vsuxseg2_mask;
18648 NF = 2;
18649 PolicyAttrs = 3;
18650IsMasked = true;
18651
18652 {
18653 if (IsMasked) {
18654 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18655 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18656 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18657 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18658 IntrinsicTypes = {Ops[0]->getType(),
18659 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18660 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18660, __extension__ __PRETTY_FUNCTION__))
;
18661 } else {
18662 // Builtin: (ptr, index, val0, val1, ..., vl)
18663 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18664 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18665 IntrinsicTypes = {Ops[0]->getType(),
18666 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18667 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18667, __extension__ __PRETTY_FUNCTION__))
;
18668 }
18669 }
18670 break;
18671case RISCVVector::BI__builtin_rvv_vsuxseg3ei8_v:
18672case RISCVVector::BI__builtin_rvv_vsuxseg3ei16_v:
18673case RISCVVector::BI__builtin_rvv_vsuxseg3ei32_v:
18674case RISCVVector::BI__builtin_rvv_vsuxseg3ei64_v:
18675 ID = Intrinsic::riscv_vsuxseg3;
18676 NF = 3;
18677 PolicyAttrs = 3;
18678IsMasked = false;
18679
18680 {
18681 if (IsMasked) {
18682 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18683 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18684 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18685 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18686 IntrinsicTypes = {Ops[0]->getType(),
18687 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18688 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18688, __extension__ __PRETTY_FUNCTION__))
;
18689 } else {
18690 // Builtin: (ptr, index, val0, val1, ..., vl)
18691 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18692 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18693 IntrinsicTypes = {Ops[0]->getType(),
18694 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18695 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18695, __extension__ __PRETTY_FUNCTION__))
;
18696 }
18697 }
18698 break;
18699case RISCVVector::BI__builtin_rvv_vsuxseg3ei8_v_m:
18700case RISCVVector::BI__builtin_rvv_vsuxseg3ei16_v_m:
18701case RISCVVector::BI__builtin_rvv_vsuxseg3ei32_v_m:
18702case RISCVVector::BI__builtin_rvv_vsuxseg3ei64_v_m:
18703 ID = Intrinsic::riscv_vsuxseg3_mask;
18704 NF = 3;
18705 PolicyAttrs = 3;
18706IsMasked = true;
18707
18708 {
18709 if (IsMasked) {
18710 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18711 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18712 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18713 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18714 IntrinsicTypes = {Ops[0]->getType(),
18715 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18716 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18716, __extension__ __PRETTY_FUNCTION__))
;
18717 } else {
18718 // Builtin: (ptr, index, val0, val1, ..., vl)
18719 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18720 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18721 IntrinsicTypes = {Ops[0]->getType(),
18722 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18723 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18723, __extension__ __PRETTY_FUNCTION__))
;
18724 }
18725 }
18726 break;
18727case RISCVVector::BI__builtin_rvv_vsuxseg4ei8_v:
18728case RISCVVector::BI__builtin_rvv_vsuxseg4ei16_v:
18729case RISCVVector::BI__builtin_rvv_vsuxseg4ei32_v:
18730case RISCVVector::BI__builtin_rvv_vsuxseg4ei64_v:
18731 ID = Intrinsic::riscv_vsuxseg4;
18732 NF = 4;
18733 PolicyAttrs = 3;
18734IsMasked = false;
18735
18736 {
18737 if (IsMasked) {
18738 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18739 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18740 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18741 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18742 IntrinsicTypes = {Ops[0]->getType(),
18743 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18744 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18744, __extension__ __PRETTY_FUNCTION__))
;
18745 } else {
18746 // Builtin: (ptr, index, val0, val1, ..., vl)
18747 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18748 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18749 IntrinsicTypes = {Ops[0]->getType(),
18750 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18751 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18751, __extension__ __PRETTY_FUNCTION__))
;
18752 }
18753 }
18754 break;
18755case RISCVVector::BI__builtin_rvv_vsuxseg4ei8_v_m:
18756case RISCVVector::BI__builtin_rvv_vsuxseg4ei16_v_m:
18757case RISCVVector::BI__builtin_rvv_vsuxseg4ei32_v_m:
18758case RISCVVector::BI__builtin_rvv_vsuxseg4ei64_v_m:
18759 ID = Intrinsic::riscv_vsuxseg4_mask;
18760 NF = 4;
18761 PolicyAttrs = 3;
18762IsMasked = true;
18763
18764 {
18765 if (IsMasked) {
18766 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18767 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18768 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18769 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18770 IntrinsicTypes = {Ops[0]->getType(),
18771 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18772 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18772, __extension__ __PRETTY_FUNCTION__))
;
18773 } else {
18774 // Builtin: (ptr, index, val0, val1, ..., vl)
18775 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18776 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18777 IntrinsicTypes = {Ops[0]->getType(),
18778 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18779 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18779, __extension__ __PRETTY_FUNCTION__))
;
18780 }
18781 }
18782 break;
18783case RISCVVector::BI__builtin_rvv_vsuxseg5ei8_v:
18784case RISCVVector::BI__builtin_rvv_vsuxseg5ei16_v:
18785case RISCVVector::BI__builtin_rvv_vsuxseg5ei32_v:
18786case RISCVVector::BI__builtin_rvv_vsuxseg5ei64_v:
18787 ID = Intrinsic::riscv_vsuxseg5;
18788 NF = 5;
18789 PolicyAttrs = 3;
18790IsMasked = false;
18791
18792 {
18793 if (IsMasked) {
18794 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18795 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18796 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18797 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18798 IntrinsicTypes = {Ops[0]->getType(),
18799 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18800 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18800, __extension__ __PRETTY_FUNCTION__))
;
18801 } else {
18802 // Builtin: (ptr, index, val0, val1, ..., vl)
18803 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18804 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18805 IntrinsicTypes = {Ops[0]->getType(),
18806 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18807 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18807, __extension__ __PRETTY_FUNCTION__))
;
18808 }
18809 }
18810 break;
18811case RISCVVector::BI__builtin_rvv_vsuxseg5ei8_v_m:
18812case RISCVVector::BI__builtin_rvv_vsuxseg5ei16_v_m:
18813case RISCVVector::BI__builtin_rvv_vsuxseg5ei32_v_m:
18814case RISCVVector::BI__builtin_rvv_vsuxseg5ei64_v_m:
18815 ID = Intrinsic::riscv_vsuxseg5_mask;
18816 NF = 5;
18817 PolicyAttrs = 3;
18818IsMasked = true;
18819
18820 {
18821 if (IsMasked) {
18822 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18823 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18824 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18825 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18826 IntrinsicTypes = {Ops[0]->getType(),
18827 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18828 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18828, __extension__ __PRETTY_FUNCTION__))
;
18829 } else {
18830 // Builtin: (ptr, index, val0, val1, ..., vl)
18831 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18832 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18833 IntrinsicTypes = {Ops[0]->getType(),
18834 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18835 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18835, __extension__ __PRETTY_FUNCTION__))
;
18836 }
18837 }
18838 break;
18839case RISCVVector::BI__builtin_rvv_vsuxseg6ei8_v:
18840case RISCVVector::BI__builtin_rvv_vsuxseg6ei16_v:
18841case RISCVVector::BI__builtin_rvv_vsuxseg6ei32_v:
18842case RISCVVector::BI__builtin_rvv_vsuxseg6ei64_v:
18843 ID = Intrinsic::riscv_vsuxseg6;
18844 NF = 6;
18845 PolicyAttrs = 3;
18846IsMasked = false;
18847
18848 {
18849 if (IsMasked) {
18850 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18851 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18852 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18853 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18854 IntrinsicTypes = {Ops[0]->getType(),
18855 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18856 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18856, __extension__ __PRETTY_FUNCTION__))
;
18857 } else {
18858 // Builtin: (ptr, index, val0, val1, ..., vl)
18859 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18860 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18861 IntrinsicTypes = {Ops[0]->getType(),
18862 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18863 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18863, __extension__ __PRETTY_FUNCTION__))
;
18864 }
18865 }
18866 break;
18867case RISCVVector::BI__builtin_rvv_vsuxseg6ei8_v_m:
18868case RISCVVector::BI__builtin_rvv_vsuxseg6ei16_v_m:
18869case RISCVVector::BI__builtin_rvv_vsuxseg6ei32_v_m:
18870case RISCVVector::BI__builtin_rvv_vsuxseg6ei64_v_m:
18871 ID = Intrinsic::riscv_vsuxseg6_mask;
18872 NF = 6;
18873 PolicyAttrs = 3;
18874IsMasked = true;
18875
18876 {
18877 if (IsMasked) {
18878 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18879 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18880 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18881 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18882 IntrinsicTypes = {Ops[0]->getType(),
18883 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18884 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18884, __extension__ __PRETTY_FUNCTION__))
;
18885 } else {
18886 // Builtin: (ptr, index, val0, val1, ..., vl)
18887 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18888 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18889 IntrinsicTypes = {Ops[0]->getType(),
18890 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18891 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18891, __extension__ __PRETTY_FUNCTION__))
;
18892 }
18893 }
18894 break;
18895case RISCVVector::BI__builtin_rvv_vsuxseg7ei8_v:
18896case RISCVVector::BI__builtin_rvv_vsuxseg7ei16_v:
18897case RISCVVector::BI__builtin_rvv_vsuxseg7ei32_v:
18898case RISCVVector::BI__builtin_rvv_vsuxseg7ei64_v:
18899 ID = Intrinsic::riscv_vsuxseg7;
18900 NF = 7;
18901 PolicyAttrs = 3;
18902IsMasked = false;
18903
18904 {
18905 if (IsMasked) {
18906 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18907 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18908 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18909 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18910 IntrinsicTypes = {Ops[0]->getType(),
18911 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18912 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18912, __extension__ __PRETTY_FUNCTION__))
;
18913 } else {
18914 // Builtin: (ptr, index, val0, val1, ..., vl)
18915 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18916 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18917 IntrinsicTypes = {Ops[0]->getType(),
18918 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18919 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18919, __extension__ __PRETTY_FUNCTION__))
;
18920 }
18921 }
18922 break;
18923case RISCVVector::BI__builtin_rvv_vsuxseg7ei8_v_m:
18924case RISCVVector::BI__builtin_rvv_vsuxseg7ei16_v_m:
18925case RISCVVector::BI__builtin_rvv_vsuxseg7ei32_v_m:
18926case RISCVVector::BI__builtin_rvv_vsuxseg7ei64_v_m:
18927 ID = Intrinsic::riscv_vsuxseg7_mask;
18928 NF = 7;
18929 PolicyAttrs = 3;
18930IsMasked = true;
18931
18932 {
18933 if (IsMasked) {
18934 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18935 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18936 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18937 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18938 IntrinsicTypes = {Ops[0]->getType(),
18939 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18940 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18940, __extension__ __PRETTY_FUNCTION__))
;
18941 } else {
18942 // Builtin: (ptr, index, val0, val1, ..., vl)
18943 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18944 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18945 IntrinsicTypes = {Ops[0]->getType(),
18946 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18947 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18947, __extension__ __PRETTY_FUNCTION__))
;
18948 }
18949 }
18950 break;
18951case RISCVVector::BI__builtin_rvv_vsuxseg8ei8_v:
18952case RISCVVector::BI__builtin_rvv_vsuxseg8ei16_v:
18953case RISCVVector::BI__builtin_rvv_vsuxseg8ei32_v:
18954case RISCVVector::BI__builtin_rvv_vsuxseg8ei64_v:
18955 ID = Intrinsic::riscv_vsuxseg8;
18956 NF = 8;
18957 PolicyAttrs = 3;
18958IsMasked = false;
18959
18960 {
18961 if (IsMasked) {
18962 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18963 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18964 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18965 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18966 IntrinsicTypes = {Ops[0]->getType(),
18967 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18968 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18968, __extension__ __PRETTY_FUNCTION__))
;
18969 } else {
18970 // Builtin: (ptr, index, val0, val1, ..., vl)
18971 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18972 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18973 IntrinsicTypes = {Ops[0]->getType(),
18974 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18975 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18975, __extension__ __PRETTY_FUNCTION__))
;
18976 }
18977 }
18978 break;
18979case RISCVVector::BI__builtin_rvv_vsuxseg8ei8_v_m:
18980case RISCVVector::BI__builtin_rvv_vsuxseg8ei16_v_m:
18981case RISCVVector::BI__builtin_rvv_vsuxseg8ei32_v_m:
18982case RISCVVector::BI__builtin_rvv_vsuxseg8ei64_v_m:
18983 ID = Intrinsic::riscv_vsuxseg8_mask;
18984 NF = 8;
18985 PolicyAttrs = 3;
18986IsMasked = true;
18987
18988 {
18989 if (IsMasked) {
18990 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18991 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18992 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18993 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18994 IntrinsicTypes = {Ops[0]->getType(),
18995 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18996 assert(Ops.size() == NF + 4)(static_cast <bool> (Ops.size() == NF + 4) ? void (0) :
__assert_fail ("Ops.size() == NF + 4", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 18996, __extension__ __PRETTY_FUNCTION__))
;
18997 } else {
18998 // Builtin: (ptr, index, val0, val1, ..., vl)
18999 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19000 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19001 IntrinsicTypes = {Ops[0]->getType(),
19002 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19003 assert(Ops.size() == NF + 3)(static_cast <bool> (Ops.size() == NF + 3) ? void (0) :
__assert_fail ("Ops.size() == NF + 3", "tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc"
, 19003, __extension__ __PRETTY_FUNCTION__))
;
19004 }
19005 }
19006 break;
19007case RISCVVector::BI__builtin_rvv_vwadd_vv_tu:
19008case RISCVVector::BI__builtin_rvv_vwadd_vx_tu:
19009 ID = Intrinsic::riscv_vwadd;
19010 PolicyAttrs = 2;
19011 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19012 break;
19013case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tu:
19014 ID = Intrinsic::riscv_vwadd;
19015 PolicyAttrs = 2;
19016IsMasked = false;
19017
19018 {
19019 if (IsMasked) {
19020 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19021 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19022 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19023 } else {
19024 if (PolicyAttrs & RVV_VTA)
19025 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19026 }
19027 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19028 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19029 if (IsMasked) {
19030 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19031 // maskedoff, op1, op2, mask, vl, policy
19032 IntrinsicTypes = {ResultType,
19033 Ops[1]->getType(),
19034 ElemTy,
19035 Ops[4]->getType()};
19036 } else {
19037 // passtru, op1, op2, vl
19038 IntrinsicTypes = {ResultType,
19039 Ops[1]->getType(),
19040 ElemTy,
19041 Ops[3]->getType()};
19042 }
19043 break;
19044 }
19045 break;
19046case RISCVVector::BI__builtin_rvv_vwadd_vv_ta:
19047case RISCVVector::BI__builtin_rvv_vwadd_vx_ta:
19048 ID = Intrinsic::riscv_vwadd;
19049 PolicyAttrs = 3;
19050 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19051 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19052 break;
19053case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_ta:
19054 ID = Intrinsic::riscv_vwadd;
19055 PolicyAttrs = 3;
19056IsMasked = false;
19057
19058 {
19059 if (IsMasked) {
19060 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19061 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19062 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19063 } else {
19064 if (PolicyAttrs & RVV_VTA)
19065 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19066 }
19067 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19068 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19069 if (IsMasked) {
19070 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19071 // maskedoff, op1, op2, mask, vl, policy
19072 IntrinsicTypes = {ResultType,
19073 Ops[1]->getType(),
19074 ElemTy,
19075 Ops[4]->getType()};
19076 } else {
19077 // passtru, op1, op2, vl
19078 IntrinsicTypes = {ResultType,
19079 Ops[1]->getType(),
19080 ElemTy,
19081 Ops[3]->getType()};
19082 }
19083 break;
19084 }
19085 break;
19086case RISCVVector::BI__builtin_rvv_vwadd_vv_tum:
19087case RISCVVector::BI__builtin_rvv_vwadd_vx_tum:
19088 ID = Intrinsic::riscv_vwadd_mask;
19089 PolicyAttrs = 2;
19090 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19091 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19092 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19093 break;
19094case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tum:
19095 ID = Intrinsic::riscv_vwadd_mask;
19096 PolicyAttrs = 2;
19097IsMasked = true;
19098
19099 {
19100 if (IsMasked) {
19101 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19102 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19103 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19104 } else {
19105 if (PolicyAttrs & RVV_VTA)
19106 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19107 }
19108 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19109 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19110 if (IsMasked) {
19111 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19112 // maskedoff, op1, op2, mask, vl, policy
19113 IntrinsicTypes = {ResultType,
19114 Ops[1]->getType(),
19115 ElemTy,
19116 Ops[4]->getType()};
19117 } else {
19118 // passtru, op1, op2, vl
19119 IntrinsicTypes = {ResultType,
19120 Ops[1]->getType(),
19121 ElemTy,
19122 Ops[3]->getType()};
19123 }
19124 break;
19125 }
19126 break;
19127case RISCVVector::BI__builtin_rvv_vwadd_vv_tama:
19128case RISCVVector::BI__builtin_rvv_vwadd_vx_tama:
19129 ID = Intrinsic::riscv_vwadd_mask;
19130 PolicyAttrs = 3;
19131 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19132 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19133 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19134 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19135 break;
19136case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tama:
19137 ID = Intrinsic::riscv_vwadd_mask;
19138 PolicyAttrs = 3;
19139IsMasked = true;
19140
19141 {
19142 if (IsMasked) {
19143 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19144 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19145 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19146 } else {
19147 if (PolicyAttrs & RVV_VTA)
19148 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19149 }
19150 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19151 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19152 if (IsMasked) {
19153 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19154 // maskedoff, op1, op2, mask, vl, policy
19155 IntrinsicTypes = {ResultType,
19156 Ops[1]->getType(),
19157 ElemTy,
19158 Ops[4]->getType()};
19159 } else {
19160 // passtru, op1, op2, vl
19161 IntrinsicTypes = {ResultType,
19162 Ops[1]->getType(),
19163 ElemTy,
19164 Ops[3]->getType()};
19165 }
19166 break;
19167 }
19168 break;
19169case RISCVVector::BI__builtin_rvv_vwadd_vv_tumu:
19170case RISCVVector::BI__builtin_rvv_vwadd_vx_tumu:
19171 ID = Intrinsic::riscv_vwadd_mask;
19172 PolicyAttrs = 0;
19173 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19174 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19175 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19176 break;
19177case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tumu:
19178 ID = Intrinsic::riscv_vwadd_mask;
19179 PolicyAttrs = 0;
19180IsMasked = true;
19181
19182 {
19183 if (IsMasked) {
19184 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19185 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19186 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19187 } else {
19188 if (PolicyAttrs & RVV_VTA)
19189 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19190 }
19191 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19192 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19193 if (IsMasked) {
19194 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19195 // maskedoff, op1, op2, mask, vl, policy
19196 IntrinsicTypes = {ResultType,
19197 Ops[1]->getType(),
19198 ElemTy,
19199 Ops[4]->getType()};
19200 } else {
19201 // passtru, op1, op2, vl
19202 IntrinsicTypes = {ResultType,
19203 Ops[1]->getType(),
19204 ElemTy,
19205 Ops[3]->getType()};
19206 }
19207 break;
19208 }
19209 break;
19210case RISCVVector::BI__builtin_rvv_vwadd_vv_mu:
19211case RISCVVector::BI__builtin_rvv_vwadd_vx_mu:
19212 ID = Intrinsic::riscv_vwadd_mask;
19213 PolicyAttrs = 1;
19214 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19215 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19216 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19217 break;
19218case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_mu:
19219 ID = Intrinsic::riscv_vwadd_mask;
19220 PolicyAttrs = 1;
19221IsMasked = true;
19222
19223 {
19224 if (IsMasked) {
19225 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19226 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19227 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19228 } else {
19229 if (PolicyAttrs & RVV_VTA)
19230 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19231 }
19232 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19233 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19234 if (IsMasked) {
19235 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19236 // maskedoff, op1, op2, mask, vl, policy
19237 IntrinsicTypes = {ResultType,
19238 Ops[1]->getType(),
19239 ElemTy,
19240 Ops[4]->getType()};
19241 } else {
19242 // passtru, op1, op2, vl
19243 IntrinsicTypes = {ResultType,
19244 Ops[1]->getType(),
19245 ElemTy,
19246 Ops[3]->getType()};
19247 }
19248 break;
19249 }
19250 break;
19251case RISCVVector::BI__builtin_rvv_vwadd_wv_tu:
19252case RISCVVector::BI__builtin_rvv_vwadd_wx_tu:
19253 ID = Intrinsic::riscv_vwadd_w;
19254 PolicyAttrs = 2;
19255 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19256 break;
19257case RISCVVector::BI__builtin_rvv_vwadd_wv_ta:
19258case RISCVVector::BI__builtin_rvv_vwadd_wx_ta:
19259 ID = Intrinsic::riscv_vwadd_w;
19260 PolicyAttrs = 3;
19261 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19262 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19263 break;
19264case RISCVVector::BI__builtin_rvv_vwadd_wv_tum:
19265case RISCVVector::BI__builtin_rvv_vwadd_wx_tum:
19266 ID = Intrinsic::riscv_vwadd_w_mask;
19267 PolicyAttrs = 2;
19268 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19269 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19270 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19271 break;
19272case RISCVVector::BI__builtin_rvv_vwadd_wv_tama:
19273case RISCVVector::BI__builtin_rvv_vwadd_wx_tama:
19274 ID = Intrinsic::riscv_vwadd_w_mask;
19275 PolicyAttrs = 3;
19276 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19277 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19278 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19279 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19280 break;
19281case RISCVVector::BI__builtin_rvv_vwadd_wv_tumu:
19282case RISCVVector::BI__builtin_rvv_vwadd_wx_tumu:
19283 ID = Intrinsic::riscv_vwadd_w_mask;
19284 PolicyAttrs = 0;
19285 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19286 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19287 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19288 break;
19289case RISCVVector::BI__builtin_rvv_vwadd_wv_mu:
19290case RISCVVector::BI__builtin_rvv_vwadd_wx_mu:
19291 ID = Intrinsic::riscv_vwadd_w_mask;
19292 PolicyAttrs = 1;
19293 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19294 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19295 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19296 break;
19297case RISCVVector::BI__builtin_rvv_vwaddu_vv_tu:
19298case RISCVVector::BI__builtin_rvv_vwaddu_vx_tu:
19299 ID = Intrinsic::riscv_vwaddu;
19300 PolicyAttrs = 2;
19301 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19302 break;
19303case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tu:
19304 ID = Intrinsic::riscv_vwaddu;
19305 PolicyAttrs = 2;
19306IsMasked = false;
19307
19308 {
19309 if (IsMasked) {
19310 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19311 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19312 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19313 } else {
19314 if (PolicyAttrs & RVV_VTA)
19315 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19316 }
19317 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19318 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19319 if (IsMasked) {
19320 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19321 // maskedoff, op1, op2, mask, vl, policy
19322 IntrinsicTypes = {ResultType,
19323 Ops[1]->getType(),
19324 ElemTy,
19325 Ops[4]->getType()};
19326 } else {
19327 // passtru, op1, op2, vl
19328 IntrinsicTypes = {ResultType,
19329 Ops[1]->getType(),
19330 ElemTy,
19331 Ops[3]->getType()};
19332 }
19333 break;
19334 }
19335 break;
19336case RISCVVector::BI__builtin_rvv_vwaddu_vv_ta:
19337case RISCVVector::BI__builtin_rvv_vwaddu_vx_ta:
19338 ID = Intrinsic::riscv_vwaddu;
19339 PolicyAttrs = 3;
19340 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19341 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19342 break;
19343case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_ta:
19344 ID = Intrinsic::riscv_vwaddu;
19345 PolicyAttrs = 3;
19346IsMasked = false;
19347
19348 {
19349 if (IsMasked) {
19350 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19351 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19352 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19353 } else {
19354 if (PolicyAttrs & RVV_VTA)
19355 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19356 }
19357 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19358 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19359 if (IsMasked) {
19360 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19361 // maskedoff, op1, op2, mask, vl, policy
19362 IntrinsicTypes = {ResultType,
19363 Ops[1]->getType(),
19364 ElemTy,
19365 Ops[4]->getType()};
19366 } else {
19367 // passtru, op1, op2, vl
19368 IntrinsicTypes = {ResultType,
19369 Ops[1]->getType(),
19370 ElemTy,
19371 Ops[3]->getType()};
19372 }
19373 break;
19374 }
19375 break;
19376case RISCVVector::BI__builtin_rvv_vwaddu_vv_tum:
19377case RISCVVector::BI__builtin_rvv_vwaddu_vx_tum:
19378 ID = Intrinsic::riscv_vwaddu_mask;
19379 PolicyAttrs = 2;
19380 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19381 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19382 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19383 break;
19384case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tum:
19385 ID = Intrinsic::riscv_vwaddu_mask;
19386 PolicyAttrs = 2;
19387IsMasked = true;
19388
19389 {
19390 if (IsMasked) {
19391 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19392 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19393 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19394 } else {
19395 if (PolicyAttrs & RVV_VTA)
19396 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19397 }
19398 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19399 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19400 if (IsMasked) {
19401 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19402 // maskedoff, op1, op2, mask, vl, policy
19403 IntrinsicTypes = {ResultType,
19404 Ops[1]->getType(),
19405 ElemTy,
19406 Ops[4]->getType()};
19407 } else {
19408 // passtru, op1, op2, vl
19409 IntrinsicTypes = {ResultType,
19410 Ops[1]->getType(),
19411 ElemTy,
19412 Ops[3]->getType()};
19413 }
19414 break;
19415 }
19416 break;
19417case RISCVVector::BI__builtin_rvv_vwaddu_vv_tama:
19418case RISCVVector::BI__builtin_rvv_vwaddu_vx_tama:
19419 ID = Intrinsic::riscv_vwaddu_mask;
19420 PolicyAttrs = 3;
19421 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19422 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19423 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19424 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19425 break;
19426case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tama:
19427 ID = Intrinsic::riscv_vwaddu_mask;
19428 PolicyAttrs = 3;
19429IsMasked = true;
19430
19431 {
19432 if (IsMasked) {
19433 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19434 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19435 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19436 } else {
19437 if (PolicyAttrs & RVV_VTA)
19438 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19439 }
19440 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19441 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19442 if (IsMasked) {
19443 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19444 // maskedoff, op1, op2, mask, vl, policy
19445 IntrinsicTypes = {ResultType,
19446 Ops[1]->getType(),
19447 ElemTy,
19448 Ops[4]->getType()};
19449 } else {
19450 // passtru, op1, op2, vl
19451 IntrinsicTypes = {ResultType,
19452 Ops[1]->getType(),
19453 ElemTy,
19454 Ops[3]->getType()};
19455 }
19456 break;
19457 }
19458 break;
19459case RISCVVector::BI__builtin_rvv_vwaddu_vv_tumu:
19460case RISCVVector::BI__builtin_rvv_vwaddu_vx_tumu:
19461 ID = Intrinsic::riscv_vwaddu_mask;
19462 PolicyAttrs = 0;
19463 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19464 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19465 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19466 break;
19467case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tumu:
19468 ID = Intrinsic::riscv_vwaddu_mask;
19469 PolicyAttrs = 0;
19470IsMasked = true;
19471
19472 {
19473 if (IsMasked) {
19474 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19475 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19476 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19477 } else {
19478 if (PolicyAttrs & RVV_VTA)
19479 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19480 }
19481 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19482 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19483 if (IsMasked) {
19484 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19485 // maskedoff, op1, op2, mask, vl, policy
19486 IntrinsicTypes = {ResultType,
19487 Ops[1]->getType(),
19488 ElemTy,
19489 Ops[4]->getType()};
19490 } else {
19491 // passtru, op1, op2, vl
19492 IntrinsicTypes = {ResultType,
19493 Ops[1]->getType(),
19494 ElemTy,
19495 Ops[3]->getType()};
19496 }
19497 break;
19498 }
19499 break;
19500case RISCVVector::BI__builtin_rvv_vwaddu_vv_mu:
19501case RISCVVector::BI__builtin_rvv_vwaddu_vx_mu:
19502 ID = Intrinsic::riscv_vwaddu_mask;
19503 PolicyAttrs = 1;
19504 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19505 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19506 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19507 break;
19508case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_mu:
19509 ID = Intrinsic::riscv_vwaddu_mask;
19510 PolicyAttrs = 1;
19511IsMasked = true;
19512
19513 {
19514 if (IsMasked) {
19515 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19516 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19517 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19518 } else {
19519 if (PolicyAttrs & RVV_VTA)
19520 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19521 }
19522 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19523 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19524 if (IsMasked) {
19525 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19526 // maskedoff, op1, op2, mask, vl, policy
19527 IntrinsicTypes = {ResultType,
19528 Ops[1]->getType(),
19529 ElemTy,
19530 Ops[4]->getType()};
19531 } else {
19532 // passtru, op1, op2, vl
19533 IntrinsicTypes = {ResultType,
19534 Ops[1]->getType(),
19535 ElemTy,
19536 Ops[3]->getType()};
19537 }
19538 break;
19539 }
19540 break;
19541case RISCVVector::BI__builtin_rvv_vwaddu_wx_tu:
19542case RISCVVector::BI__builtin_rvv_vwaddu_wv_tu:
19543 ID = Intrinsic::riscv_vwaddu_w;
19544 PolicyAttrs = 2;
19545 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19546 break;
19547case RISCVVector::BI__builtin_rvv_vwaddu_wx_ta:
19548case RISCVVector::BI__builtin_rvv_vwaddu_wv_ta:
19549 ID = Intrinsic::riscv_vwaddu_w;
19550 PolicyAttrs = 3;
19551 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19552 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19553 break;
19554case RISCVVector::BI__builtin_rvv_vwaddu_wx_tum:
19555case RISCVVector::BI__builtin_rvv_vwaddu_wv_tum:
19556 ID = Intrinsic::riscv_vwaddu_w_mask;
19557 PolicyAttrs = 2;
19558 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19559 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19560 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19561 break;
19562case RISCVVector::BI__builtin_rvv_vwaddu_wx_tama:
19563case RISCVVector::BI__builtin_rvv_vwaddu_wv_tama:
19564 ID = Intrinsic::riscv_vwaddu_w_mask;
19565 PolicyAttrs = 3;
19566 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19567 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19568 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19569 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19570 break;
19571case RISCVVector::BI__builtin_rvv_vwaddu_wx_tumu:
19572case RISCVVector::BI__builtin_rvv_vwaddu_wv_tumu:
19573 ID = Intrinsic::riscv_vwaddu_w_mask;
19574 PolicyAttrs = 0;
19575 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19576 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19577 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19578 break;
19579case RISCVVector::BI__builtin_rvv_vwaddu_wx_mu:
19580case RISCVVector::BI__builtin_rvv_vwaddu_wv_mu:
19581 ID = Intrinsic::riscv_vwaddu_w_mask;
19582 PolicyAttrs = 1;
19583 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19584 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19585 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19586 break;
19587case RISCVVector::BI__builtin_rvv_vwmacc_vv_tu:
19588case RISCVVector::BI__builtin_rvv_vwmacc_vx_tu:
19589 ID = Intrinsic::riscv_vwmacc;
19590 PolicyAttrs = 2;
19591 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19592 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19593 break;
19594case RISCVVector::BI__builtin_rvv_vwmacc_vv_ta:
19595case RISCVVector::BI__builtin_rvv_vwmacc_vx_ta:
19596 ID = Intrinsic::riscv_vwmacc;
19597 PolicyAttrs = 3;
19598 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19599 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19600 break;
19601case RISCVVector::BI__builtin_rvv_vwmacc_vv_tum:
19602case RISCVVector::BI__builtin_rvv_vwmacc_vx_tum:
19603 ID = Intrinsic::riscv_vwmacc_mask;
19604 PolicyAttrs = 2;
19605 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19606 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19607 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19608 break;
19609case RISCVVector::BI__builtin_rvv_vwmacc_vv_tama:
19610case RISCVVector::BI__builtin_rvv_vwmacc_vx_tama:
19611 ID = Intrinsic::riscv_vwmacc_mask;
19612 PolicyAttrs = 3;
19613 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19614 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19615 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19616 break;
19617case RISCVVector::BI__builtin_rvv_vwmacc_vv_tumu:
19618case RISCVVector::BI__builtin_rvv_vwmacc_vx_tumu:
19619 ID = Intrinsic::riscv_vwmacc_mask;
19620 PolicyAttrs = 0;
19621 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19622 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19623 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19624 break;
19625case RISCVVector::BI__builtin_rvv_vwmacc_vv_mu:
19626case RISCVVector::BI__builtin_rvv_vwmacc_vx_mu:
19627 ID = Intrinsic::riscv_vwmacc_mask;
19628 PolicyAttrs = 1;
19629 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19630 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19631 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19632 break;
19633case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tu:
19634case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tu:
19635 ID = Intrinsic::riscv_vwmaccsu;
19636 PolicyAttrs = 2;
19637 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19638 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19639 break;
19640case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_ta:
19641case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_ta:
19642 ID = Intrinsic::riscv_vwmaccsu;
19643 PolicyAttrs = 3;
19644 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19645 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19646 break;
19647case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tum:
19648case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tum:
19649 ID = Intrinsic::riscv_vwmaccsu_mask;
19650 PolicyAttrs = 2;
19651 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19652 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19653 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19654 break;
19655case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tama:
19656case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tama:
19657 ID = Intrinsic::riscv_vwmaccsu_mask;
19658 PolicyAttrs = 3;
19659 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19660 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19661 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19662 break;
19663case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tumu:
19664case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tumu:
19665 ID = Intrinsic::riscv_vwmaccsu_mask;
19666 PolicyAttrs = 0;
19667 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19668 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19669 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19670 break;
19671case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_mu:
19672case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_mu:
19673 ID = Intrinsic::riscv_vwmaccsu_mask;
19674 PolicyAttrs = 1;
19675 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19676 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19677 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19678 break;
19679case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tu:
19680case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tu:
19681 ID = Intrinsic::riscv_vwmaccu;
19682 PolicyAttrs = 2;
19683 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19684 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19685 break;
19686case RISCVVector::BI__builtin_rvv_vwmaccu_vv_ta:
19687case RISCVVector::BI__builtin_rvv_vwmaccu_vx_ta:
19688 ID = Intrinsic::riscv_vwmaccu;
19689 PolicyAttrs = 3;
19690 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19691 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19692 break;
19693case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tum:
19694case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tum:
19695 ID = Intrinsic::riscv_vwmaccu_mask;
19696 PolicyAttrs = 2;
19697 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19698 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19699 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19700 break;
19701case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tama:
19702case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tama:
19703 ID = Intrinsic::riscv_vwmaccu_mask;
19704 PolicyAttrs = 3;
19705 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19706 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19707 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19708 break;
19709case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tumu:
19710case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tumu:
19711 ID = Intrinsic::riscv_vwmaccu_mask;
19712 PolicyAttrs = 0;
19713 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19714 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19715 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19716 break;
19717case RISCVVector::BI__builtin_rvv_vwmaccu_vv_mu:
19718case RISCVVector::BI__builtin_rvv_vwmaccu_vx_mu:
19719 ID = Intrinsic::riscv_vwmaccu_mask;
19720 PolicyAttrs = 1;
19721 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19722 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19723 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19724 break;
19725case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tu:
19726 ID = Intrinsic::riscv_vwmaccus;
19727 PolicyAttrs = 2;
19728 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19729 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19730 break;
19731case RISCVVector::BI__builtin_rvv_vwmaccus_vx_ta:
19732 ID = Intrinsic::riscv_vwmaccus;
19733 PolicyAttrs = 3;
19734 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19735 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19736 break;
19737case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tum:
19738 ID = Intrinsic::riscv_vwmaccus_mask;
19739 PolicyAttrs = 2;
19740 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19741 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19742 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19743 break;
19744case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tama:
19745 ID = Intrinsic::riscv_vwmaccus_mask;
19746 PolicyAttrs = 3;
19747 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19748 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19749 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19750 break;
19751case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tumu:
19752 ID = Intrinsic::riscv_vwmaccus_mask;
19753 PolicyAttrs = 0;
19754 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19755 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19756 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19757 break;
19758case RISCVVector::BI__builtin_rvv_vwmaccus_vx_mu:
19759 ID = Intrinsic::riscv_vwmaccus_mask;
19760 PolicyAttrs = 1;
19761 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19762 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19763 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19764 break;
19765case RISCVVector::BI__builtin_rvv_vwmul_vv_tu:
19766case RISCVVector::BI__builtin_rvv_vwmul_vx_tu:
19767 ID = Intrinsic::riscv_vwmul;
19768 PolicyAttrs = 2;
19769 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19770 break;
19771case RISCVVector::BI__builtin_rvv_vwmul_vv_ta:
19772case RISCVVector::BI__builtin_rvv_vwmul_vx_ta:
19773 ID = Intrinsic::riscv_vwmul;
19774 PolicyAttrs = 3;
19775 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19776 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19777 break;
19778case RISCVVector::BI__builtin_rvv_vwmul_vv_tum:
19779case RISCVVector::BI__builtin_rvv_vwmul_vx_tum:
19780 ID = Intrinsic::riscv_vwmul_mask;
19781 PolicyAttrs = 2;
19782 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19783 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19784 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19785 break;
19786case RISCVVector::BI__builtin_rvv_vwmul_vv_tama:
19787case RISCVVector::BI__builtin_rvv_vwmul_vx_tama:
19788 ID = Intrinsic::riscv_vwmul_mask;
19789 PolicyAttrs = 3;
19790 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19791 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19792 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19793 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19794 break;
19795case RISCVVector::BI__builtin_rvv_vwmul_vv_tumu:
19796case RISCVVector::BI__builtin_rvv_vwmul_vx_tumu:
19797 ID = Intrinsic::riscv_vwmul_mask;
19798 PolicyAttrs = 0;
19799 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19800 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19801 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19802 break;
19803case RISCVVector::BI__builtin_rvv_vwmul_vv_mu:
19804case RISCVVector::BI__builtin_rvv_vwmul_vx_mu:
19805 ID = Intrinsic::riscv_vwmul_mask;
19806 PolicyAttrs = 1;
19807 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19808 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19809 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19810 break;
19811case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tu:
19812case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tu:
19813 ID = Intrinsic::riscv_vwmulsu;
19814 PolicyAttrs = 2;
19815 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19816 break;
19817case RISCVVector::BI__builtin_rvv_vwmulsu_vv_ta:
19818case RISCVVector::BI__builtin_rvv_vwmulsu_vx_ta:
19819 ID = Intrinsic::riscv_vwmulsu;
19820 PolicyAttrs = 3;
19821 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19822 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19823 break;
19824case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tum:
19825case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tum:
19826 ID = Intrinsic::riscv_vwmulsu_mask;
19827 PolicyAttrs = 2;
19828 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19829 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19830 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19831 break;
19832case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tama:
19833case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tama:
19834 ID = Intrinsic::riscv_vwmulsu_mask;
19835 PolicyAttrs = 3;
19836 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19837 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19838 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19839 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19840 break;
19841case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tumu:
19842case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tumu:
19843 ID = Intrinsic::riscv_vwmulsu_mask;
19844 PolicyAttrs = 0;
19845 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19846 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19847 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19848 break;
19849case RISCVVector::BI__builtin_rvv_vwmulsu_vv_mu:
19850case RISCVVector::BI__builtin_rvv_vwmulsu_vx_mu:
19851 ID = Intrinsic::riscv_vwmulsu_mask;
19852 PolicyAttrs = 1;
19853 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19854 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19855 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19856 break;
19857case RISCVVector::BI__builtin_rvv_vwmulu_vv_tu:
19858case RISCVVector::BI__builtin_rvv_vwmulu_vx_tu:
19859 ID = Intrinsic::riscv_vwmulu;
19860 PolicyAttrs = 2;
19861 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19862 break;
19863case RISCVVector::BI__builtin_rvv_vwmulu_vv_ta:
19864case RISCVVector::BI__builtin_rvv_vwmulu_vx_ta:
19865 ID = Intrinsic::riscv_vwmulu;
19866 PolicyAttrs = 3;
19867 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19868 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19869 break;
19870case RISCVVector::BI__builtin_rvv_vwmulu_vv_tum:
19871case RISCVVector::BI__builtin_rvv_vwmulu_vx_tum:
19872 ID = Intrinsic::riscv_vwmulu_mask;
19873 PolicyAttrs = 2;
19874 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19875 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19876 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19877 break;
19878case RISCVVector::BI__builtin_rvv_vwmulu_vv_tama:
19879case RISCVVector::BI__builtin_rvv_vwmulu_vx_tama:
19880 ID = Intrinsic::riscv_vwmulu_mask;
19881 PolicyAttrs = 3;
19882 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19883 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19884 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19885 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19886 break;
19887case RISCVVector::BI__builtin_rvv_vwmulu_vv_tumu:
19888case RISCVVector::BI__builtin_rvv_vwmulu_vx_tumu:
19889 ID = Intrinsic::riscv_vwmulu_mask;
19890 PolicyAttrs = 0;
19891 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19892 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19893 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19894 break;
19895case RISCVVector::BI__builtin_rvv_vwmulu_vv_mu:
19896case RISCVVector::BI__builtin_rvv_vwmulu_vx_mu:
19897 ID = Intrinsic::riscv_vwmulu_mask;
19898 PolicyAttrs = 1;
19899 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19900 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19901 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19902 break;
19903case RISCVVector::BI__builtin_rvv_vwredsum_vs_tu:
19904 ID = Intrinsic::riscv_vwredsum;
19905 PolicyAttrs = 2;
19906 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19907 break;
19908case RISCVVector::BI__builtin_rvv_vwredsum_vs_ta:
19909 ID = Intrinsic::riscv_vwredsum;
19910 PolicyAttrs = 3;
19911 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19912 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19913 break;
19914case RISCVVector::BI__builtin_rvv_vwredsum_vs_tum:
19915 ID = Intrinsic::riscv_vwredsum_mask;
19916 PolicyAttrs = 2;
19917 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19918 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19919 break;
19920case RISCVVector::BI__builtin_rvv_vwredsum_vs_tama:
19921 ID = Intrinsic::riscv_vwredsum_mask;
19922 PolicyAttrs = 3;
19923 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19924 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19925 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19926 break;
19927case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tu:
19928 ID = Intrinsic::riscv_vwredsumu;
19929 PolicyAttrs = 2;
19930 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19931 break;
19932case RISCVVector::BI__builtin_rvv_vwredsumu_vs_ta:
19933 ID = Intrinsic::riscv_vwredsumu;
19934 PolicyAttrs = 3;
19935 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19936 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19937 break;
19938case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tum:
19939 ID = Intrinsic::riscv_vwredsumu_mask;
19940 PolicyAttrs = 2;
19941 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19942 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19943 break;
19944case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tama:
19945 ID = Intrinsic::riscv_vwredsumu_mask;
19946 PolicyAttrs = 3;
19947 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19948 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19949 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19950 break;
19951case RISCVVector::BI__builtin_rvv_vwsub_vv_tu:
19952case RISCVVector::BI__builtin_rvv_vwsub_vx_tu:
19953 ID = Intrinsic::riscv_vwsub;
19954 PolicyAttrs = 2;
19955 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19956 break;
19957case RISCVVector::BI__builtin_rvv_vwsub_vv_ta:
19958case RISCVVector::BI__builtin_rvv_vwsub_vx_ta:
19959 ID = Intrinsic::riscv_vwsub;
19960 PolicyAttrs = 3;
19961 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19962 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19963 break;
19964case RISCVVector::BI__builtin_rvv_vwsub_vv_tum:
19965case RISCVVector::BI__builtin_rvv_vwsub_vx_tum:
19966 ID = Intrinsic::riscv_vwsub_mask;
19967 PolicyAttrs = 2;
19968 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19969 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19970 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19971 break;
19972case RISCVVector::BI__builtin_rvv_vwsub_vv_tama:
19973case RISCVVector::BI__builtin_rvv_vwsub_vx_tama:
19974 ID = Intrinsic::riscv_vwsub_mask;
19975 PolicyAttrs = 3;
19976 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19977 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19978 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19979 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19980 break;
19981case RISCVVector::BI__builtin_rvv_vwsub_vv_tumu:
19982case RISCVVector::BI__builtin_rvv_vwsub_vx_tumu:
19983 ID = Intrinsic::riscv_vwsub_mask;
19984 PolicyAttrs = 0;
19985 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19986 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19987 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19988 break;
19989case RISCVVector::BI__builtin_rvv_vwsub_vv_mu:
19990case RISCVVector::BI__builtin_rvv_vwsub_vx_mu:
19991 ID = Intrinsic::riscv_vwsub_mask;
19992 PolicyAttrs = 1;
19993 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19994 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19995 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19996 break;
19997case RISCVVector::BI__builtin_rvv_vwsub_wv_tu:
19998case RISCVVector::BI__builtin_rvv_vwsub_wx_tu:
19999 ID = Intrinsic::riscv_vwsub_w;
20000 PolicyAttrs = 2;
20001 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20002 break;
20003case RISCVVector::BI__builtin_rvv_vwsub_wv_ta:
20004case RISCVVector::BI__builtin_rvv_vwsub_wx_ta:
20005 ID = Intrinsic::riscv_vwsub_w;
20006 PolicyAttrs = 3;
20007 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20008 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20009 break;
20010case RISCVVector::BI__builtin_rvv_vwsub_wv_tum:
20011case RISCVVector::BI__builtin_rvv_vwsub_wx_tum:
20012 ID = Intrinsic::riscv_vwsub_w_mask;
20013 PolicyAttrs = 2;
20014 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20015 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20016 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20017 break;
20018case RISCVVector::BI__builtin_rvv_vwsub_wv_tama:
20019case RISCVVector::BI__builtin_rvv_vwsub_wx_tama:
20020 ID = Intrinsic::riscv_vwsub_w_mask;
20021 PolicyAttrs = 3;
20022 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20023 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20024 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20025 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20026 break;
20027case RISCVVector::BI__builtin_rvv_vwsub_wv_tumu:
20028case RISCVVector::BI__builtin_rvv_vwsub_wx_tumu:
20029 ID = Intrinsic::riscv_vwsub_w_mask;
20030 PolicyAttrs = 0;
20031 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20032 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20033 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20034 break;
20035case RISCVVector::BI__builtin_rvv_vwsub_wv_mu:
20036case RISCVVector::BI__builtin_rvv_vwsub_wx_mu:
20037 ID = Intrinsic::riscv_vwsub_w_mask;
20038 PolicyAttrs = 1;
20039 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20040 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20041 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20042 break;
20043case RISCVVector::BI__builtin_rvv_vwsubu_vv_tu:
20044case RISCVVector::BI__builtin_rvv_vwsubu_vx_tu:
20045 ID = Intrinsic::riscv_vwsubu;
20046 PolicyAttrs = 2;
20047 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20048 break;
20049case RISCVVector::BI__builtin_rvv_vwsubu_vv_ta:
20050case RISCVVector::BI__builtin_rvv_vwsubu_vx_ta:
20051 ID = Intrinsic::riscv_vwsubu;
20052 PolicyAttrs = 3;
20053 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20054 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20055 break;
20056case RISCVVector::BI__builtin_rvv_vwsubu_vv_tum:
20057case RISCVVector::BI__builtin_rvv_vwsubu_vx_tum:
20058 ID = Intrinsic::riscv_vwsubu_mask;
20059 PolicyAttrs = 2;
20060 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20061 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20062 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20063 break;
20064case RISCVVector::BI__builtin_rvv_vwsubu_vv_tama:
20065case RISCVVector::BI__builtin_rvv_vwsubu_vx_tama:
20066 ID = Intrinsic::riscv_vwsubu_mask;
20067 PolicyAttrs = 3;
20068 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20069 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20070 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20071 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20072 break;
20073case RISCVVector::BI__builtin_rvv_vwsubu_vv_tumu:
20074case RISCVVector::BI__builtin_rvv_vwsubu_vx_tumu:
20075 ID = Intrinsic::riscv_vwsubu_mask;
20076 PolicyAttrs = 0;
20077 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20078 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20079 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20080 break;
20081case RISCVVector::BI__builtin_rvv_vwsubu_vv_mu:
20082case RISCVVector::BI__builtin_rvv_vwsubu_vx_mu:
20083 ID = Intrinsic::riscv_vwsubu_mask;
20084 PolicyAttrs = 1;
20085 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20086 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20087 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20088 break;
20089case RISCVVector::BI__builtin_rvv_vwsubu_wv_tu:
20090case RISCVVector::BI__builtin_rvv_vwsubu_wx_tu:
20091 ID = Intrinsic::riscv_vwsubu_w;
20092 PolicyAttrs = 2;
20093 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20094 break;
20095case RISCVVector::BI__builtin_rvv_vwsubu_wv_ta:
20096case RISCVVector::BI__builtin_rvv_vwsubu_wx_ta:
20097 ID = Intrinsic::riscv_vwsubu_w;
20098 PolicyAttrs = 3;
20099 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20100 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20101 break;
20102case RISCVVector::BI__builtin_rvv_vwsubu_wv_tum:
20103case RISCVVector::BI__builtin_rvv_vwsubu_wx_tum:
20104 ID = Intrinsic::riscv_vwsubu_w_mask;
20105 PolicyAttrs = 2;
20106 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20107 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20108 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20109 break;
20110case RISCVVector::BI__builtin_rvv_vwsubu_wv_tama:
20111case RISCVVector::BI__builtin_rvv_vwsubu_wx_tama:
20112 ID = Intrinsic::riscv_vwsubu_w_mask;
20113 PolicyAttrs = 3;
20114 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20115 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20116 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20117 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20118 break;
20119case RISCVVector::BI__builtin_rvv_vwsubu_wv_tumu:
20120case RISCVVector::BI__builtin_rvv_vwsubu_wx_tumu:
20121 ID = Intrinsic::riscv_vwsubu_w_mask;
20122 PolicyAttrs = 0;
20123 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20124 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20125 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20126 break;
20127case RISCVVector::BI__builtin_rvv_vwsubu_wv_mu:
20128case RISCVVector::BI__builtin_rvv_vwsubu_wx_mu:
20129 ID = Intrinsic::riscv_vwsubu_w_mask;
20130 PolicyAttrs = 1;
20131 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20132 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20133 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20134 break;
20135case RISCVVector::BI__builtin_rvv_vxor_vv_tu:
20136case RISCVVector::BI__builtin_rvv_vxor_vx_tu:
20137 ID = Intrinsic::riscv_vxor;
20138 PolicyAttrs = 2;
20139 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20140 break;
20141case RISCVVector::BI__builtin_rvv_vnot_v_tu:
20142 ID = Intrinsic::riscv_vxor;
20143 PolicyAttrs = 2;
20144IsMasked = false;
20145
20146 {
20147 if (IsMasked) {
20148 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20149 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20150 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20151 } else {
20152 if (PolicyAttrs & RVV_VTA)
20153 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20154 }
20155 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20156 Ops.insert(Ops.begin() + 2,
20157 llvm::Constant::getAllOnesValue(ElemTy));
20158 if (IsMasked) {
20159 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20160 // maskedoff, op1, po2, mask, vl, policy
20161 IntrinsicTypes = {ResultType,
20162 ElemTy,
20163 Ops[4]->getType()};
20164 } else {
20165 // passthru, op1, op2, vl
20166 IntrinsicTypes = {ResultType,
20167 ElemTy,
20168 Ops[3]->getType()};
20169 }
20170 break;
20171 }
20172 break;
20173case RISCVVector::BI__builtin_rvv_vxor_vv_ta:
20174case RISCVVector::BI__builtin_rvv_vxor_vx_ta:
20175 ID = Intrinsic::riscv_vxor;
20176 PolicyAttrs = 3;
20177 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20178 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20179 break;
20180case RISCVVector::BI__builtin_rvv_vnot_v_ta:
20181 ID = Intrinsic::riscv_vxor;
20182 PolicyAttrs = 3;
20183IsMasked = false;
20184
20185 {
20186 if (IsMasked) {
20187 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20188 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20189 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20190 } else {
20191 if (PolicyAttrs & RVV_VTA)
20192 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20193 }
20194 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20195 Ops.insert(Ops.begin() + 2,
20196 llvm::Constant::getAllOnesValue(ElemTy));
20197 if (IsMasked) {
20198 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20199 // maskedoff, op1, po2, mask, vl, policy
20200 IntrinsicTypes = {ResultType,
20201 ElemTy,
20202 Ops[4]->getType()};
20203 } else {
20204 // passthru, op1, op2, vl
20205 IntrinsicTypes = {ResultType,
20206 ElemTy,
20207 Ops[3]->getType()};
20208 }
20209 break;
20210 }
20211 break;
20212case RISCVVector::BI__builtin_rvv_vxor_vv_tum:
20213case RISCVVector::BI__builtin_rvv_vxor_vx_tum:
20214 ID = Intrinsic::riscv_vxor_mask;
20215 PolicyAttrs = 2;
20216 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20217 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20218 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20219 break;
20220case RISCVVector::BI__builtin_rvv_vnot_v_tum:
20221 ID = Intrinsic::riscv_vxor_mask;
20222 PolicyAttrs = 2;
20223IsMasked = true;
20224
20225 {
20226 if (IsMasked) {
20227 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20228 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20229 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20230 } else {
20231 if (PolicyAttrs & RVV_VTA)
20232 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20233 }
20234 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20235 Ops.insert(Ops.begin() + 2,
20236 llvm::Constant::getAllOnesValue(ElemTy));
20237 if (IsMasked) {
20238 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20239 // maskedoff, op1, po2, mask, vl, policy
20240 IntrinsicTypes = {ResultType,
20241 ElemTy,
20242 Ops[4]->getType()};
20243 } else {
20244 // passthru, op1, op2, vl
20245 IntrinsicTypes = {ResultType,
20246 ElemTy,
20247 Ops[3]->getType()};
20248 }
20249 break;
20250 }
20251 break;
20252case RISCVVector::BI__builtin_rvv_vxor_vv_tama:
20253case RISCVVector::BI__builtin_rvv_vxor_vx_tama:
20254 ID = Intrinsic::riscv_vxor_mask;
20255 PolicyAttrs = 3;
20256 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20257 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20258 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20259 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20260 break;
20261case RISCVVector::BI__builtin_rvv_vnot_v_tama:
20262 ID = Intrinsic::riscv_vxor_mask;
20263 PolicyAttrs = 3;
20264IsMasked = true;
20265
20266 {
20267 if (IsMasked) {
20268 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20269 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20270 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20271 } else {
20272 if (PolicyAttrs & RVV_VTA)
20273 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20274 }
20275 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20276 Ops.insert(Ops.begin() + 2,
20277 llvm::Constant::getAllOnesValue(ElemTy));
20278 if (IsMasked) {
20279 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20280 // maskedoff, op1, po2, mask, vl, policy
20281 IntrinsicTypes = {ResultType,
20282 ElemTy,
20283 Ops[4]->getType()};
20284 } else {
20285 // passthru, op1, op2, vl
20286 IntrinsicTypes = {ResultType,
20287 ElemTy,
20288 Ops[3]->getType()};
20289 }
20290 break;
20291 }
20292 break;
20293case RISCVVector::BI__builtin_rvv_vxor_vv_tumu:
20294case RISCVVector::BI__builtin_rvv_vxor_vx_tumu:
20295 ID = Intrinsic::riscv_vxor_mask;
20296 PolicyAttrs = 0;
20297 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20298 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20299 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20300 break;
20301case RISCVVector::BI__builtin_rvv_vnot_v_tumu:
20302 ID = Intrinsic::riscv_vxor_mask;
20303 PolicyAttrs = 0;
20304IsMasked = true;
20305
20306 {
20307 if (IsMasked) {
20308 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20309 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20310 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20311 } else {
20312 if (PolicyAttrs & RVV_VTA)
20313 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20314 }
20315 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20316 Ops.insert(Ops.begin() + 2,
20317 llvm::Constant::getAllOnesValue(ElemTy));
20318 if (IsMasked) {
20319 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20320 // maskedoff, op1, po2, mask, vl, policy
20321 IntrinsicTypes = {ResultType,
20322 ElemTy,
20323 Ops[4]->getType()};
20324 } else {
20325 // passthru, op1, op2, vl
20326 IntrinsicTypes = {ResultType,
20327 ElemTy,
20328 Ops[3]->getType()};
20329 }
20330 break;
20331 }
20332 break;
20333case RISCVVector::BI__builtin_rvv_vxor_vv_mu:
20334case RISCVVector::BI__builtin_rvv_vxor_vx_mu:
20335 ID = Intrinsic::riscv_vxor_mask;
20336 PolicyAttrs = 1;
20337 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20338 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20339 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20340 break;
20341case RISCVVector::BI__builtin_rvv_vnot_v_mu:
20342 ID = Intrinsic::riscv_vxor_mask;
20343 PolicyAttrs = 1;
20344IsMasked = true;
20345
20346 {
20347 if (IsMasked) {
20348 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20349 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20350 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20351 } else {
20352 if (PolicyAttrs & RVV_VTA)
20353 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20354 }
20355 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20356 Ops.insert(Ops.begin() + 2,
20357 llvm::Constant::getAllOnesValue(ElemTy));
20358 if (IsMasked) {
20359 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20360 // maskedoff, op1, po2, mask, vl, policy
20361 IntrinsicTypes = {ResultType,
20362 ElemTy,
20363 Ops[4]->getType()};
20364 } else {
20365 // passthru, op1, op2, vl
20366 IntrinsicTypes = {ResultType,
20367 ElemTy,
20368 Ops[3]->getType()};
20369 }
20370 break;
20371 }
20372 break;
20373case RISCVVector::BI__builtin_rvv_vzext_vf2_tu:
20374case RISCVVector::BI__builtin_rvv_vzext_vf4_tu:
20375case RISCVVector::BI__builtin_rvv_vzext_vf8_tu:
20376 ID = Intrinsic::riscv_vzext;
20377 PolicyAttrs = 2;
20378 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20379 break;
20380case RISCVVector::BI__builtin_rvv_vzext_vf2_ta:
20381case RISCVVector::BI__builtin_rvv_vzext_vf4_ta:
20382case RISCVVector::BI__builtin_rvv_vzext_vf8_ta:
20383 ID = Intrinsic::riscv_vzext;
20384 PolicyAttrs = 3;
20385 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20386 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20387 break;
20388case RISCVVector::BI__builtin_rvv_vzext_vf2_tum:
20389case RISCVVector::BI__builtin_rvv_vzext_vf4_tum:
20390case RISCVVector::BI__builtin_rvv_vzext_vf8_tum:
20391 ID = Intrinsic::riscv_vzext_mask;
20392 PolicyAttrs = 2;
20393 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20394 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20395 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20396 break;
20397case RISCVVector::BI__builtin_rvv_vzext_vf2_tama:
20398case RISCVVector::BI__builtin_rvv_vzext_vf4_tama:
20399case RISCVVector::BI__builtin_rvv_vzext_vf8_tama:
20400 ID = Intrinsic::riscv_vzext_mask;
20401 PolicyAttrs = 3;
20402 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20403 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20404 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20405 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20406 break;
20407case RISCVVector::BI__builtin_rvv_vzext_vf2_tumu:
20408case RISCVVector::BI__builtin_rvv_vzext_vf4_tumu:
20409case RISCVVector::BI__builtin_rvv_vzext_vf8_tumu:
20410 ID = Intrinsic::riscv_vzext_mask;
20411 PolicyAttrs = 0;
20412 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20413 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20414 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20415 break;
20416case RISCVVector::BI__builtin_rvv_vzext_vf2_mu:
20417case RISCVVector::BI__builtin_rvv_vzext_vf4_mu:
20418case RISCVVector::BI__builtin_rvv_vzext_vf8_mu:
20419 ID = Intrinsic::riscv_vzext_mask;
20420 PolicyAttrs = 1;
20421 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20422 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20423 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20424 break;
20425