Bug Summary

File:build/source/build-llvm/tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc
Warning:line 15017, 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/= -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-05-10-133810-16478-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_vfneg_v_tu:
2063 ID = Intrinsic::riscv_vfsgnjn;
2064 PolicyAttrs = 2;
2065IsMasked = false;
2066
2067 {
2068 if (IsMasked) {
2069 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2070 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2071 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2072 Ops.insert(Ops.begin() + 2, Ops[1]);
2073 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2074 // maskedoff, op1, op2, mask, vl
2075 IntrinsicTypes = {ResultType,
2076 Ops[2]->getType(),
2077 Ops.back()->getType()};
2078 } else {
2079 if (PolicyAttrs & RVV_VTA)
2080 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2081 // op1, po2, vl
2082 IntrinsicTypes = {ResultType,
2083 Ops[1]->getType(), Ops[2]->getType()};
2084 Ops.insert(Ops.begin() + 2, Ops[1]);
2085 break;
2086 }
2087 break;
2088 }
2089 break;
2090case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tu:
2091case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tu:
2092 ID = Intrinsic::riscv_vfsgnjn;
2093 PolicyAttrs = 2;
2094 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2095 break;
2096case RISCVVector::BI__builtin_rvv_vfneg_v_ta:
2097 ID = Intrinsic::riscv_vfsgnjn;
2098 PolicyAttrs = 3;
2099IsMasked = false;
2100
2101 {
2102 if (IsMasked) {
2103 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2104 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2105 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2106 Ops.insert(Ops.begin() + 2, Ops[1]);
2107 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2108 // maskedoff, op1, op2, mask, vl
2109 IntrinsicTypes = {ResultType,
2110 Ops[2]->getType(),
2111 Ops.back()->getType()};
2112 } else {
2113 if (PolicyAttrs & RVV_VTA)
2114 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2115 // op1, po2, vl
2116 IntrinsicTypes = {ResultType,
2117 Ops[1]->getType(), Ops[2]->getType()};
2118 Ops.insert(Ops.begin() + 2, Ops[1]);
2119 break;
2120 }
2121 break;
2122 }
2123 break;
2124case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_ta:
2125case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_ta:
2126 ID = Intrinsic::riscv_vfsgnjn;
2127 PolicyAttrs = 3;
2128 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2129 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2130 break;
2131case RISCVVector::BI__builtin_rvv_vfneg_v_tum:
2132 ID = Intrinsic::riscv_vfsgnjn_mask;
2133 PolicyAttrs = 2;
2134IsMasked = true;
2135
2136 {
2137 if (IsMasked) {
2138 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2139 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2140 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2141 Ops.insert(Ops.begin() + 2, Ops[1]);
2142 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2143 // maskedoff, op1, op2, mask, vl
2144 IntrinsicTypes = {ResultType,
2145 Ops[2]->getType(),
2146 Ops.back()->getType()};
2147 } else {
2148 if (PolicyAttrs & RVV_VTA)
2149 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2150 // op1, po2, vl
2151 IntrinsicTypes = {ResultType,
2152 Ops[1]->getType(), Ops[2]->getType()};
2153 Ops.insert(Ops.begin() + 2, Ops[1]);
2154 break;
2155 }
2156 break;
2157 }
2158 break;
2159case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tum:
2160case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tum:
2161 ID = Intrinsic::riscv_vfsgnjn_mask;
2162 PolicyAttrs = 2;
2163 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2164 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2165 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2166 break;
2167case RISCVVector::BI__builtin_rvv_vfneg_v_tama:
2168 ID = Intrinsic::riscv_vfsgnjn_mask;
2169 PolicyAttrs = 3;
2170IsMasked = true;
2171
2172 {
2173 if (IsMasked) {
2174 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2175 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2176 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2177 Ops.insert(Ops.begin() + 2, Ops[1]);
2178 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2179 // maskedoff, op1, op2, mask, vl
2180 IntrinsicTypes = {ResultType,
2181 Ops[2]->getType(),
2182 Ops.back()->getType()};
2183 } else {
2184 if (PolicyAttrs & RVV_VTA)
2185 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2186 // op1, po2, vl
2187 IntrinsicTypes = {ResultType,
2188 Ops[1]->getType(), Ops[2]->getType()};
2189 Ops.insert(Ops.begin() + 2, Ops[1]);
2190 break;
2191 }
2192 break;
2193 }
2194 break;
2195case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tama:
2196case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tama:
2197 ID = Intrinsic::riscv_vfsgnjn_mask;
2198 PolicyAttrs = 3;
2199 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2200 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2201 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2202 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2203 break;
2204case RISCVVector::BI__builtin_rvv_vfneg_v_tumu:
2205 ID = Intrinsic::riscv_vfsgnjn_mask;
2206 PolicyAttrs = 0;
2207IsMasked = true;
2208
2209 {
2210 if (IsMasked) {
2211 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2212 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2213 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2214 Ops.insert(Ops.begin() + 2, Ops[1]);
2215 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2216 // maskedoff, op1, op2, mask, vl
2217 IntrinsicTypes = {ResultType,
2218 Ops[2]->getType(),
2219 Ops.back()->getType()};
2220 } else {
2221 if (PolicyAttrs & RVV_VTA)
2222 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2223 // op1, po2, vl
2224 IntrinsicTypes = {ResultType,
2225 Ops[1]->getType(), Ops[2]->getType()};
2226 Ops.insert(Ops.begin() + 2, Ops[1]);
2227 break;
2228 }
2229 break;
2230 }
2231 break;
2232case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tumu:
2233case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tumu:
2234 ID = Intrinsic::riscv_vfsgnjn_mask;
2235 PolicyAttrs = 0;
2236 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2237 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2238 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2239 break;
2240case RISCVVector::BI__builtin_rvv_vfneg_v_mu:
2241 ID = Intrinsic::riscv_vfsgnjn_mask;
2242 PolicyAttrs = 1;
2243IsMasked = true;
2244
2245 {
2246 if (IsMasked) {
2247 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2248 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2249 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2250 Ops.insert(Ops.begin() + 2, Ops[1]);
2251 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2252 // maskedoff, op1, op2, mask, vl
2253 IntrinsicTypes = {ResultType,
2254 Ops[2]->getType(),
2255 Ops.back()->getType()};
2256 } else {
2257 if (PolicyAttrs & RVV_VTA)
2258 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2259 // op1, po2, vl
2260 IntrinsicTypes = {ResultType,
2261 Ops[1]->getType(), Ops[2]->getType()};
2262 Ops.insert(Ops.begin() + 2, Ops[1]);
2263 break;
2264 }
2265 break;
2266 }
2267 break;
2268case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_mu:
2269case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_mu:
2270 ID = Intrinsic::riscv_vfsgnjn_mask;
2271 PolicyAttrs = 1;
2272 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2273 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2274 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
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_vle8ff_v_tu:
3543case RISCVVector::BI__builtin_rvv_vle16ff_v_tu:
3544case RISCVVector::BI__builtin_rvv_vle32ff_v_tu:
3545case RISCVVector::BI__builtin_rvv_vle64ff_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_vle8ff_v_ta:
3581case RISCVVector::BI__builtin_rvv_vle16ff_v_ta:
3582case RISCVVector::BI__builtin_rvv_vle32ff_v_ta:
3583case RISCVVector::BI__builtin_rvv_vle64ff_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_vle8ff_v_tum:
3619case RISCVVector::BI__builtin_rvv_vle16ff_v_tum:
3620case RISCVVector::BI__builtin_rvv_vle32ff_v_tum:
3621case RISCVVector::BI__builtin_rvv_vle64ff_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_vle8ff_v_tama:
3657case RISCVVector::BI__builtin_rvv_vle16ff_v_tama:
3658case RISCVVector::BI__builtin_rvv_vle32ff_v_tama:
3659case RISCVVector::BI__builtin_rvv_vle64ff_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_vle8ff_v_tumu:
3695case RISCVVector::BI__builtin_rvv_vle16ff_v_tumu:
3696case RISCVVector::BI__builtin_rvv_vle32ff_v_tumu:
3697case RISCVVector::BI__builtin_rvv_vle64ff_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_vle8ff_v_mu:
3733case RISCVVector::BI__builtin_rvv_vle16ff_v_mu:
3734case RISCVVector::BI__builtin_rvv_vle32ff_v_mu:
3735case RISCVVector::BI__builtin_rvv_vle64ff_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_vloxseg2ei8_v_tu:
3841case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tu:
3842case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tu:
3843case RISCVVector::BI__builtin_rvv_vloxseg2ei64_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_vloxseg2ei8_v_ta:
3891case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_ta:
3892case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_ta:
3893case RISCVVector::BI__builtin_rvv_vloxseg2ei64_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_vloxseg2ei8_v_tum:
3941case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tum:
3942case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tum:
3943case RISCVVector::BI__builtin_rvv_vloxseg2ei64_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_vloxseg2ei8_v_tama:
3991case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tama:
3992case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tama:
3993case RISCVVector::BI__builtin_rvv_vloxseg2ei64_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_vloxseg2ei8_v_tumu:
4041case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tumu:
4042case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tumu:
4043case RISCVVector::BI__builtin_rvv_vloxseg2ei64_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_vloxseg2ei8_v_mu:
4091case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_mu:
4092case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_mu:
4093case RISCVVector::BI__builtin_rvv_vloxseg2ei64_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_vlse8_v_tu:
5941case RISCVVector::BI__builtin_rvv_vlse16_v_tu:
5942case RISCVVector::BI__builtin_rvv_vlse32_v_tu:
5943case RISCVVector::BI__builtin_rvv_vlse64_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_vlse8_v_ta:
5950case RISCVVector::BI__builtin_rvv_vlse16_v_ta:
5951case RISCVVector::BI__builtin_rvv_vlse32_v_ta:
5952case RISCVVector::BI__builtin_rvv_vlse64_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_vlse8_v_tum:
5960case RISCVVector::BI__builtin_rvv_vlse16_v_tum:
5961case RISCVVector::BI__builtin_rvv_vlse32_v_tum:
5962case RISCVVector::BI__builtin_rvv_vlse64_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_vlse8_v_tama:
5971case RISCVVector::BI__builtin_rvv_vlse16_v_tama:
5972case RISCVVector::BI__builtin_rvv_vlse32_v_tama:
5973case RISCVVector::BI__builtin_rvv_vlse64_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_vlse8_v_tumu:
5983case RISCVVector::BI__builtin_rvv_vlse16_v_tumu:
5984case RISCVVector::BI__builtin_rvv_vlse32_v_tumu:
5985case RISCVVector::BI__builtin_rvv_vlse64_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_vlse8_v_mu:
5994case RISCVVector::BI__builtin_rvv_vlse16_v_mu:
5995case RISCVVector::BI__builtin_rvv_vlse32_v_mu:
5996case RISCVVector::BI__builtin_rvv_vlse64_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_vlseg2e8ff_v_tu:
6293case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tu:
6294case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tu:
6295case RISCVVector::BI__builtin_rvv_vlseg2e64ff_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_vlseg2e8ff_v_ta:
6343case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_ta:
6344case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_ta:
6345case RISCVVector::BI__builtin_rvv_vlseg2e64ff_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_vlseg2e8ff_v_tum:
6393case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tum:
6394case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tum:
6395case RISCVVector::BI__builtin_rvv_vlseg2e64ff_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_vlseg2e8ff_v_tama:
6443case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tama:
6444case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tama:
6445case RISCVVector::BI__builtin_rvv_vlseg2e64ff_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_vlseg2e8ff_v_tumu:
6493case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tumu:
6494case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tumu:
6495case RISCVVector::BI__builtin_rvv_vlseg2e64ff_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_vlseg2e8ff_v_mu:
6543case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_mu:
6544case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_mu:
6545case RISCVVector::BI__builtin_rvv_vlseg2e64ff_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_vlsseg2e8_v_tu:
10121case RISCVVector::BI__builtin_rvv_vlsseg2e16_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_vlsseg2e8_v_ta:
10171case RISCVVector::BI__builtin_rvv_vlsseg2e16_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_vlsseg2e8_v_tum:
10221case RISCVVector::BI__builtin_rvv_vlsseg2e16_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_vlsseg2e8_v_tama:
10271case RISCVVector::BI__builtin_rvv_vlsseg2e16_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_vlsseg2e8_v_tumu:
10321case RISCVVector::BI__builtin_rvv_vlsseg2e16_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_vlsseg2e8_v_mu:
10371case RISCVVector::BI__builtin_rvv_vlsseg2e16_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;
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;
Value stored to 'PolicyAttrs' is never read
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_vncvt_x_x_w_tu:
15625 ID = Intrinsic::riscv_vnsrl;
15626 PolicyAttrs = 2;
15627IsMasked = false;
15628
15629 {
15630 if (IsMasked) {
15631 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15632 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15633 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15634 } else {
15635 if (PolicyAttrs & RVV_VTA)
15636 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15637 }
15638 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15639 if (IsMasked) {
15640 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15641 // maskedoff, op1, xlen, mask, vl
15642 IntrinsicTypes = {ResultType,
15643 Ops[1]->getType(),
15644 Ops[4]->getType(),
15645 Ops[4]->getType()};
15646 } else {
15647 // passthru, op1, xlen, vl
15648 IntrinsicTypes = {ResultType,
15649 Ops[1]->getType(),
15650 Ops[3]->getType(),
15651 Ops[3]->getType()};
15652 }
15653 break;
15654 }
15655 break;
15656case RISCVVector::BI__builtin_rvv_vnsrl_wv_tu:
15657case RISCVVector::BI__builtin_rvv_vnsrl_wx_tu:
15658 ID = Intrinsic::riscv_vnsrl;
15659 PolicyAttrs = 2;
15660 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15661 break;
15662 ID = Intrinsic::riscv_vnsrl;
15663 PolicyAttrs = 2;
15664IsMasked = false;
15665
15666 {
15667 if (IsMasked) {
15668 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15669 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15670 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15671 } else {
15672 if (PolicyAttrs & RVV_VTA)
15673 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15674 }
15675 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15676 if (IsMasked) {
15677 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15678 // maskedoff, op1, xlen, mask, vl
15679 IntrinsicTypes = {ResultType,
15680 Ops[1]->getType(),
15681 Ops[4]->getType(),
15682 Ops[4]->getType()};
15683 } else {
15684 // passthru, op1, xlen, vl
15685 IntrinsicTypes = {ResultType,
15686 Ops[1]->getType(),
15687 Ops[3]->getType(),
15688 Ops[3]->getType()};
15689 }
15690 break;
15691 }
15692 break;
15693case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_ta:
15694 ID = Intrinsic::riscv_vnsrl;
15695 PolicyAttrs = 3;
15696IsMasked = false;
15697
15698 {
15699 if (IsMasked) {
15700 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15701 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15702 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15703 } else {
15704 if (PolicyAttrs & RVV_VTA)
15705 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15706 }
15707 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15708 if (IsMasked) {
15709 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15710 // maskedoff, op1, xlen, mask, vl
15711 IntrinsicTypes = {ResultType,
15712 Ops[1]->getType(),
15713 Ops[4]->getType(),
15714 Ops[4]->getType()};
15715 } else {
15716 // passthru, op1, xlen, vl
15717 IntrinsicTypes = {ResultType,
15718 Ops[1]->getType(),
15719 Ops[3]->getType(),
15720 Ops[3]->getType()};
15721 }
15722 break;
15723 }
15724 break;
15725case RISCVVector::BI__builtin_rvv_vnsrl_wv_ta:
15726case RISCVVector::BI__builtin_rvv_vnsrl_wx_ta:
15727 ID = Intrinsic::riscv_vnsrl;
15728 PolicyAttrs = 3;
15729 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15730 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15731 break;
15732 ID = Intrinsic::riscv_vnsrl;
15733 PolicyAttrs = 3;
15734IsMasked = false;
15735
15736 {
15737 if (IsMasked) {
15738 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15739 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15740 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15741 } else {
15742 if (PolicyAttrs & RVV_VTA)
15743 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15744 }
15745 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15746 if (IsMasked) {
15747 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15748 // maskedoff, op1, xlen, mask, vl
15749 IntrinsicTypes = {ResultType,
15750 Ops[1]->getType(),
15751 Ops[4]->getType(),
15752 Ops[4]->getType()};
15753 } else {
15754 // passthru, op1, xlen, vl
15755 IntrinsicTypes = {ResultType,
15756 Ops[1]->getType(),
15757 Ops[3]->getType(),
15758 Ops[3]->getType()};
15759 }
15760 break;
15761 }
15762 break;
15763case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tum:
15764 ID = Intrinsic::riscv_vnsrl_mask;
15765 PolicyAttrs = 2;
15766IsMasked = true;
15767
15768 {
15769 if (IsMasked) {
15770 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15771 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15772 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15773 } else {
15774 if (PolicyAttrs & RVV_VTA)
15775 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15776 }
15777 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15778 if (IsMasked) {
15779 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15780 // maskedoff, op1, xlen, mask, vl
15781 IntrinsicTypes = {ResultType,
15782 Ops[1]->getType(),
15783 Ops[4]->getType(),
15784 Ops[4]->getType()};
15785 } else {
15786 // passthru, op1, xlen, vl
15787 IntrinsicTypes = {ResultType,
15788 Ops[1]->getType(),
15789 Ops[3]->getType(),
15790 Ops[3]->getType()};
15791 }
15792 break;
15793 }
15794 break;
15795case RISCVVector::BI__builtin_rvv_vnsrl_wv_tum:
15796case RISCVVector::BI__builtin_rvv_vnsrl_wx_tum:
15797 ID = Intrinsic::riscv_vnsrl_mask;
15798 PolicyAttrs = 2;
15799 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15800 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15801 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15802 break;
15803 ID = Intrinsic::riscv_vnsrl_mask;
15804 PolicyAttrs = 2;
15805IsMasked = true;
15806
15807 {
15808 if (IsMasked) {
15809 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15810 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15811 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15812 } else {
15813 if (PolicyAttrs & RVV_VTA)
15814 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15815 }
15816 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15817 if (IsMasked) {
15818 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15819 // maskedoff, op1, xlen, mask, vl
15820 IntrinsicTypes = {ResultType,
15821 Ops[1]->getType(),
15822 Ops[4]->getType(),
15823 Ops[4]->getType()};
15824 } else {
15825 // passthru, op1, xlen, vl
15826 IntrinsicTypes = {ResultType,
15827 Ops[1]->getType(),
15828 Ops[3]->getType(),
15829 Ops[3]->getType()};
15830 }
15831 break;
15832 }
15833 break;
15834case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tama:
15835 ID = Intrinsic::riscv_vnsrl_mask;
15836 PolicyAttrs = 3;
15837IsMasked = true;
15838
15839 {
15840 if (IsMasked) {
15841 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15842 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15843 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15844 } else {
15845 if (PolicyAttrs & RVV_VTA)
15846 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15847 }
15848 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15849 if (IsMasked) {
15850 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15851 // maskedoff, op1, xlen, mask, vl
15852 IntrinsicTypes = {ResultType,
15853 Ops[1]->getType(),
15854 Ops[4]->getType(),
15855 Ops[4]->getType()};
15856 } else {
15857 // passthru, op1, xlen, vl
15858 IntrinsicTypes = {ResultType,
15859 Ops[1]->getType(),
15860 Ops[3]->getType(),
15861 Ops[3]->getType()};
15862 }
15863 break;
15864 }
15865 break;
15866case RISCVVector::BI__builtin_rvv_vnsrl_wv_tama:
15867case RISCVVector::BI__builtin_rvv_vnsrl_wx_tama:
15868 ID = Intrinsic::riscv_vnsrl_mask;
15869 PolicyAttrs = 3;
15870 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15871 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15872 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15873 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15874 break;
15875 ID = Intrinsic::riscv_vnsrl_mask;
15876 PolicyAttrs = 3;
15877IsMasked = true;
15878
15879 {
15880 if (IsMasked) {
15881 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15882 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15883 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15884 } else {
15885 if (PolicyAttrs & RVV_VTA)
15886 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15887 }
15888 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15889 if (IsMasked) {
15890 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15891 // maskedoff, op1, xlen, mask, vl
15892 IntrinsicTypes = {ResultType,
15893 Ops[1]->getType(),
15894 Ops[4]->getType(),
15895 Ops[4]->getType()};
15896 } else {
15897 // passthru, op1, xlen, vl
15898 IntrinsicTypes = {ResultType,
15899 Ops[1]->getType(),
15900 Ops[3]->getType(),
15901 Ops[3]->getType()};
15902 }
15903 break;
15904 }
15905 break;
15906case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tumu:
15907 ID = Intrinsic::riscv_vnsrl_mask;
15908 PolicyAttrs = 0;
15909IsMasked = true;
15910
15911 {
15912 if (IsMasked) {
15913 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15914 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15915 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15916 } else {
15917 if (PolicyAttrs & RVV_VTA)
15918 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15919 }
15920 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15921 if (IsMasked) {
15922 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15923 // maskedoff, op1, xlen, mask, vl
15924 IntrinsicTypes = {ResultType,
15925 Ops[1]->getType(),
15926 Ops[4]->getType(),
15927 Ops[4]->getType()};
15928 } else {
15929 // passthru, op1, xlen, vl
15930 IntrinsicTypes = {ResultType,
15931 Ops[1]->getType(),
15932 Ops[3]->getType(),
15933 Ops[3]->getType()};
15934 }
15935 break;
15936 }
15937 break;
15938case RISCVVector::BI__builtin_rvv_vnsrl_wv_tumu:
15939case RISCVVector::BI__builtin_rvv_vnsrl_wx_tumu:
15940 ID = Intrinsic::riscv_vnsrl_mask;
15941 PolicyAttrs = 0;
15942 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15943 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15944 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15945 break;
15946 ID = Intrinsic::riscv_vnsrl_mask;
15947 PolicyAttrs = 0;
15948IsMasked = true;
15949
15950 {
15951 if (IsMasked) {
15952 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15953 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15954 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15955 } else {
15956 if (PolicyAttrs & RVV_VTA)
15957 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15958 }
15959 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15960 if (IsMasked) {
15961 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15962 // maskedoff, op1, xlen, mask, vl
15963 IntrinsicTypes = {ResultType,
15964 Ops[1]->getType(),
15965 Ops[4]->getType(),
15966 Ops[4]->getType()};
15967 } else {
15968 // passthru, op1, xlen, vl
15969 IntrinsicTypes = {ResultType,
15970 Ops[1]->getType(),
15971 Ops[3]->getType(),
15972 Ops[3]->getType()};
15973 }
15974 break;
15975 }
15976 break;
15977case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_mu:
15978 ID = Intrinsic::riscv_vnsrl_mask;
15979 PolicyAttrs = 1;
15980IsMasked = true;
15981
15982 {
15983 if (IsMasked) {
15984 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15985 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15986 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15987 } else {
15988 if (PolicyAttrs & RVV_VTA)
15989 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15990 }
15991 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15992 if (IsMasked) {
15993 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15994 // maskedoff, op1, xlen, mask, vl
15995 IntrinsicTypes = {ResultType,
15996 Ops[1]->getType(),
15997 Ops[4]->getType(),
15998 Ops[4]->getType()};
15999 } else {
16000 // passthru, op1, xlen, vl
16001 IntrinsicTypes = {ResultType,
16002 Ops[1]->getType(),
16003 Ops[3]->getType(),
16004 Ops[3]->getType()};
16005 }
16006 break;
16007 }
16008 break;
16009case RISCVVector::BI__builtin_rvv_vnsrl_wv_mu:
16010case RISCVVector::BI__builtin_rvv_vnsrl_wx_mu:
16011 ID = Intrinsic::riscv_vnsrl_mask;
16012 PolicyAttrs = 1;
16013 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16014 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16015 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
16016 break;
16017 ID = Intrinsic::riscv_vnsrl_mask;
16018 PolicyAttrs = 1;
16019IsMasked = true;
16020
16021 {
16022 if (IsMasked) {
16023 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16024 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16025 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16026 } else {
16027 if (PolicyAttrs & RVV_VTA)
16028 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16029 }
16030 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
16031 if (IsMasked) {
16032 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16033 // maskedoff, op1, xlen, mask, vl
16034 IntrinsicTypes = {ResultType,
16035 Ops[1]->getType(),
16036 Ops[4]->getType(),
16037 Ops[4]->getType()};
16038 } else {
16039 // passthru, op1, xlen, vl
16040 IntrinsicTypes = {ResultType,
16041 Ops[1]->getType(),
16042 Ops[3]->getType(),
16043 Ops[3]->getType()};
16044 }
16045 break;
16046 }
16047 break;
16048case RISCVVector::BI__builtin_rvv_vor_vv_tu:
16049case RISCVVector::BI__builtin_rvv_vor_vx_tu:
16050 ID = Intrinsic::riscv_vor;
16051 PolicyAttrs = 2;
16052 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16053 break;
16054case RISCVVector::BI__builtin_rvv_vor_vv_ta:
16055case RISCVVector::BI__builtin_rvv_vor_vx_ta:
16056 ID = Intrinsic::riscv_vor;
16057 PolicyAttrs = 3;
16058 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16059 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16060 break;
16061case RISCVVector::BI__builtin_rvv_vor_vv_tum:
16062case RISCVVector::BI__builtin_rvv_vor_vx_tum:
16063 ID = Intrinsic::riscv_vor_mask;
16064 PolicyAttrs = 2;
16065 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16066 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16067 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16068 break;
16069case RISCVVector::BI__builtin_rvv_vor_vv_tama:
16070case RISCVVector::BI__builtin_rvv_vor_vx_tama:
16071 ID = Intrinsic::riscv_vor_mask;
16072 PolicyAttrs = 3;
16073 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16074 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16075 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16076 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16077 break;
16078case RISCVVector::BI__builtin_rvv_vor_vv_tumu:
16079case RISCVVector::BI__builtin_rvv_vor_vx_tumu:
16080 ID = Intrinsic::riscv_vor_mask;
16081 PolicyAttrs = 0;
16082 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16083 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16084 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16085 break;
16086case RISCVVector::BI__builtin_rvv_vor_vv_mu:
16087case RISCVVector::BI__builtin_rvv_vor_vx_mu:
16088 ID = Intrinsic::riscv_vor_mask;
16089 PolicyAttrs = 1;
16090 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16091 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16092 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16093 break;
16094case RISCVVector::BI__builtin_rvv_vredand_vs_tu:
16095 ID = Intrinsic::riscv_vredand;
16096 PolicyAttrs = 2;
16097 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16098 break;
16099case RISCVVector::BI__builtin_rvv_vredand_vs_ta:
16100 ID = Intrinsic::riscv_vredand;
16101 PolicyAttrs = 3;
16102 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16103 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16104 break;
16105case RISCVVector::BI__builtin_rvv_vredand_vs_tum:
16106 ID = Intrinsic::riscv_vredand_mask;
16107 PolicyAttrs = 2;
16108 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16109 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16110 break;
16111case RISCVVector::BI__builtin_rvv_vredand_vs_tama:
16112 ID = Intrinsic::riscv_vredand_mask;
16113 PolicyAttrs = 3;
16114 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16115 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16116 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16117 break;
16118case RISCVVector::BI__builtin_rvv_vredmax_vs_tu:
16119 ID = Intrinsic::riscv_vredmax;
16120 PolicyAttrs = 2;
16121 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16122 break;
16123case RISCVVector::BI__builtin_rvv_vredmax_vs_ta:
16124 ID = Intrinsic::riscv_vredmax;
16125 PolicyAttrs = 3;
16126 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16127 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16128 break;
16129case RISCVVector::BI__builtin_rvv_vredmax_vs_tum:
16130 ID = Intrinsic::riscv_vredmax_mask;
16131 PolicyAttrs = 2;
16132 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16133 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16134 break;
16135case RISCVVector::BI__builtin_rvv_vredmax_vs_tama:
16136 ID = Intrinsic::riscv_vredmax_mask;
16137 PolicyAttrs = 3;
16138 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16139 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16140 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16141 break;
16142case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tu:
16143 ID = Intrinsic::riscv_vredmaxu;
16144 PolicyAttrs = 2;
16145 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16146 break;
16147case RISCVVector::BI__builtin_rvv_vredmaxu_vs_ta:
16148 ID = Intrinsic::riscv_vredmaxu;
16149 PolicyAttrs = 3;
16150 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16151 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16152 break;
16153case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tum:
16154 ID = Intrinsic::riscv_vredmaxu_mask;
16155 PolicyAttrs = 2;
16156 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16157 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16158 break;
16159case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tama:
16160 ID = Intrinsic::riscv_vredmaxu_mask;
16161 PolicyAttrs = 3;
16162 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16163 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16164 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16165 break;
16166case RISCVVector::BI__builtin_rvv_vredmin_vs_tu:
16167 ID = Intrinsic::riscv_vredmin;
16168 PolicyAttrs = 2;
16169 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16170 break;
16171case RISCVVector::BI__builtin_rvv_vredmin_vs_ta:
16172 ID = Intrinsic::riscv_vredmin;
16173 PolicyAttrs = 3;
16174 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16175 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16176 break;
16177case RISCVVector::BI__builtin_rvv_vredmin_vs_tum:
16178 ID = Intrinsic::riscv_vredmin_mask;
16179 PolicyAttrs = 2;
16180 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16181 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16182 break;
16183case RISCVVector::BI__builtin_rvv_vredmin_vs_tama:
16184 ID = Intrinsic::riscv_vredmin_mask;
16185 PolicyAttrs = 3;
16186 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16187 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16188 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16189 break;
16190case RISCVVector::BI__builtin_rvv_vredminu_vs_tu:
16191 ID = Intrinsic::riscv_vredminu;
16192 PolicyAttrs = 2;
16193 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16194 break;
16195case RISCVVector::BI__builtin_rvv_vredminu_vs_ta:
16196 ID = Intrinsic::riscv_vredminu;
16197 PolicyAttrs = 3;
16198 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16199 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16200 break;
16201case RISCVVector::BI__builtin_rvv_vredminu_vs_tum:
16202 ID = Intrinsic::riscv_vredminu_mask;
16203 PolicyAttrs = 2;
16204 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16205 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16206 break;
16207case RISCVVector::BI__builtin_rvv_vredminu_vs_tama:
16208 ID = Intrinsic::riscv_vredminu_mask;
16209 PolicyAttrs = 3;
16210 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16211 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16212 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16213 break;
16214case RISCVVector::BI__builtin_rvv_vredor_vs_tu:
16215 ID = Intrinsic::riscv_vredor;
16216 PolicyAttrs = 2;
16217 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16218 break;
16219case RISCVVector::BI__builtin_rvv_vredor_vs_ta:
16220 ID = Intrinsic::riscv_vredor;
16221 PolicyAttrs = 3;
16222 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16223 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16224 break;
16225case RISCVVector::BI__builtin_rvv_vredor_vs_tum:
16226 ID = Intrinsic::riscv_vredor_mask;
16227 PolicyAttrs = 2;
16228 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16229 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16230 break;
16231case RISCVVector::BI__builtin_rvv_vredor_vs_tama:
16232 ID = Intrinsic::riscv_vredor_mask;
16233 PolicyAttrs = 3;
16234 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16235 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16236 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16237 break;
16238case RISCVVector::BI__builtin_rvv_vredsum_vs_tu:
16239 ID = Intrinsic::riscv_vredsum;
16240 PolicyAttrs = 2;
16241 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16242 break;
16243case RISCVVector::BI__builtin_rvv_vredsum_vs_ta:
16244 ID = Intrinsic::riscv_vredsum;
16245 PolicyAttrs = 3;
16246 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16247 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16248 break;
16249case RISCVVector::BI__builtin_rvv_vredsum_vs_tum:
16250 ID = Intrinsic::riscv_vredsum_mask;
16251 PolicyAttrs = 2;
16252 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16253 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16254 break;
16255case RISCVVector::BI__builtin_rvv_vredsum_vs_tama:
16256 ID = Intrinsic::riscv_vredsum_mask;
16257 PolicyAttrs = 3;
16258 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16259 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16260 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16261 break;
16262case RISCVVector::BI__builtin_rvv_vredxor_vs_tu:
16263 ID = Intrinsic::riscv_vredxor;
16264 PolicyAttrs = 2;
16265 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16266 break;
16267case RISCVVector::BI__builtin_rvv_vredxor_vs_ta:
16268 ID = Intrinsic::riscv_vredxor;
16269 PolicyAttrs = 3;
16270 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16271 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16272 break;
16273case RISCVVector::BI__builtin_rvv_vredxor_vs_tum:
16274 ID = Intrinsic::riscv_vredxor_mask;
16275 PolicyAttrs = 2;
16276 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16277 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16278 break;
16279case RISCVVector::BI__builtin_rvv_vredxor_vs_tama:
16280 ID = Intrinsic::riscv_vredxor_mask;
16281 PolicyAttrs = 3;
16282 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16283 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16284 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16285 break;
16286case RISCVVector::BI__builtin_rvv_vrem_vv_tu:
16287case RISCVVector::BI__builtin_rvv_vrem_vx_tu:
16288 ID = Intrinsic::riscv_vrem;
16289 PolicyAttrs = 2;
16290 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16291 break;
16292case RISCVVector::BI__builtin_rvv_vrem_vv_ta:
16293case RISCVVector::BI__builtin_rvv_vrem_vx_ta:
16294 ID = Intrinsic::riscv_vrem;
16295 PolicyAttrs = 3;
16296 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16297 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16298 break;
16299case RISCVVector::BI__builtin_rvv_vrem_vv_tum:
16300case RISCVVector::BI__builtin_rvv_vrem_vx_tum:
16301 ID = Intrinsic::riscv_vrem_mask;
16302 PolicyAttrs = 2;
16303 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16304 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16305 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16306 break;
16307case RISCVVector::BI__builtin_rvv_vrem_vv_tama:
16308case RISCVVector::BI__builtin_rvv_vrem_vx_tama:
16309 ID = Intrinsic::riscv_vrem_mask;
16310 PolicyAttrs = 3;
16311 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16312 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16313 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16314 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16315 break;
16316case RISCVVector::BI__builtin_rvv_vrem_vv_tumu:
16317case RISCVVector::BI__builtin_rvv_vrem_vx_tumu:
16318 ID = Intrinsic::riscv_vrem_mask;
16319 PolicyAttrs = 0;
16320 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16321 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16322 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16323 break;
16324case RISCVVector::BI__builtin_rvv_vrem_vv_mu:
16325case RISCVVector::BI__builtin_rvv_vrem_vx_mu:
16326 ID = Intrinsic::riscv_vrem_mask;
16327 PolicyAttrs = 1;
16328 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16329 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16330 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16331 break;
16332case RISCVVector::BI__builtin_rvv_vremu_vv_tu:
16333case RISCVVector::BI__builtin_rvv_vremu_vx_tu:
16334 ID = Intrinsic::riscv_vremu;
16335 PolicyAttrs = 2;
16336 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16337 break;
16338case RISCVVector::BI__builtin_rvv_vremu_vv_ta:
16339case RISCVVector::BI__builtin_rvv_vremu_vx_ta:
16340 ID = Intrinsic::riscv_vremu;
16341 PolicyAttrs = 3;
16342 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16343 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16344 break;
16345case RISCVVector::BI__builtin_rvv_vremu_vv_tum:
16346case RISCVVector::BI__builtin_rvv_vremu_vx_tum:
16347 ID = Intrinsic::riscv_vremu_mask;
16348 PolicyAttrs = 2;
16349 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16350 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16351 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16352 break;
16353case RISCVVector::BI__builtin_rvv_vremu_vv_tama:
16354case RISCVVector::BI__builtin_rvv_vremu_vx_tama:
16355 ID = Intrinsic::riscv_vremu_mask;
16356 PolicyAttrs = 3;
16357 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16358 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16359 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16360 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16361 break;
16362case RISCVVector::BI__builtin_rvv_vremu_vv_tumu:
16363case RISCVVector::BI__builtin_rvv_vremu_vx_tumu:
16364 ID = Intrinsic::riscv_vremu_mask;
16365 PolicyAttrs = 0;
16366 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16367 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16368 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16369 break;
16370case RISCVVector::BI__builtin_rvv_vremu_vv_mu:
16371case RISCVVector::BI__builtin_rvv_vremu_vx_mu:
16372 ID = Intrinsic::riscv_vremu_mask;
16373 PolicyAttrs = 1;
16374 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16375 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16376 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16377 break;
16378case RISCVVector::BI__builtin_rvv_vrgather_vv_tu:
16379 ID = Intrinsic::riscv_vrgather_vv;
16380 PolicyAttrs = 2;
16381 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16382 break;
16383case RISCVVector::BI__builtin_rvv_vrgather_vv_ta:
16384 ID = Intrinsic::riscv_vrgather_vv;
16385 PolicyAttrs = 3;
16386 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16387 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16388 break;
16389case RISCVVector::BI__builtin_rvv_vrgather_vv_tum:
16390 ID = Intrinsic::riscv_vrgather_vv_mask;
16391 PolicyAttrs = 2;
16392 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16393 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16394 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16395 break;
16396case RISCVVector::BI__builtin_rvv_vrgather_vv_tama:
16397 ID = Intrinsic::riscv_vrgather_vv_mask;
16398 PolicyAttrs = 3;
16399 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16400 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16401 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16402 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16403 break;
16404case RISCVVector::BI__builtin_rvv_vrgather_vv_tumu:
16405 ID = Intrinsic::riscv_vrgather_vv_mask;
16406 PolicyAttrs = 0;
16407 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16408 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16409 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16410 break;
16411case RISCVVector::BI__builtin_rvv_vrgather_vv_mu:
16412 ID = Intrinsic::riscv_vrgather_vv_mask;
16413 PolicyAttrs = 1;
16414 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16415 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16416 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16417 break;
16418case RISCVVector::BI__builtin_rvv_vrgather_vx_tu:
16419 ID = Intrinsic::riscv_vrgather_vx;
16420 PolicyAttrs = 2;
16421 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16422 break;
16423case RISCVVector::BI__builtin_rvv_vrgather_vx_ta:
16424 ID = Intrinsic::riscv_vrgather_vx;
16425 PolicyAttrs = 3;
16426 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16427 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16428 break;
16429case RISCVVector::BI__builtin_rvv_vrgather_vx_tum:
16430 ID = Intrinsic::riscv_vrgather_vx_mask;
16431 PolicyAttrs = 2;
16432 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16433 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16434 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16435 break;
16436case RISCVVector::BI__builtin_rvv_vrgather_vx_tama:
16437 ID = Intrinsic::riscv_vrgather_vx_mask;
16438 PolicyAttrs = 3;
16439 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16440 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16441 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16442 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16443 break;
16444case RISCVVector::BI__builtin_rvv_vrgather_vx_tumu:
16445 ID = Intrinsic::riscv_vrgather_vx_mask;
16446 PolicyAttrs = 0;
16447 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16448 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16449 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16450 break;
16451case RISCVVector::BI__builtin_rvv_vrgather_vx_mu:
16452 ID = Intrinsic::riscv_vrgather_vx_mask;
16453 PolicyAttrs = 1;
16454 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16455 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16456 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16457 break;
16458case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tu:
16459 ID = Intrinsic::riscv_vrgatherei16_vv;
16460 PolicyAttrs = 2;
16461 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16462 break;
16463case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_ta:
16464 ID = Intrinsic::riscv_vrgatherei16_vv;
16465 PolicyAttrs = 3;
16466 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16467 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16468 break;
16469case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tum:
16470 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16471 PolicyAttrs = 2;
16472 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16473 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16474 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16475 break;
16476case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tama:
16477 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16478 PolicyAttrs = 3;
16479 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16480 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16481 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16482 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16483 break;
16484case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tumu:
16485 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16486 PolicyAttrs = 0;
16487 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16488 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16489 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16490 break;
16491case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_mu:
16492 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16493 PolicyAttrs = 1;
16494 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16495 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16496 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16497 break;
16498case RISCVVector::BI__builtin_rvv_vneg_v_tu:
16499 ID = Intrinsic::riscv_vrsub;
16500 PolicyAttrs = 2;
16501IsMasked = false;
16502
16503 {
16504 if (IsMasked) {
16505 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16506 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16507 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16508 } else {
16509 if (PolicyAttrs & RVV_VTA)
16510 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16511 }
16512 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16513 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16514
16515 if (IsMasked) {
16516 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16517 // maskedoff, op1, op2, mask, vl, policy
16518 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16519 } else {
16520 // passthru, op1, op2, vl
16521 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16522 }
16523 break;
16524 }
16525 break;
16526case RISCVVector::BI__builtin_rvv_vrsub_vx_tu:
16527 ID = Intrinsic::riscv_vrsub;
16528 PolicyAttrs = 2;
16529 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16530 break;
16531case RISCVVector::BI__builtin_rvv_vneg_v_ta:
16532 ID = Intrinsic::riscv_vrsub;
16533 PolicyAttrs = 3;
16534IsMasked = false;
16535
16536 {
16537 if (IsMasked) {
16538 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16539 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16540 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16541 } else {
16542 if (PolicyAttrs & RVV_VTA)
16543 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16544 }
16545 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16546 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16547
16548 if (IsMasked) {
16549 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16550 // maskedoff, op1, op2, mask, vl, policy
16551 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16552 } else {
16553 // passthru, op1, op2, vl
16554 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16555 }
16556 break;
16557 }
16558 break;
16559case RISCVVector::BI__builtin_rvv_vrsub_vx_ta:
16560 ID = Intrinsic::riscv_vrsub;
16561 PolicyAttrs = 3;
16562 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16563 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16564 break;
16565case RISCVVector::BI__builtin_rvv_vneg_v_tum:
16566 ID = Intrinsic::riscv_vrsub_mask;
16567 PolicyAttrs = 2;
16568IsMasked = true;
16569
16570 {
16571 if (IsMasked) {
16572 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16573 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16574 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16575 } else {
16576 if (PolicyAttrs & RVV_VTA)
16577 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16578 }
16579 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16580 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16581
16582 if (IsMasked) {
16583 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16584 // maskedoff, op1, op2, mask, vl, policy
16585 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16586 } else {
16587 // passthru, op1, op2, vl
16588 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16589 }
16590 break;
16591 }
16592 break;
16593case RISCVVector::BI__builtin_rvv_vrsub_vx_tum:
16594 ID = Intrinsic::riscv_vrsub_mask;
16595 PolicyAttrs = 2;
16596 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16597 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16598 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16599 break;
16600case RISCVVector::BI__builtin_rvv_vneg_v_tama:
16601 ID = Intrinsic::riscv_vrsub_mask;
16602 PolicyAttrs = 3;
16603IsMasked = true;
16604
16605 {
16606 if (IsMasked) {
16607 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16608 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16609 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16610 } else {
16611 if (PolicyAttrs & RVV_VTA)
16612 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16613 }
16614 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16615 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16616
16617 if (IsMasked) {
16618 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16619 // maskedoff, op1, op2, mask, vl, policy
16620 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16621 } else {
16622 // passthru, op1, op2, vl
16623 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16624 }
16625 break;
16626 }
16627 break;
16628case RISCVVector::BI__builtin_rvv_vrsub_vx_tama:
16629 ID = Intrinsic::riscv_vrsub_mask;
16630 PolicyAttrs = 3;
16631 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16632 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16633 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16634 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16635 break;
16636case RISCVVector::BI__builtin_rvv_vneg_v_tumu:
16637 ID = Intrinsic::riscv_vrsub_mask;
16638 PolicyAttrs = 0;
16639IsMasked = true;
16640
16641 {
16642 if (IsMasked) {
16643 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16644 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16645 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16646 } else {
16647 if (PolicyAttrs & RVV_VTA)
16648 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16649 }
16650 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16651 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16652
16653 if (IsMasked) {
16654 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16655 // maskedoff, op1, op2, mask, vl, policy
16656 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16657 } else {
16658 // passthru, op1, op2, vl
16659 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16660 }
16661 break;
16662 }
16663 break;
16664case RISCVVector::BI__builtin_rvv_vrsub_vx_tumu:
16665 ID = Intrinsic::riscv_vrsub_mask;
16666 PolicyAttrs = 0;
16667 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16668 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16669 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16670 break;
16671case RISCVVector::BI__builtin_rvv_vneg_v_mu:
16672 ID = Intrinsic::riscv_vrsub_mask;
16673 PolicyAttrs = 1;
16674IsMasked = true;
16675
16676 {
16677 if (IsMasked) {
16678 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16679 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16680 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16681 } else {
16682 if (PolicyAttrs & RVV_VTA)
16683 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16684 }
16685 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16686 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16687
16688 if (IsMasked) {
16689 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16690 // maskedoff, op1, op2, mask, vl, policy
16691 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16692 } else {
16693 // passthru, op1, op2, vl
16694 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16695 }
16696 break;
16697 }
16698 break;
16699case RISCVVector::BI__builtin_rvv_vrsub_vx_mu:
16700 ID = Intrinsic::riscv_vrsub_mask;
16701 PolicyAttrs = 1;
16702 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16703 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16704 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16705 break;
16706case RISCVVector::BI__builtin_rvv_vsadd_vv_tu:
16707case RISCVVector::BI__builtin_rvv_vsadd_vx_tu:
16708 ID = Intrinsic::riscv_vsadd;
16709 PolicyAttrs = 2;
16710 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16711 break;
16712case RISCVVector::BI__builtin_rvv_vsadd_vv_ta:
16713case RISCVVector::BI__builtin_rvv_vsadd_vx_ta:
16714 ID = Intrinsic::riscv_vsadd;
16715 PolicyAttrs = 3;
16716 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16717 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16718 break;
16719case RISCVVector::BI__builtin_rvv_vsadd_vv_tum:
16720case RISCVVector::BI__builtin_rvv_vsadd_vx_tum:
16721 ID = Intrinsic::riscv_vsadd_mask;
16722 PolicyAttrs = 2;
16723 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16724 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16725 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16726 break;
16727case RISCVVector::BI__builtin_rvv_vsadd_vv_tama:
16728case RISCVVector::BI__builtin_rvv_vsadd_vx_tama:
16729 ID = Intrinsic::riscv_vsadd_mask;
16730 PolicyAttrs = 3;
16731 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16732 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16733 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16734 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16735 break;
16736case RISCVVector::BI__builtin_rvv_vsadd_vv_tumu:
16737case RISCVVector::BI__builtin_rvv_vsadd_vx_tumu:
16738 ID = Intrinsic::riscv_vsadd_mask;
16739 PolicyAttrs = 0;
16740 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16741 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16742 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16743 break;
16744case RISCVVector::BI__builtin_rvv_vsadd_vv_mu:
16745case RISCVVector::BI__builtin_rvv_vsadd_vx_mu:
16746 ID = Intrinsic::riscv_vsadd_mask;
16747 PolicyAttrs = 1;
16748 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16749 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16750 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16751 break;
16752case RISCVVector::BI__builtin_rvv_vsaddu_vv_tu:
16753case RISCVVector::BI__builtin_rvv_vsaddu_vx_tu:
16754 ID = Intrinsic::riscv_vsaddu;
16755 PolicyAttrs = 2;
16756 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16757 break;
16758case RISCVVector::BI__builtin_rvv_vsaddu_vv_ta:
16759case RISCVVector::BI__builtin_rvv_vsaddu_vx_ta:
16760 ID = Intrinsic::riscv_vsaddu;
16761 PolicyAttrs = 3;
16762 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16763 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16764 break;
16765case RISCVVector::BI__builtin_rvv_vsaddu_vv_tum:
16766case RISCVVector::BI__builtin_rvv_vsaddu_vx_tum:
16767 ID = Intrinsic::riscv_vsaddu_mask;
16768 PolicyAttrs = 2;
16769 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16770 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16771 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16772 break;
16773case RISCVVector::BI__builtin_rvv_vsaddu_vv_tama:
16774case RISCVVector::BI__builtin_rvv_vsaddu_vx_tama:
16775 ID = Intrinsic::riscv_vsaddu_mask;
16776 PolicyAttrs = 3;
16777 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16778 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16779 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16780 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16781 break;
16782case RISCVVector::BI__builtin_rvv_vsaddu_vv_tumu:
16783case RISCVVector::BI__builtin_rvv_vsaddu_vx_tumu:
16784 ID = Intrinsic::riscv_vsaddu_mask;
16785 PolicyAttrs = 0;
16786 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16787 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16788 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16789 break;
16790case RISCVVector::BI__builtin_rvv_vsaddu_vv_mu:
16791case RISCVVector::BI__builtin_rvv_vsaddu_vx_mu:
16792 ID = Intrinsic::riscv_vsaddu_mask;
16793 PolicyAttrs = 1;
16794 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16795 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16796 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16797 break;
16798case RISCVVector::BI__builtin_rvv_vsbc_vvm_tu:
16799case RISCVVector::BI__builtin_rvv_vsbc_vxm_tu:
16800 ID = Intrinsic::riscv_vsbc;
16801 PolicyAttrs = 2;
16802 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16803 break;
16804case RISCVVector::BI__builtin_rvv_vsbc_vvm_ta:
16805case RISCVVector::BI__builtin_rvv_vsbc_vxm_ta:
16806 ID = Intrinsic::riscv_vsbc;
16807 PolicyAttrs = 3;
16808 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16809 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16810 break;
16811case RISCVVector::BI__builtin_rvv_vse8_v:
16812case RISCVVector::BI__builtin_rvv_vse16_v:
16813case RISCVVector::BI__builtin_rvv_vse32_v:
16814case RISCVVector::BI__builtin_rvv_vse64_v:
16815 ID = Intrinsic::riscv_vse;
16816 PolicyAttrs = 3;
16817IsMasked = false;
16818
16819 if (IsMasked) {
16820 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
16821 std::swap(Ops[0], Ops[2]);
16822 } else {
16823 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
16824 std::swap(Ops[0], Ops[1]);
16825 }
16826 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
16827 if (IsMasked)
16828 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
16829 else
16830 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
16831 break;
16832case RISCVVector::BI__builtin_rvv_vse8_v_m:
16833case RISCVVector::BI__builtin_rvv_vse16_v_m:
16834case RISCVVector::BI__builtin_rvv_vse32_v_m:
16835case RISCVVector::BI__builtin_rvv_vse64_v_m:
16836 ID = Intrinsic::riscv_vse_mask;
16837 PolicyAttrs = 3;
16838IsMasked = true;
16839
16840 if (IsMasked) {
16841 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
16842 std::swap(Ops[0], Ops[2]);
16843 } else {
16844 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
16845 std::swap(Ops[0], Ops[1]);
16846 }
16847 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
16848 if (IsMasked)
16849 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
16850 else
16851 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
16852 break;
16853case RISCVVector::BI__builtin_rvv_vsetvli:
16854 ID = Intrinsic::riscv_vsetvli;
16855 PolicyAttrs = 3;
16856IsMasked = false;
16857IntrinsicTypes = {ResultType};break;
16858case RISCVVector::BI__builtin_rvv_vsetvlimax:
16859 ID = Intrinsic::riscv_vsetvlimax;
16860 PolicyAttrs = 3;
16861IsMasked = false;
16862IntrinsicTypes = {ResultType};break;
16863case RISCVVector::BI__builtin_rvv_vsext_vf2_tu:
16864case RISCVVector::BI__builtin_rvv_vsext_vf4_tu:
16865case RISCVVector::BI__builtin_rvv_vsext_vf8_tu:
16866 ID = Intrinsic::riscv_vsext;
16867 PolicyAttrs = 2;
16868 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16869 break;
16870case RISCVVector::BI__builtin_rvv_vsext_vf2_ta:
16871case RISCVVector::BI__builtin_rvv_vsext_vf4_ta:
16872case RISCVVector::BI__builtin_rvv_vsext_vf8_ta:
16873 ID = Intrinsic::riscv_vsext;
16874 PolicyAttrs = 3;
16875 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16876 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16877 break;
16878case RISCVVector::BI__builtin_rvv_vsext_vf2_tum:
16879case RISCVVector::BI__builtin_rvv_vsext_vf4_tum:
16880case RISCVVector::BI__builtin_rvv_vsext_vf8_tum:
16881 ID = Intrinsic::riscv_vsext_mask;
16882 PolicyAttrs = 2;
16883 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16884 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16885 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16886 break;
16887case RISCVVector::BI__builtin_rvv_vsext_vf2_tama:
16888case RISCVVector::BI__builtin_rvv_vsext_vf4_tama:
16889case RISCVVector::BI__builtin_rvv_vsext_vf8_tama:
16890 ID = Intrinsic::riscv_vsext_mask;
16891 PolicyAttrs = 3;
16892 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16893 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16894 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16895 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16896 break;
16897case RISCVVector::BI__builtin_rvv_vsext_vf2_tumu:
16898case RISCVVector::BI__builtin_rvv_vsext_vf4_tumu:
16899case RISCVVector::BI__builtin_rvv_vsext_vf8_tumu:
16900 ID = Intrinsic::riscv_vsext_mask;
16901 PolicyAttrs = 0;
16902 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16903 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16904 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16905 break;
16906case RISCVVector::BI__builtin_rvv_vsext_vf2_mu:
16907case RISCVVector::BI__builtin_rvv_vsext_vf4_mu:
16908case RISCVVector::BI__builtin_rvv_vsext_vf8_mu:
16909 ID = Intrinsic::riscv_vsext_mask;
16910 PolicyAttrs = 1;
16911 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16912 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16913 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16914 break;
16915case RISCVVector::BI__builtin_rvv_vslide1down_vx_tu:
16916 ID = Intrinsic::riscv_vslide1down;
16917 PolicyAttrs = 2;
16918 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16919 break;
16920case RISCVVector::BI__builtin_rvv_vslide1down_vx_ta:
16921 ID = Intrinsic::riscv_vslide1down;
16922 PolicyAttrs = 3;
16923 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16924 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16925 break;
16926case RISCVVector::BI__builtin_rvv_vslide1down_vx_tum:
16927 ID = Intrinsic::riscv_vslide1down_mask;
16928 PolicyAttrs = 2;
16929 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16930 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16931 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16932 break;
16933case RISCVVector::BI__builtin_rvv_vslide1down_vx_tama:
16934 ID = Intrinsic::riscv_vslide1down_mask;
16935 PolicyAttrs = 3;
16936 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16937 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16938 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16939 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16940 break;
16941case RISCVVector::BI__builtin_rvv_vslide1down_vx_tumu:
16942 ID = Intrinsic::riscv_vslide1down_mask;
16943 PolicyAttrs = 0;
16944 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16945 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16946 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16947 break;
16948case RISCVVector::BI__builtin_rvv_vslide1down_vx_mu:
16949 ID = Intrinsic::riscv_vslide1down_mask;
16950 PolicyAttrs = 1;
16951 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16952 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16953 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16954 break;
16955case RISCVVector::BI__builtin_rvv_vslide1up_vx_tu:
16956 ID = Intrinsic::riscv_vslide1up;
16957 PolicyAttrs = 2;
16958 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16959 break;
16960case RISCVVector::BI__builtin_rvv_vslide1up_vx_ta:
16961 ID = Intrinsic::riscv_vslide1up;
16962 PolicyAttrs = 3;
16963 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16964 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16965 break;
16966case RISCVVector::BI__builtin_rvv_vslide1up_vx_tum:
16967 ID = Intrinsic::riscv_vslide1up_mask;
16968 PolicyAttrs = 2;
16969 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16970 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16971 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16972 break;
16973case RISCVVector::BI__builtin_rvv_vslide1up_vx_tama:
16974 ID = Intrinsic::riscv_vslide1up_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_vslide1up_vx_tumu:
16982 ID = Intrinsic::riscv_vslide1up_mask;
16983 PolicyAttrs = 0;
16984 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16985 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16986 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16987 break;
16988case RISCVVector::BI__builtin_rvv_vslide1up_vx_mu:
16989 ID = Intrinsic::riscv_vslide1up_mask;
16990 PolicyAttrs = 1;
16991 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16992 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16993 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16994 break;
16995case RISCVVector::BI__builtin_rvv_vslidedown_vx_tu:
16996 ID = Intrinsic::riscv_vslidedown;
16997 PolicyAttrs = 2;
16998IsMasked = false;
16999
17000 if (IsMasked) {
17001 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17002 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
17003 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17004 } else {
17005 if (PolicyAttrs & RVV_VTA)
17006 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17007 }
17008
17009 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17010 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17011 break;
17012case RISCVVector::BI__builtin_rvv_vslidedown_vx_ta:
17013 ID = Intrinsic::riscv_vslidedown;
17014 PolicyAttrs = 3;
17015IsMasked = false;
17016
17017 if (IsMasked) {
17018 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17019 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
17020 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17021 } else {
17022 if (PolicyAttrs & RVV_VTA)
17023 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17024 }
17025
17026 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17027 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17028 break;
17029case RISCVVector::BI__builtin_rvv_vslidedown_vx_tum:
17030 ID = Intrinsic::riscv_vslidedown_mask;
17031 PolicyAttrs = 2;
17032IsMasked = true;
17033
17034 if (IsMasked) {
17035 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17036 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
17037 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17038 } else {
17039 if (PolicyAttrs & RVV_VTA)
17040 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17041 }
17042
17043 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17044 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17045 break;
17046case RISCVVector::BI__builtin_rvv_vslidedown_vx_tama:
17047 ID = Intrinsic::riscv_vslidedown_mask;
17048 PolicyAttrs = 3;
17049IsMasked = true;
17050
17051 if (IsMasked) {
17052 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17053 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
17054 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17055 } else {
17056 if (PolicyAttrs & RVV_VTA)
17057 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17058 }
17059
17060 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17061 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17062 break;
17063case RISCVVector::BI__builtin_rvv_vslidedown_vx_tumu:
17064 ID = Intrinsic::riscv_vslidedown_mask;
17065 PolicyAttrs = 0;
17066IsMasked = true;
17067
17068 if (IsMasked) {
17069 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17070 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
17071 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17072 } else {
17073 if (PolicyAttrs & RVV_VTA)
17074 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17075 }
17076
17077 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17078 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17079 break;
17080case RISCVVector::BI__builtin_rvv_vslidedown_vx_mu:
17081 ID = Intrinsic::riscv_vslidedown_mask;
17082 PolicyAttrs = 1;
17083IsMasked = true;
17084
17085 if (IsMasked) {
17086 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17087 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
17088 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17089 } else {
17090 if (PolicyAttrs & RVV_VTA)
17091 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17092 }
17093
17094 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17095 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17096 break;
17097case RISCVVector::BI__builtin_rvv_vslideup_vx_tu:
17098 ID = Intrinsic::riscv_vslideup;
17099 PolicyAttrs = 2;
17100 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17101 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17102 break;
17103case RISCVVector::BI__builtin_rvv_vslideup_vx_ta:
17104 ID = Intrinsic::riscv_vslideup;
17105 PolicyAttrs = 3;
17106 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17107 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17108 break;
17109case RISCVVector::BI__builtin_rvv_vslideup_vx_tum:
17110 ID = Intrinsic::riscv_vslideup_mask;
17111 PolicyAttrs = 2;
17112 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17113 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17114 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17115 break;
17116case RISCVVector::BI__builtin_rvv_vslideup_vx_tama:
17117 ID = Intrinsic::riscv_vslideup_mask;
17118 PolicyAttrs = 3;
17119 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17120 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17121 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17122 break;
17123case RISCVVector::BI__builtin_rvv_vslideup_vx_tumu:
17124 ID = Intrinsic::riscv_vslideup_mask;
17125 PolicyAttrs = 0;
17126 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17127 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17128 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17129 break;
17130case RISCVVector::BI__builtin_rvv_vslideup_vx_mu:
17131 ID = Intrinsic::riscv_vslideup_mask;
17132 PolicyAttrs = 1;
17133 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17134 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17135 IntrinsicTypes = {ResultType, Ops.back()->getType()};
17136 break;
17137case RISCVVector::BI__builtin_rvv_vsll_vv_tu:
17138case RISCVVector::BI__builtin_rvv_vsll_vx_tu:
17139 ID = Intrinsic::riscv_vsll;
17140 PolicyAttrs = 2;
17141 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17142 break;
17143case RISCVVector::BI__builtin_rvv_vsll_vv_ta:
17144case RISCVVector::BI__builtin_rvv_vsll_vx_ta:
17145 ID = Intrinsic::riscv_vsll;
17146 PolicyAttrs = 3;
17147 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17148 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17149 break;
17150case RISCVVector::BI__builtin_rvv_vsll_vv_tum:
17151case RISCVVector::BI__builtin_rvv_vsll_vx_tum:
17152 ID = Intrinsic::riscv_vsll_mask;
17153 PolicyAttrs = 2;
17154 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17155 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17156 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17157 break;
17158case RISCVVector::BI__builtin_rvv_vsll_vv_tama:
17159case RISCVVector::BI__builtin_rvv_vsll_vx_tama:
17160 ID = Intrinsic::riscv_vsll_mask;
17161 PolicyAttrs = 3;
17162 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17163 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17164 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17165 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17166 break;
17167case RISCVVector::BI__builtin_rvv_vsll_vv_tumu:
17168case RISCVVector::BI__builtin_rvv_vsll_vx_tumu:
17169 ID = Intrinsic::riscv_vsll_mask;
17170 PolicyAttrs = 0;
17171 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17172 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17173 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17174 break;
17175case RISCVVector::BI__builtin_rvv_vsll_vv_mu:
17176case RISCVVector::BI__builtin_rvv_vsll_vx_mu:
17177 ID = Intrinsic::riscv_vsll_mask;
17178 PolicyAttrs = 1;
17179 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17180 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17181 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17182 break;
17183case RISCVVector::BI__builtin_rvv_vsm_v:
17184 ID = Intrinsic::riscv_vsm;
17185 PolicyAttrs = 3;
17186IsMasked = false;
17187
17188 if (IsMasked) {
17189 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
17190 std::swap(Ops[0], Ops[2]);
17191 } else {
17192 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
17193 std::swap(Ops[0], Ops[1]);
17194 }
17195 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17196 if (IsMasked)
17197 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17198 else
17199 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
17200 break;
17201case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:
17202case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:
17203 ID = Intrinsic::riscv_vsmul;
17204 PolicyAttrs = 2;
17205 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17206 break;
17207case RISCVVector::BI__builtin_rvv_vsmul_vv_ta:
17208case RISCVVector::BI__builtin_rvv_vsmul_vx_ta:
17209 ID = Intrinsic::riscv_vsmul;
17210 PolicyAttrs = 3;
17211 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17212 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17213 break;
17214case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:
17215case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:
17216 ID = Intrinsic::riscv_vsmul_mask;
17217 PolicyAttrs = 2;
17218 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17219 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17220 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17221 break;
17222case RISCVVector::BI__builtin_rvv_vsmul_vv_tama:
17223case RISCVVector::BI__builtin_rvv_vsmul_vx_tama:
17224 ID = Intrinsic::riscv_vsmul_mask;
17225 PolicyAttrs = 3;
17226 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17227 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17228 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17229 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17230 break;
17231case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:
17232case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu:
17233 ID = Intrinsic::riscv_vsmul_mask;
17234 PolicyAttrs = 0;
17235 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17236 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17237 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17238 break;
17239case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:
17240case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:
17241 ID = Intrinsic::riscv_vsmul_mask;
17242 PolicyAttrs = 1;
17243 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17244 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17245 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17246 break;
17247case RISCVVector::BI__builtin_rvv_vsoxei8_v:
17248case RISCVVector::BI__builtin_rvv_vsoxei16_v:
17249case RISCVVector::BI__builtin_rvv_vsoxei32_v:
17250case RISCVVector::BI__builtin_rvv_vsoxei64_v:
17251 ID = Intrinsic::riscv_vsoxei;
17252 PolicyAttrs = 3;
17253IsMasked = false;
17254
17255 if (IsMasked) {
17256 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
17257 std::swap(Ops[0], Ops[3]);
17258 } else {
17259 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
17260 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17261 }
17262 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17263 if (IsMasked)
17264 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
17265 else
17266 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
17267 break;
17268case RISCVVector::BI__builtin_rvv_vsoxei8_v_m:
17269case RISCVVector::BI__builtin_rvv_vsoxei16_v_m:
17270case RISCVVector::BI__builtin_rvv_vsoxei32_v_m:
17271case RISCVVector::BI__builtin_rvv_vsoxei64_v_m:
17272 ID = Intrinsic::riscv_vsoxei_mask;
17273 PolicyAttrs = 3;
17274IsMasked = true;
17275
17276 if (IsMasked) {
17277 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
17278 std::swap(Ops[0], Ops[3]);
17279 } else {
17280 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
17281 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17282 }
17283 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17284 if (IsMasked)
17285 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
17286 else
17287 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
17288 break;
17289case RISCVVector::BI__builtin_rvv_vsoxseg2ei8_v:
17290case RISCVVector::BI__builtin_rvv_vsoxseg2ei16_v:
17291case RISCVVector::BI__builtin_rvv_vsoxseg2ei32_v:
17292case RISCVVector::BI__builtin_rvv_vsoxseg2ei64_v:
17293 ID = Intrinsic::riscv_vsoxseg2;
17294 NF = 2;
17295 PolicyAttrs = 3;
17296IsMasked = false;
17297
17298 {
17299 if (IsMasked) {
17300 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17301 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17302 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17303 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17304 IntrinsicTypes = {Ops[0]->getType(),
17305 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17306 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"
, 17306, __extension__ __PRETTY_FUNCTION__))
;
17307 } else {
17308 // Builtin: (ptr, index, val0, val1, ..., vl)
17309 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17310 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17311 IntrinsicTypes = {Ops[0]->getType(),
17312 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17313 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"
, 17313, __extension__ __PRETTY_FUNCTION__))
;
17314 }
17315 }
17316 break;
17317case RISCVVector::BI__builtin_rvv_vsoxseg2ei8_v_m:
17318case RISCVVector::BI__builtin_rvv_vsoxseg2ei16_v_m:
17319case RISCVVector::BI__builtin_rvv_vsoxseg2ei32_v_m:
17320case RISCVVector::BI__builtin_rvv_vsoxseg2ei64_v_m:
17321 ID = Intrinsic::riscv_vsoxseg2_mask;
17322 NF = 2;
17323 PolicyAttrs = 3;
17324IsMasked = true;
17325
17326 {
17327 if (IsMasked) {
17328 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17329 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17330 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17331 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17332 IntrinsicTypes = {Ops[0]->getType(),
17333 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17334 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"
, 17334, __extension__ __PRETTY_FUNCTION__))
;
17335 } else {
17336 // Builtin: (ptr, index, val0, val1, ..., vl)
17337 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17338 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17339 IntrinsicTypes = {Ops[0]->getType(),
17340 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17341 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"
, 17341, __extension__ __PRETTY_FUNCTION__))
;
17342 }
17343 }
17344 break;
17345case RISCVVector::BI__builtin_rvv_vsoxseg3ei8_v:
17346case RISCVVector::BI__builtin_rvv_vsoxseg3ei16_v:
17347case RISCVVector::BI__builtin_rvv_vsoxseg3ei32_v:
17348case RISCVVector::BI__builtin_rvv_vsoxseg3ei64_v:
17349 ID = Intrinsic::riscv_vsoxseg3;
17350 NF = 3;
17351 PolicyAttrs = 3;
17352IsMasked = false;
17353
17354 {
17355 if (IsMasked) {
17356 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17357 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17358 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17359 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17360 IntrinsicTypes = {Ops[0]->getType(),
17361 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17362 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"
, 17362, __extension__ __PRETTY_FUNCTION__))
;
17363 } else {
17364 // Builtin: (ptr, index, val0, val1, ..., vl)
17365 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17366 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17367 IntrinsicTypes = {Ops[0]->getType(),
17368 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17369 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"
, 17369, __extension__ __PRETTY_FUNCTION__))
;
17370 }
17371 }
17372 break;
17373case RISCVVector::BI__builtin_rvv_vsoxseg3ei8_v_m:
17374case RISCVVector::BI__builtin_rvv_vsoxseg3ei16_v_m:
17375case RISCVVector::BI__builtin_rvv_vsoxseg3ei32_v_m:
17376case RISCVVector::BI__builtin_rvv_vsoxseg3ei64_v_m:
17377 ID = Intrinsic::riscv_vsoxseg3_mask;
17378 NF = 3;
17379 PolicyAttrs = 3;
17380IsMasked = true;
17381
17382 {
17383 if (IsMasked) {
17384 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17385 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17386 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17387 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17388 IntrinsicTypes = {Ops[0]->getType(),
17389 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17390 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"
, 17390, __extension__ __PRETTY_FUNCTION__))
;
17391 } else {
17392 // Builtin: (ptr, index, val0, val1, ..., vl)
17393 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17394 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17395 IntrinsicTypes = {Ops[0]->getType(),
17396 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17397 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"
, 17397, __extension__ __PRETTY_FUNCTION__))
;
17398 }
17399 }
17400 break;
17401case RISCVVector::BI__builtin_rvv_vsoxseg4ei8_v:
17402case RISCVVector::BI__builtin_rvv_vsoxseg4ei16_v:
17403case RISCVVector::BI__builtin_rvv_vsoxseg4ei32_v:
17404case RISCVVector::BI__builtin_rvv_vsoxseg4ei64_v:
17405 ID = Intrinsic::riscv_vsoxseg4;
17406 NF = 4;
17407 PolicyAttrs = 3;
17408IsMasked = false;
17409
17410 {
17411 if (IsMasked) {
17412 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17413 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17414 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17415 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17416 IntrinsicTypes = {Ops[0]->getType(),
17417 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17418 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"
, 17418, __extension__ __PRETTY_FUNCTION__))
;
17419 } else {
17420 // Builtin: (ptr, index, val0, val1, ..., vl)
17421 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17422 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17423 IntrinsicTypes = {Ops[0]->getType(),
17424 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17425 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"
, 17425, __extension__ __PRETTY_FUNCTION__))
;
17426 }
17427 }
17428 break;
17429case RISCVVector::BI__builtin_rvv_vsoxseg4ei8_v_m:
17430case RISCVVector::BI__builtin_rvv_vsoxseg4ei16_v_m:
17431case RISCVVector::BI__builtin_rvv_vsoxseg4ei32_v_m:
17432case RISCVVector::BI__builtin_rvv_vsoxseg4ei64_v_m:
17433 ID = Intrinsic::riscv_vsoxseg4_mask;
17434 NF = 4;
17435 PolicyAttrs = 3;
17436IsMasked = true;
17437
17438 {
17439 if (IsMasked) {
17440 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17441 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17442 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17443 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17444 IntrinsicTypes = {Ops[0]->getType(),
17445 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17446 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"
, 17446, __extension__ __PRETTY_FUNCTION__))
;
17447 } else {
17448 // Builtin: (ptr, index, val0, val1, ..., vl)
17449 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17450 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17451 IntrinsicTypes = {Ops[0]->getType(),
17452 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17453 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"
, 17453, __extension__ __PRETTY_FUNCTION__))
;
17454 }
17455 }
17456 break;
17457case RISCVVector::BI__builtin_rvv_vsoxseg5ei8_v:
17458case RISCVVector::BI__builtin_rvv_vsoxseg5ei16_v:
17459case RISCVVector::BI__builtin_rvv_vsoxseg5ei32_v:
17460case RISCVVector::BI__builtin_rvv_vsoxseg5ei64_v:
17461 ID = Intrinsic::riscv_vsoxseg5;
17462 NF = 5;
17463 PolicyAttrs = 3;
17464IsMasked = false;
17465
17466 {
17467 if (IsMasked) {
17468 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17469 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17470 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17471 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17472 IntrinsicTypes = {Ops[0]->getType(),
17473 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17474 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"
, 17474, __extension__ __PRETTY_FUNCTION__))
;
17475 } else {
17476 // Builtin: (ptr, index, val0, val1, ..., vl)
17477 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17478 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17479 IntrinsicTypes = {Ops[0]->getType(),
17480 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17481 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"
, 17481, __extension__ __PRETTY_FUNCTION__))
;
17482 }
17483 }
17484 break;
17485case RISCVVector::BI__builtin_rvv_vsoxseg5ei8_v_m:
17486case RISCVVector::BI__builtin_rvv_vsoxseg5ei16_v_m:
17487case RISCVVector::BI__builtin_rvv_vsoxseg5ei32_v_m:
17488case RISCVVector::BI__builtin_rvv_vsoxseg5ei64_v_m:
17489 ID = Intrinsic::riscv_vsoxseg5_mask;
17490 NF = 5;
17491 PolicyAttrs = 3;
17492IsMasked = true;
17493
17494 {
17495 if (IsMasked) {
17496 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17497 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17498 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17499 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17500 IntrinsicTypes = {Ops[0]->getType(),
17501 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17502 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"
, 17502, __extension__ __PRETTY_FUNCTION__))
;
17503 } else {
17504 // Builtin: (ptr, index, val0, val1, ..., vl)
17505 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17506 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17507 IntrinsicTypes = {Ops[0]->getType(),
17508 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17509 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"
, 17509, __extension__ __PRETTY_FUNCTION__))
;
17510 }
17511 }
17512 break;
17513case RISCVVector::BI__builtin_rvv_vsoxseg6ei8_v:
17514case RISCVVector::BI__builtin_rvv_vsoxseg6ei16_v:
17515case RISCVVector::BI__builtin_rvv_vsoxseg6ei32_v:
17516case RISCVVector::BI__builtin_rvv_vsoxseg6ei64_v:
17517 ID = Intrinsic::riscv_vsoxseg6;
17518 NF = 6;
17519 PolicyAttrs = 3;
17520IsMasked = false;
17521
17522 {
17523 if (IsMasked) {
17524 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17525 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17526 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17527 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17528 IntrinsicTypes = {Ops[0]->getType(),
17529 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17530 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"
, 17530, __extension__ __PRETTY_FUNCTION__))
;
17531 } else {
17532 // Builtin: (ptr, index, val0, val1, ..., vl)
17533 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17534 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17535 IntrinsicTypes = {Ops[0]->getType(),
17536 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17537 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"
, 17537, __extension__ __PRETTY_FUNCTION__))
;
17538 }
17539 }
17540 break;
17541case RISCVVector::BI__builtin_rvv_vsoxseg6ei8_v_m:
17542case RISCVVector::BI__builtin_rvv_vsoxseg6ei16_v_m:
17543case RISCVVector::BI__builtin_rvv_vsoxseg6ei32_v_m:
17544case RISCVVector::BI__builtin_rvv_vsoxseg6ei64_v_m:
17545 ID = Intrinsic::riscv_vsoxseg6_mask;
17546 NF = 6;
17547 PolicyAttrs = 3;
17548IsMasked = true;
17549
17550 {
17551 if (IsMasked) {
17552 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17553 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17554 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17555 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17556 IntrinsicTypes = {Ops[0]->getType(),
17557 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17558 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"
, 17558, __extension__ __PRETTY_FUNCTION__))
;
17559 } else {
17560 // Builtin: (ptr, index, val0, val1, ..., vl)
17561 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17562 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17563 IntrinsicTypes = {Ops[0]->getType(),
17564 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17565 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"
, 17565, __extension__ __PRETTY_FUNCTION__))
;
17566 }
17567 }
17568 break;
17569case RISCVVector::BI__builtin_rvv_vsoxseg7ei8_v:
17570case RISCVVector::BI__builtin_rvv_vsoxseg7ei16_v:
17571case RISCVVector::BI__builtin_rvv_vsoxseg7ei32_v:
17572case RISCVVector::BI__builtin_rvv_vsoxseg7ei64_v:
17573 ID = Intrinsic::riscv_vsoxseg7;
17574 NF = 7;
17575 PolicyAttrs = 3;
17576IsMasked = false;
17577
17578 {
17579 if (IsMasked) {
17580 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17581 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17582 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17583 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17584 IntrinsicTypes = {Ops[0]->getType(),
17585 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17586 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"
, 17586, __extension__ __PRETTY_FUNCTION__))
;
17587 } else {
17588 // Builtin: (ptr, index, val0, val1, ..., vl)
17589 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17590 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17591 IntrinsicTypes = {Ops[0]->getType(),
17592 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17593 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"
, 17593, __extension__ __PRETTY_FUNCTION__))
;
17594 }
17595 }
17596 break;
17597case RISCVVector::BI__builtin_rvv_vsoxseg7ei8_v_m:
17598case RISCVVector::BI__builtin_rvv_vsoxseg7ei16_v_m:
17599case RISCVVector::BI__builtin_rvv_vsoxseg7ei32_v_m:
17600case RISCVVector::BI__builtin_rvv_vsoxseg7ei64_v_m:
17601 ID = Intrinsic::riscv_vsoxseg7_mask;
17602 NF = 7;
17603 PolicyAttrs = 3;
17604IsMasked = true;
17605
17606 {
17607 if (IsMasked) {
17608 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17609 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17610 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17611 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17612 IntrinsicTypes = {Ops[0]->getType(),
17613 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17614 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"
, 17614, __extension__ __PRETTY_FUNCTION__))
;
17615 } else {
17616 // Builtin: (ptr, index, val0, val1, ..., vl)
17617 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17618 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17619 IntrinsicTypes = {Ops[0]->getType(),
17620 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17621 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"
, 17621, __extension__ __PRETTY_FUNCTION__))
;
17622 }
17623 }
17624 break;
17625case RISCVVector::BI__builtin_rvv_vsoxseg8ei8_v:
17626case RISCVVector::BI__builtin_rvv_vsoxseg8ei16_v:
17627case RISCVVector::BI__builtin_rvv_vsoxseg8ei32_v:
17628case RISCVVector::BI__builtin_rvv_vsoxseg8ei64_v:
17629 ID = Intrinsic::riscv_vsoxseg8;
17630 NF = 8;
17631 PolicyAttrs = 3;
17632IsMasked = false;
17633
17634 {
17635 if (IsMasked) {
17636 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17637 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17638 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17639 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17640 IntrinsicTypes = {Ops[0]->getType(),
17641 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17642 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"
, 17642, __extension__ __PRETTY_FUNCTION__))
;
17643 } else {
17644 // Builtin: (ptr, index, val0, val1, ..., vl)
17645 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17646 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17647 IntrinsicTypes = {Ops[0]->getType(),
17648 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17649 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"
, 17649, __extension__ __PRETTY_FUNCTION__))
;
17650 }
17651 }
17652 break;
17653case RISCVVector::BI__builtin_rvv_vsoxseg8ei8_v_m:
17654case RISCVVector::BI__builtin_rvv_vsoxseg8ei16_v_m:
17655case RISCVVector::BI__builtin_rvv_vsoxseg8ei32_v_m:
17656case RISCVVector::BI__builtin_rvv_vsoxseg8ei64_v_m:
17657 ID = Intrinsic::riscv_vsoxseg8_mask;
17658 NF = 8;
17659 PolicyAttrs = 3;
17660IsMasked = true;
17661
17662 {
17663 if (IsMasked) {
17664 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17665 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17666 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17667 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17668 IntrinsicTypes = {Ops[0]->getType(),
17669 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17670 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"
, 17670, __extension__ __PRETTY_FUNCTION__))
;
17671 } else {
17672 // Builtin: (ptr, index, val0, val1, ..., vl)
17673 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17674 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17675 IntrinsicTypes = {Ops[0]->getType(),
17676 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17677 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"
, 17677, __extension__ __PRETTY_FUNCTION__))
;
17678 }
17679 }
17680 break;
17681case RISCVVector::BI__builtin_rvv_vsra_vv_tu:
17682case RISCVVector::BI__builtin_rvv_vsra_vx_tu:
17683 ID = Intrinsic::riscv_vsra;
17684 PolicyAttrs = 2;
17685 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17686 break;
17687case RISCVVector::BI__builtin_rvv_vsra_vv_ta:
17688case RISCVVector::BI__builtin_rvv_vsra_vx_ta:
17689 ID = Intrinsic::riscv_vsra;
17690 PolicyAttrs = 3;
17691 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17692 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17693 break;
17694case RISCVVector::BI__builtin_rvv_vsra_vv_tum:
17695case RISCVVector::BI__builtin_rvv_vsra_vx_tum:
17696 ID = Intrinsic::riscv_vsra_mask;
17697 PolicyAttrs = 2;
17698 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17699 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17700 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17701 break;
17702case RISCVVector::BI__builtin_rvv_vsra_vv_tama:
17703case RISCVVector::BI__builtin_rvv_vsra_vx_tama:
17704 ID = Intrinsic::riscv_vsra_mask;
17705 PolicyAttrs = 3;
17706 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17707 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17708 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17709 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17710 break;
17711case RISCVVector::BI__builtin_rvv_vsra_vv_tumu:
17712case RISCVVector::BI__builtin_rvv_vsra_vx_tumu:
17713 ID = Intrinsic::riscv_vsra_mask;
17714 PolicyAttrs = 0;
17715 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17716 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17717 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17718 break;
17719case RISCVVector::BI__builtin_rvv_vsra_vv_mu:
17720case RISCVVector::BI__builtin_rvv_vsra_vx_mu:
17721 ID = Intrinsic::riscv_vsra_mask;
17722 PolicyAttrs = 1;
17723 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17724 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17725 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17726 break;
17727case RISCVVector::BI__builtin_rvv_vsrl_vv_tu:
17728case RISCVVector::BI__builtin_rvv_vsrl_vx_tu:
17729 ID = Intrinsic::riscv_vsrl;
17730 PolicyAttrs = 2;
17731 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17732 break;
17733case RISCVVector::BI__builtin_rvv_vsrl_vv_ta:
17734case RISCVVector::BI__builtin_rvv_vsrl_vx_ta:
17735 ID = Intrinsic::riscv_vsrl;
17736 PolicyAttrs = 3;
17737 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17738 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17739 break;
17740case RISCVVector::BI__builtin_rvv_vsrl_vv_tum:
17741case RISCVVector::BI__builtin_rvv_vsrl_vx_tum:
17742 ID = Intrinsic::riscv_vsrl_mask;
17743 PolicyAttrs = 2;
17744 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17745 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17746 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17747 break;
17748case RISCVVector::BI__builtin_rvv_vsrl_vv_tama:
17749case RISCVVector::BI__builtin_rvv_vsrl_vx_tama:
17750 ID = Intrinsic::riscv_vsrl_mask;
17751 PolicyAttrs = 3;
17752 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17753 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17754 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17755 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17756 break;
17757case RISCVVector::BI__builtin_rvv_vsrl_vv_tumu:
17758case RISCVVector::BI__builtin_rvv_vsrl_vx_tumu:
17759 ID = Intrinsic::riscv_vsrl_mask;
17760 PolicyAttrs = 0;
17761 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17762 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17763 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17764 break;
17765case RISCVVector::BI__builtin_rvv_vsrl_vv_mu:
17766case RISCVVector::BI__builtin_rvv_vsrl_vx_mu:
17767 ID = Intrinsic::riscv_vsrl_mask;
17768 PolicyAttrs = 1;
17769 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17770 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17771 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17772 break;
17773case RISCVVector::BI__builtin_rvv_vsse8_v:
17774case RISCVVector::BI__builtin_rvv_vsse16_v:
17775case RISCVVector::BI__builtin_rvv_vsse32_v:
17776case RISCVVector::BI__builtin_rvv_vsse64_v:
17777 ID = Intrinsic::riscv_vsse;
17778 PolicyAttrs = 3;
17779IsMasked = false;
17780
17781 if (IsMasked) {
17782 // Builtin: (mask, ptr, stride, value, vl). Intrinsic: (value, ptr, stride, mask, vl)
17783 std::swap(Ops[0], Ops[3]);
17784 } else {
17785 // Builtin: (ptr, stride, value, vl). Intrinsic: (value, ptr, stride, vl)
17786 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17787 }
17788 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17789 if (IsMasked)
17790 IntrinsicTypes = {Ops[0]->getType(), Ops[4]->getType()};
17791 else
17792 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17793 break;
17794case RISCVVector::BI__builtin_rvv_vsse8_v_m:
17795case RISCVVector::BI__builtin_rvv_vsse16_v_m:
17796case RISCVVector::BI__builtin_rvv_vsse32_v_m:
17797case RISCVVector::BI__builtin_rvv_vsse64_v_m:
17798 ID = Intrinsic::riscv_vsse_mask;
17799 PolicyAttrs = 3;
17800IsMasked = true;
17801
17802 if (IsMasked) {
17803 // Builtin: (mask, ptr, stride, value, vl). Intrinsic: (value, ptr, stride, mask, vl)
17804 std::swap(Ops[0], Ops[3]);
17805 } else {
17806 // Builtin: (ptr, stride, value, vl). Intrinsic: (value, ptr, stride, vl)
17807 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17808 }
17809 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17810 if (IsMasked)
17811 IntrinsicTypes = {Ops[0]->getType(), Ops[4]->getType()};
17812 else
17813 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17814 break;
17815case RISCVVector::BI__builtin_rvv_vsseg2e8_v:
17816case RISCVVector::BI__builtin_rvv_vsseg2e16_v:
17817case RISCVVector::BI__builtin_rvv_vsseg2e32_v:
17818case RISCVVector::BI__builtin_rvv_vsseg2e64_v:
17819 ID = Intrinsic::riscv_vsseg2;
17820 NF = 2;
17821 PolicyAttrs = 3;
17822IsMasked = false;
17823
17824 {
17825 if (IsMasked) {
17826 // Builtin: (mask, ptr, val0, val1, ..., vl)
17827 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17828 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17829 std::swap(Ops[NF], Ops[NF + 1]);
17830 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17831 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"
, 17831, __extension__ __PRETTY_FUNCTION__))
;
17832 } else {
17833 // Builtin: (ptr, val0, val1, ..., vl)
17834 // Intrinsic: (val0, val1, ..., ptr, vl)
17835 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17836 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17837 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"
, 17837, __extension__ __PRETTY_FUNCTION__))
;
17838 }
17839 }
17840 break;
17841case RISCVVector::BI__builtin_rvv_vsseg2e8_v_m:
17842case RISCVVector::BI__builtin_rvv_vsseg2e16_v_m:
17843case RISCVVector::BI__builtin_rvv_vsseg2e32_v_m:
17844case RISCVVector::BI__builtin_rvv_vsseg2e64_v_m:
17845 ID = Intrinsic::riscv_vsseg2_mask;
17846 NF = 2;
17847 PolicyAttrs = 3;
17848IsMasked = true;
17849
17850 {
17851 if (IsMasked) {
17852 // Builtin: (mask, ptr, val0, val1, ..., vl)
17853 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17854 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17855 std::swap(Ops[NF], Ops[NF + 1]);
17856 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17857 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"
, 17857, __extension__ __PRETTY_FUNCTION__))
;
17858 } else {
17859 // Builtin: (ptr, val0, val1, ..., vl)
17860 // Intrinsic: (val0, val1, ..., ptr, vl)
17861 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17862 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17863 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"
, 17863, __extension__ __PRETTY_FUNCTION__))
;
17864 }
17865 }
17866 break;
17867case RISCVVector::BI__builtin_rvv_vsseg3e8_v:
17868case RISCVVector::BI__builtin_rvv_vsseg3e16_v:
17869case RISCVVector::BI__builtin_rvv_vsseg3e32_v:
17870case RISCVVector::BI__builtin_rvv_vsseg3e64_v:
17871 ID = Intrinsic::riscv_vsseg3;
17872 NF = 3;
17873 PolicyAttrs = 3;
17874IsMasked = false;
17875
17876 {
17877 if (IsMasked) {
17878 // Builtin: (mask, ptr, val0, val1, ..., vl)
17879 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17880 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17881 std::swap(Ops[NF], Ops[NF + 1]);
17882 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17883 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"
, 17883, __extension__ __PRETTY_FUNCTION__))
;
17884 } else {
17885 // Builtin: (ptr, val0, val1, ..., vl)
17886 // Intrinsic: (val0, val1, ..., ptr, vl)
17887 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17888 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17889 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"
, 17889, __extension__ __PRETTY_FUNCTION__))
;
17890 }
17891 }
17892 break;
17893case RISCVVector::BI__builtin_rvv_vsseg3e8_v_m:
17894case RISCVVector::BI__builtin_rvv_vsseg3e16_v_m:
17895case RISCVVector::BI__builtin_rvv_vsseg3e32_v_m:
17896case RISCVVector::BI__builtin_rvv_vsseg3e64_v_m:
17897 ID = Intrinsic::riscv_vsseg3_mask;
17898 NF = 3;
17899 PolicyAttrs = 3;
17900IsMasked = true;
17901
17902 {
17903 if (IsMasked) {
17904 // Builtin: (mask, ptr, val0, val1, ..., vl)
17905 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17906 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17907 std::swap(Ops[NF], Ops[NF + 1]);
17908 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17909 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"
, 17909, __extension__ __PRETTY_FUNCTION__))
;
17910 } else {
17911 // Builtin: (ptr, val0, val1, ..., vl)
17912 // Intrinsic: (val0, val1, ..., ptr, vl)
17913 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17914 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17915 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"
, 17915, __extension__ __PRETTY_FUNCTION__))
;
17916 }
17917 }
17918 break;
17919case RISCVVector::BI__builtin_rvv_vsseg4e8_v:
17920case RISCVVector::BI__builtin_rvv_vsseg4e16_v:
17921case RISCVVector::BI__builtin_rvv_vsseg4e32_v:
17922case RISCVVector::BI__builtin_rvv_vsseg4e64_v:
17923 ID = Intrinsic::riscv_vsseg4;
17924 NF = 4;
17925 PolicyAttrs = 3;
17926IsMasked = false;
17927
17928 {
17929 if (IsMasked) {
17930 // Builtin: (mask, ptr, val0, val1, ..., vl)
17931 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17932 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17933 std::swap(Ops[NF], Ops[NF + 1]);
17934 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17935 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"
, 17935, __extension__ __PRETTY_FUNCTION__))
;
17936 } else {
17937 // Builtin: (ptr, val0, val1, ..., vl)
17938 // Intrinsic: (val0, val1, ..., ptr, vl)
17939 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17940 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17941 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"
, 17941, __extension__ __PRETTY_FUNCTION__))
;
17942 }
17943 }
17944 break;
17945case RISCVVector::BI__builtin_rvv_vsseg4e8_v_m:
17946case RISCVVector::BI__builtin_rvv_vsseg4e16_v_m:
17947case RISCVVector::BI__builtin_rvv_vsseg4e32_v_m:
17948case RISCVVector::BI__builtin_rvv_vsseg4e64_v_m:
17949 ID = Intrinsic::riscv_vsseg4_mask;
17950 NF = 4;
17951 PolicyAttrs = 3;
17952IsMasked = true;
17953
17954 {
17955 if (IsMasked) {
17956 // Builtin: (mask, ptr, val0, val1, ..., vl)
17957 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17958 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17959 std::swap(Ops[NF], Ops[NF + 1]);
17960 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17961 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"
, 17961, __extension__ __PRETTY_FUNCTION__))
;
17962 } else {
17963 // Builtin: (ptr, val0, val1, ..., vl)
17964 // Intrinsic: (val0, val1, ..., ptr, vl)
17965 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17966 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17967 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"
, 17967, __extension__ __PRETTY_FUNCTION__))
;
17968 }
17969 }
17970 break;
17971case RISCVVector::BI__builtin_rvv_vsseg5e8_v:
17972case RISCVVector::BI__builtin_rvv_vsseg5e16_v:
17973case RISCVVector::BI__builtin_rvv_vsseg5e32_v:
17974case RISCVVector::BI__builtin_rvv_vsseg5e64_v:
17975 ID = Intrinsic::riscv_vsseg5;
17976 NF = 5;
17977 PolicyAttrs = 3;
17978IsMasked = false;
17979
17980 {
17981 if (IsMasked) {
17982 // Builtin: (mask, ptr, val0, val1, ..., vl)
17983 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17984 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17985 std::swap(Ops[NF], Ops[NF + 1]);
17986 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17987 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"
, 17987, __extension__ __PRETTY_FUNCTION__))
;
17988 } else {
17989 // Builtin: (ptr, val0, val1, ..., vl)
17990 // Intrinsic: (val0, val1, ..., ptr, vl)
17991 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17992 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17993 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"
, 17993, __extension__ __PRETTY_FUNCTION__))
;
17994 }
17995 }
17996 break;
17997case RISCVVector::BI__builtin_rvv_vsseg5e8_v_m:
17998case RISCVVector::BI__builtin_rvv_vsseg5e16_v_m:
17999case RISCVVector::BI__builtin_rvv_vsseg5e32_v_m:
18000case RISCVVector::BI__builtin_rvv_vsseg5e64_v_m:
18001 ID = Intrinsic::riscv_vsseg5_mask;
18002 NF = 5;
18003 PolicyAttrs = 3;
18004IsMasked = true;
18005
18006 {
18007 if (IsMasked) {
18008 // Builtin: (mask, ptr, val0, val1, ..., vl)
18009 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18010 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18011 std::swap(Ops[NF], Ops[NF + 1]);
18012 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18013 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"
, 18013, __extension__ __PRETTY_FUNCTION__))
;
18014 } else {
18015 // Builtin: (ptr, val0, val1, ..., vl)
18016 // Intrinsic: (val0, val1, ..., ptr, vl)
18017 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18018 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18019 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"
, 18019, __extension__ __PRETTY_FUNCTION__))
;
18020 }
18021 }
18022 break;
18023case RISCVVector::BI__builtin_rvv_vsseg6e8_v:
18024case RISCVVector::BI__builtin_rvv_vsseg6e16_v:
18025case RISCVVector::BI__builtin_rvv_vsseg6e32_v:
18026case RISCVVector::BI__builtin_rvv_vsseg6e64_v:
18027 ID = Intrinsic::riscv_vsseg6;
18028 NF = 6;
18029 PolicyAttrs = 3;
18030IsMasked = false;
18031
18032 {
18033 if (IsMasked) {
18034 // Builtin: (mask, ptr, val0, val1, ..., vl)
18035 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18036 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18037 std::swap(Ops[NF], Ops[NF + 1]);
18038 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18039 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"
, 18039, __extension__ __PRETTY_FUNCTION__))
;
18040 } else {
18041 // Builtin: (ptr, val0, val1, ..., vl)
18042 // Intrinsic: (val0, val1, ..., ptr, vl)
18043 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18044 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18045 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"
, 18045, __extension__ __PRETTY_FUNCTION__))
;
18046 }
18047 }
18048 break;
18049case RISCVVector::BI__builtin_rvv_vsseg6e8_v_m:
18050case RISCVVector::BI__builtin_rvv_vsseg6e16_v_m:
18051case RISCVVector::BI__builtin_rvv_vsseg6e32_v_m:
18052case RISCVVector::BI__builtin_rvv_vsseg6e64_v_m:
18053 ID = Intrinsic::riscv_vsseg6_mask;
18054 NF = 6;
18055 PolicyAttrs = 3;
18056IsMasked = true;
18057
18058 {
18059 if (IsMasked) {
18060 // Builtin: (mask, ptr, val0, val1, ..., vl)
18061 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18062 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18063 std::swap(Ops[NF], Ops[NF + 1]);
18064 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18065 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"
, 18065, __extension__ __PRETTY_FUNCTION__))
;
18066 } else {
18067 // Builtin: (ptr, val0, val1, ..., vl)
18068 // Intrinsic: (val0, val1, ..., ptr, vl)
18069 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18070 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18071 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"
, 18071, __extension__ __PRETTY_FUNCTION__))
;
18072 }
18073 }
18074 break;
18075case RISCVVector::BI__builtin_rvv_vsseg7e8_v:
18076case RISCVVector::BI__builtin_rvv_vsseg7e16_v:
18077case RISCVVector::BI__builtin_rvv_vsseg7e32_v:
18078case RISCVVector::BI__builtin_rvv_vsseg7e64_v:
18079 ID = Intrinsic::riscv_vsseg7;
18080 NF = 7;
18081 PolicyAttrs = 3;
18082IsMasked = false;
18083
18084 {
18085 if (IsMasked) {
18086 // Builtin: (mask, ptr, val0, val1, ..., vl)
18087 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18088 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18089 std::swap(Ops[NF], Ops[NF + 1]);
18090 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18091 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"
, 18091, __extension__ __PRETTY_FUNCTION__))
;
18092 } else {
18093 // Builtin: (ptr, val0, val1, ..., vl)
18094 // Intrinsic: (val0, val1, ..., ptr, vl)
18095 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18096 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18097 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"
, 18097, __extension__ __PRETTY_FUNCTION__))
;
18098 }
18099 }
18100 break;
18101case RISCVVector::BI__builtin_rvv_vsseg7e8_v_m:
18102case RISCVVector::BI__builtin_rvv_vsseg7e16_v_m:
18103case RISCVVector::BI__builtin_rvv_vsseg7e32_v_m:
18104case RISCVVector::BI__builtin_rvv_vsseg7e64_v_m:
18105 ID = Intrinsic::riscv_vsseg7_mask;
18106 NF = 7;
18107 PolicyAttrs = 3;
18108IsMasked = true;
18109
18110 {
18111 if (IsMasked) {
18112 // Builtin: (mask, ptr, val0, val1, ..., vl)
18113 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18114 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18115 std::swap(Ops[NF], Ops[NF + 1]);
18116 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18117 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"
, 18117, __extension__ __PRETTY_FUNCTION__))
;
18118 } else {
18119 // Builtin: (ptr, val0, val1, ..., vl)
18120 // Intrinsic: (val0, val1, ..., ptr, vl)
18121 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18122 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18123 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"
, 18123, __extension__ __PRETTY_FUNCTION__))
;
18124 }
18125 }
18126 break;
18127case RISCVVector::BI__builtin_rvv_vsseg8e8_v:
18128case RISCVVector::BI__builtin_rvv_vsseg8e16_v:
18129case RISCVVector::BI__builtin_rvv_vsseg8e32_v:
18130case RISCVVector::BI__builtin_rvv_vsseg8e64_v:
18131 ID = Intrinsic::riscv_vsseg8;
18132 NF = 8;
18133 PolicyAttrs = 3;
18134IsMasked = false;
18135
18136 {
18137 if (IsMasked) {
18138 // Builtin: (mask, ptr, val0, val1, ..., vl)
18139 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18140 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18141 std::swap(Ops[NF], Ops[NF + 1]);
18142 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18143 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"
, 18143, __extension__ __PRETTY_FUNCTION__))
;
18144 } else {
18145 // Builtin: (ptr, val0, val1, ..., vl)
18146 // Intrinsic: (val0, val1, ..., ptr, vl)
18147 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18148 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18149 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"
, 18149, __extension__ __PRETTY_FUNCTION__))
;
18150 }
18151 }
18152 break;
18153case RISCVVector::BI__builtin_rvv_vsseg8e8_v_m:
18154case RISCVVector::BI__builtin_rvv_vsseg8e16_v_m:
18155case RISCVVector::BI__builtin_rvv_vsseg8e32_v_m:
18156case RISCVVector::BI__builtin_rvv_vsseg8e64_v_m:
18157 ID = Intrinsic::riscv_vsseg8_mask;
18158 NF = 8;
18159 PolicyAttrs = 3;
18160IsMasked = true;
18161
18162 {
18163 if (IsMasked) {
18164 // Builtin: (mask, ptr, val0, val1, ..., vl)
18165 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18166 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18167 std::swap(Ops[NF], Ops[NF + 1]);
18168 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18169 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"
, 18169, __extension__ __PRETTY_FUNCTION__))
;
18170 } else {
18171 // Builtin: (ptr, val0, val1, ..., vl)
18172 // Intrinsic: (val0, val1, ..., ptr, vl)
18173 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18174 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18175 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"
, 18175, __extension__ __PRETTY_FUNCTION__))
;
18176 }
18177 }
18178 break;
18179case RISCVVector::BI__builtin_rvv_vssra_vv_tu:
18180case RISCVVector::BI__builtin_rvv_vssra_vx_tu:
18181 ID = Intrinsic::riscv_vssra;
18182 PolicyAttrs = 2;
18183 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18184 break;
18185case RISCVVector::BI__builtin_rvv_vssra_vv_ta:
18186case RISCVVector::BI__builtin_rvv_vssra_vx_ta:
18187 ID = Intrinsic::riscv_vssra;
18188 PolicyAttrs = 3;
18189 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18190 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18191 break;
18192case RISCVVector::BI__builtin_rvv_vssra_vv_tum:
18193case RISCVVector::BI__builtin_rvv_vssra_vx_tum:
18194 ID = Intrinsic::riscv_vssra_mask;
18195 PolicyAttrs = 2;
18196 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18197 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18198 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18199 break;
18200case RISCVVector::BI__builtin_rvv_vssra_vv_tama:
18201case RISCVVector::BI__builtin_rvv_vssra_vx_tama:
18202 ID = Intrinsic::riscv_vssra_mask;
18203 PolicyAttrs = 3;
18204 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18205 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18206 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18207 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18208 break;
18209case RISCVVector::BI__builtin_rvv_vssra_vv_tumu:
18210case RISCVVector::BI__builtin_rvv_vssra_vx_tumu:
18211 ID = Intrinsic::riscv_vssra_mask;
18212 PolicyAttrs = 0;
18213 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18214 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18215 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18216 break;
18217case RISCVVector::BI__builtin_rvv_vssra_vv_mu:
18218case RISCVVector::BI__builtin_rvv_vssra_vx_mu:
18219 ID = Intrinsic::riscv_vssra_mask;
18220 PolicyAttrs = 1;
18221 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18222 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18223 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18224 break;
18225case RISCVVector::BI__builtin_rvv_vssrl_vv_tu:
18226case RISCVVector::BI__builtin_rvv_vssrl_vx_tu:
18227 ID = Intrinsic::riscv_vssrl;
18228 PolicyAttrs = 2;
18229 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18230 break;
18231case RISCVVector::BI__builtin_rvv_vssrl_vv_ta:
18232case RISCVVector::BI__builtin_rvv_vssrl_vx_ta:
18233 ID = Intrinsic::riscv_vssrl;
18234 PolicyAttrs = 3;
18235 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18236 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18237 break;
18238case RISCVVector::BI__builtin_rvv_vssrl_vv_tum:
18239case RISCVVector::BI__builtin_rvv_vssrl_vx_tum:
18240 ID = Intrinsic::riscv_vssrl_mask;
18241 PolicyAttrs = 2;
18242 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18243 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18244 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18245 break;
18246case RISCVVector::BI__builtin_rvv_vssrl_vv_tama:
18247case RISCVVector::BI__builtin_rvv_vssrl_vx_tama:
18248 ID = Intrinsic::riscv_vssrl_mask;
18249 PolicyAttrs = 3;
18250 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18251 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18252 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18253 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18254 break;
18255case RISCVVector::BI__builtin_rvv_vssrl_vv_tumu:
18256case RISCVVector::BI__builtin_rvv_vssrl_vx_tumu:
18257 ID = Intrinsic::riscv_vssrl_mask;
18258 PolicyAttrs = 0;
18259 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18260 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18261 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18262 break;
18263case RISCVVector::BI__builtin_rvv_vssrl_vv_mu:
18264case RISCVVector::BI__builtin_rvv_vssrl_vx_mu:
18265 ID = Intrinsic::riscv_vssrl_mask;
18266 PolicyAttrs = 1;
18267 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18268 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18269 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18270 break;
18271case RISCVVector::BI__builtin_rvv_vssseg2e8_v:
18272case RISCVVector::BI__builtin_rvv_vssseg2e16_v:
18273case RISCVVector::BI__builtin_rvv_vssseg2e32_v:
18274case RISCVVector::BI__builtin_rvv_vssseg2e64_v:
18275 ID = Intrinsic::riscv_vssseg2;
18276 NF = 2;
18277 PolicyAttrs = 3;
18278IsMasked = false;
18279
18280 {
18281 if (IsMasked) {
18282 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18283 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18284 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18285 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18286 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"
, 18286, __extension__ __PRETTY_FUNCTION__))
;
18287 } else {
18288 // Builtin: (ptr, stride, val0, val1, ..., vl).
18289 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18290 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18291 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"
, 18291, __extension__ __PRETTY_FUNCTION__))
;
18292 }
18293 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18294 }
18295 break;
18296case RISCVVector::BI__builtin_rvv_vssseg2e8_v_m:
18297case RISCVVector::BI__builtin_rvv_vssseg2e16_v_m:
18298case RISCVVector::BI__builtin_rvv_vssseg2e32_v_m:
18299case RISCVVector::BI__builtin_rvv_vssseg2e64_v_m:
18300 ID = Intrinsic::riscv_vssseg2_mask;
18301 NF = 2;
18302 PolicyAttrs = 3;
18303IsMasked = true;
18304
18305 {
18306 if (IsMasked) {
18307 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18308 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18309 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18310 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18311 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"
, 18311, __extension__ __PRETTY_FUNCTION__))
;
18312 } else {
18313 // Builtin: (ptr, stride, val0, val1, ..., vl).
18314 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18315 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18316 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"
, 18316, __extension__ __PRETTY_FUNCTION__))
;
18317 }
18318 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18319 }
18320 break;
18321case RISCVVector::BI__builtin_rvv_vssseg3e8_v:
18322case RISCVVector::BI__builtin_rvv_vssseg3e16_v:
18323case RISCVVector::BI__builtin_rvv_vssseg3e32_v:
18324case RISCVVector::BI__builtin_rvv_vssseg3e64_v:
18325 ID = Intrinsic::riscv_vssseg3;
18326 NF = 3;
18327 PolicyAttrs = 3;
18328IsMasked = false;
18329
18330 {
18331 if (IsMasked) {
18332 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18333 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18334 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18335 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18336 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"
, 18336, __extension__ __PRETTY_FUNCTION__))
;
18337 } else {
18338 // Builtin: (ptr, stride, val0, val1, ..., vl).
18339 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18340 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18341 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"
, 18341, __extension__ __PRETTY_FUNCTION__))
;
18342 }
18343 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18344 }
18345 break;
18346case RISCVVector::BI__builtin_rvv_vssseg3e8_v_m:
18347case RISCVVector::BI__builtin_rvv_vssseg3e16_v_m:
18348case RISCVVector::BI__builtin_rvv_vssseg3e32_v_m:
18349case RISCVVector::BI__builtin_rvv_vssseg3e64_v_m:
18350 ID = Intrinsic::riscv_vssseg3_mask;
18351 NF = 3;
18352 PolicyAttrs = 3;
18353IsMasked = true;
18354
18355 {
18356 if (IsMasked) {
18357 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18358 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18359 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18360 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18361 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"
, 18361, __extension__ __PRETTY_FUNCTION__))
;
18362 } else {
18363 // Builtin: (ptr, stride, val0, val1, ..., vl).
18364 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18365 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18366 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"
, 18366, __extension__ __PRETTY_FUNCTION__))
;
18367 }
18368 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18369 }
18370 break;
18371case RISCVVector::BI__builtin_rvv_vssseg4e8_v:
18372case RISCVVector::BI__builtin_rvv_vssseg4e16_v:
18373case RISCVVector::BI__builtin_rvv_vssseg4e32_v:
18374case RISCVVector::BI__builtin_rvv_vssseg4e64_v:
18375 ID = Intrinsic::riscv_vssseg4;
18376 NF = 4;
18377 PolicyAttrs = 3;
18378IsMasked = false;
18379
18380 {
18381 if (IsMasked) {
18382 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18383 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18384 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18385 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18386 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"
, 18386, __extension__ __PRETTY_FUNCTION__))
;
18387 } else {
18388 // Builtin: (ptr, stride, val0, val1, ..., vl).
18389 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18390 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18391 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"
, 18391, __extension__ __PRETTY_FUNCTION__))
;
18392 }
18393 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18394 }
18395 break;
18396case RISCVVector::BI__builtin_rvv_vssseg4e8_v_m:
18397case RISCVVector::BI__builtin_rvv_vssseg4e16_v_m:
18398case RISCVVector::BI__builtin_rvv_vssseg4e32_v_m:
18399case RISCVVector::BI__builtin_rvv_vssseg4e64_v_m:
18400 ID = Intrinsic::riscv_vssseg4_mask;
18401 NF = 4;
18402 PolicyAttrs = 3;
18403IsMasked = true;
18404
18405 {
18406 if (IsMasked) {
18407 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18408 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18409 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18410 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18411 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"
, 18411, __extension__ __PRETTY_FUNCTION__))
;
18412 } else {
18413 // Builtin: (ptr, stride, val0, val1, ..., vl).
18414 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18415 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18416 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"
, 18416, __extension__ __PRETTY_FUNCTION__))
;
18417 }
18418 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18419 }
18420 break;
18421case RISCVVector::BI__builtin_rvv_vssseg5e8_v:
18422case RISCVVector::BI__builtin_rvv_vssseg5e16_v:
18423case RISCVVector::BI__builtin_rvv_vssseg5e32_v:
18424case RISCVVector::BI__builtin_rvv_vssseg5e64_v:
18425 ID = Intrinsic::riscv_vssseg5;
18426 NF = 5;
18427 PolicyAttrs = 3;
18428IsMasked = false;
18429
18430 {
18431 if (IsMasked) {
18432 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18433 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18434 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18435 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18436 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"
, 18436, __extension__ __PRETTY_FUNCTION__))
;
18437 } else {
18438 // Builtin: (ptr, stride, val0, val1, ..., vl).
18439 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18440 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18441 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"
, 18441, __extension__ __PRETTY_FUNCTION__))
;
18442 }
18443 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18444 }
18445 break;
18446case RISCVVector::BI__builtin_rvv_vssseg5e8_v_m:
18447case RISCVVector::BI__builtin_rvv_vssseg5e16_v_m:
18448case RISCVVector::BI__builtin_rvv_vssseg5e32_v_m:
18449case RISCVVector::BI__builtin_rvv_vssseg5e64_v_m:
18450 ID = Intrinsic::riscv_vssseg5_mask;
18451 NF = 5;
18452 PolicyAttrs = 3;
18453IsMasked = true;
18454
18455 {
18456 if (IsMasked) {
18457 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18458 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18459 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18460 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18461 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"
, 18461, __extension__ __PRETTY_FUNCTION__))
;
18462 } else {
18463 // Builtin: (ptr, stride, val0, val1, ..., vl).
18464 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18465 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18466 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"
, 18466, __extension__ __PRETTY_FUNCTION__))
;
18467 }
18468 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18469 }
18470 break;
18471case RISCVVector::BI__builtin_rvv_vssseg6e8_v:
18472case RISCVVector::BI__builtin_rvv_vssseg6e16_v:
18473case RISCVVector::BI__builtin_rvv_vssseg6e32_v:
18474case RISCVVector::BI__builtin_rvv_vssseg6e64_v:
18475 ID = Intrinsic::riscv_vssseg6;
18476 NF = 6;
18477 PolicyAttrs = 3;
18478IsMasked = false;
18479
18480 {
18481 if (IsMasked) {
18482 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18483 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18484 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18485 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18486 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"
, 18486, __extension__ __PRETTY_FUNCTION__))
;
18487 } else {
18488 // Builtin: (ptr, stride, val0, val1, ..., vl).
18489 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18490 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18491 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"
, 18491, __extension__ __PRETTY_FUNCTION__))
;
18492 }
18493 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18494 }
18495 break;
18496case RISCVVector::BI__builtin_rvv_vssseg6e8_v_m:
18497case RISCVVector::BI__builtin_rvv_vssseg6e16_v_m:
18498case RISCVVector::BI__builtin_rvv_vssseg6e32_v_m:
18499case RISCVVector::BI__builtin_rvv_vssseg6e64_v_m:
18500 ID = Intrinsic::riscv_vssseg6_mask;
18501 NF = 6;
18502 PolicyAttrs = 3;
18503IsMasked = true;
18504
18505 {
18506 if (IsMasked) {
18507 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18508 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18509 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18510 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18511 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"
, 18511, __extension__ __PRETTY_FUNCTION__))
;
18512 } else {
18513 // Builtin: (ptr, stride, val0, val1, ..., vl).
18514 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18515 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18516 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"
, 18516, __extension__ __PRETTY_FUNCTION__))
;
18517 }
18518 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18519 }
18520 break;
18521case RISCVVector::BI__builtin_rvv_vssseg7e8_v:
18522case RISCVVector::BI__builtin_rvv_vssseg7e16_v:
18523case RISCVVector::BI__builtin_rvv_vssseg7e32_v:
18524case RISCVVector::BI__builtin_rvv_vssseg7e64_v:
18525 ID = Intrinsic::riscv_vssseg7;
18526 NF = 7;
18527 PolicyAttrs = 3;
18528IsMasked = false;
18529
18530 {
18531 if (IsMasked) {
18532 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18533 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18534 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18535 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18536 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"
, 18536, __extension__ __PRETTY_FUNCTION__))
;
18537 } else {
18538 // Builtin: (ptr, stride, val0, val1, ..., vl).
18539 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18540 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18541 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"
, 18541, __extension__ __PRETTY_FUNCTION__))
;
18542 }
18543 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18544 }
18545 break;
18546case RISCVVector::BI__builtin_rvv_vssseg7e8_v_m:
18547case RISCVVector::BI__builtin_rvv_vssseg7e16_v_m:
18548case RISCVVector::BI__builtin_rvv_vssseg7e32_v_m:
18549case RISCVVector::BI__builtin_rvv_vssseg7e64_v_m:
18550 ID = Intrinsic::riscv_vssseg7_mask;
18551 NF = 7;
18552 PolicyAttrs = 3;
18553IsMasked = true;
18554
18555 {
18556 if (IsMasked) {
18557 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18558 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18559 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18560 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18561 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"
, 18561, __extension__ __PRETTY_FUNCTION__))
;
18562 } else {
18563 // Builtin: (ptr, stride, val0, val1, ..., vl).
18564 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18565 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18566 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"
, 18566, __extension__ __PRETTY_FUNCTION__))
;
18567 }
18568 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18569 }
18570 break;
18571case RISCVVector::BI__builtin_rvv_vssseg8e8_v:
18572case RISCVVector::BI__builtin_rvv_vssseg8e16_v:
18573case RISCVVector::BI__builtin_rvv_vssseg8e32_v:
18574case RISCVVector::BI__builtin_rvv_vssseg8e64_v:
18575 ID = Intrinsic::riscv_vssseg8;
18576 NF = 8;
18577 PolicyAttrs = 3;
18578IsMasked = false;
18579
18580 {
18581 if (IsMasked) {
18582 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18583 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18584 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18585 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18586 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"
, 18586, __extension__ __PRETTY_FUNCTION__))
;
18587 } else {
18588 // Builtin: (ptr, stride, val0, val1, ..., vl).
18589 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18590 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18591 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"
, 18591, __extension__ __PRETTY_FUNCTION__))
;
18592 }
18593 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18594 }
18595 break;
18596case RISCVVector::BI__builtin_rvv_vssseg8e8_v_m:
18597case RISCVVector::BI__builtin_rvv_vssseg8e16_v_m:
18598case RISCVVector::BI__builtin_rvv_vssseg8e32_v_m:
18599case RISCVVector::BI__builtin_rvv_vssseg8e64_v_m:
18600 ID = Intrinsic::riscv_vssseg8_mask;
18601 NF = 8;
18602 PolicyAttrs = 3;
18603IsMasked = true;
18604
18605 {
18606 if (IsMasked) {
18607 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18608 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18609 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18610 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18611 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"
, 18611, __extension__ __PRETTY_FUNCTION__))
;
18612 } else {
18613 // Builtin: (ptr, stride, val0, val1, ..., vl).
18614 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18615 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18616 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"
, 18616, __extension__ __PRETTY_FUNCTION__))
;
18617 }
18618 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18619 }
18620 break;
18621case RISCVVector::BI__builtin_rvv_vssub_vv_tu:
18622case RISCVVector::BI__builtin_rvv_vssub_vx_tu:
18623 ID = Intrinsic::riscv_vssub;
18624 PolicyAttrs = 2;
18625 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18626 break;
18627case RISCVVector::BI__builtin_rvv_vssub_vv_ta:
18628case RISCVVector::BI__builtin_rvv_vssub_vx_ta:
18629 ID = Intrinsic::riscv_vssub;
18630 PolicyAttrs = 3;
18631 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18632 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18633 break;
18634case RISCVVector::BI__builtin_rvv_vssub_vv_tum:
18635case RISCVVector::BI__builtin_rvv_vssub_vx_tum:
18636 ID = Intrinsic::riscv_vssub_mask;
18637 PolicyAttrs = 2;
18638 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18639 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18640 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18641 break;
18642case RISCVVector::BI__builtin_rvv_vssub_vv_tama:
18643case RISCVVector::BI__builtin_rvv_vssub_vx_tama:
18644 ID = Intrinsic::riscv_vssub_mask;
18645 PolicyAttrs = 3;
18646 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18647 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18648 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18649 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18650 break;
18651case RISCVVector::BI__builtin_rvv_vssub_vv_tumu:
18652case RISCVVector::BI__builtin_rvv_vssub_vx_tumu:
18653 ID = Intrinsic::riscv_vssub_mask;
18654 PolicyAttrs = 0;
18655 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18656 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18657 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18658 break;
18659case RISCVVector::BI__builtin_rvv_vssub_vv_mu:
18660case RISCVVector::BI__builtin_rvv_vssub_vx_mu:
18661 ID = Intrinsic::riscv_vssub_mask;
18662 PolicyAttrs = 1;
18663 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18664 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18665 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18666 break;
18667case RISCVVector::BI__builtin_rvv_vssubu_vv_tu:
18668case RISCVVector::BI__builtin_rvv_vssubu_vx_tu:
18669 ID = Intrinsic::riscv_vssubu;
18670 PolicyAttrs = 2;
18671 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18672 break;
18673case RISCVVector::BI__builtin_rvv_vssubu_vv_ta:
18674case RISCVVector::BI__builtin_rvv_vssubu_vx_ta:
18675 ID = Intrinsic::riscv_vssubu;
18676 PolicyAttrs = 3;
18677 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18678 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18679 break;
18680case RISCVVector::BI__builtin_rvv_vssubu_vv_tum:
18681case RISCVVector::BI__builtin_rvv_vssubu_vx_tum:
18682 ID = Intrinsic::riscv_vssubu_mask;
18683 PolicyAttrs = 2;
18684 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18685 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18686 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18687 break;
18688case RISCVVector::BI__builtin_rvv_vssubu_vv_tama:
18689case RISCVVector::BI__builtin_rvv_vssubu_vx_tama:
18690 ID = Intrinsic::riscv_vssubu_mask;
18691 PolicyAttrs = 3;
18692 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18693 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18694 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18695 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18696 break;
18697case RISCVVector::BI__builtin_rvv_vssubu_vv_tumu:
18698case RISCVVector::BI__builtin_rvv_vssubu_vx_tumu:
18699 ID = Intrinsic::riscv_vssubu_mask;
18700 PolicyAttrs = 0;
18701 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18702 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18703 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18704 break;
18705case RISCVVector::BI__builtin_rvv_vssubu_vv_mu:
18706case RISCVVector::BI__builtin_rvv_vssubu_vx_mu:
18707 ID = Intrinsic::riscv_vssubu_mask;
18708 PolicyAttrs = 1;
18709 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18710 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18711 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18712 break;
18713case RISCVVector::BI__builtin_rvv_vsub_vv_tu:
18714case RISCVVector::BI__builtin_rvv_vsub_vx_tu:
18715 ID = Intrinsic::riscv_vsub;
18716 PolicyAttrs = 2;
18717 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18718 break;
18719case RISCVVector::BI__builtin_rvv_vsub_vv_ta:
18720case RISCVVector::BI__builtin_rvv_vsub_vx_ta:
18721 ID = Intrinsic::riscv_vsub;
18722 PolicyAttrs = 3;
18723 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18724 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18725 break;
18726case RISCVVector::BI__builtin_rvv_vsub_vv_tum:
18727case RISCVVector::BI__builtin_rvv_vsub_vx_tum:
18728 ID = Intrinsic::riscv_vsub_mask;
18729 PolicyAttrs = 2;
18730 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18731 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18732 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18733 break;
18734case RISCVVector::BI__builtin_rvv_vsub_vv_tama:
18735case RISCVVector::BI__builtin_rvv_vsub_vx_tama:
18736 ID = Intrinsic::riscv_vsub_mask;
18737 PolicyAttrs = 3;
18738 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18739 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18740 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18741 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18742 break;
18743case RISCVVector::BI__builtin_rvv_vsub_vv_tumu:
18744case RISCVVector::BI__builtin_rvv_vsub_vx_tumu:
18745 ID = Intrinsic::riscv_vsub_mask;
18746 PolicyAttrs = 0;
18747 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18748 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18749 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18750 break;
18751case RISCVVector::BI__builtin_rvv_vsub_vv_mu:
18752case RISCVVector::BI__builtin_rvv_vsub_vx_mu:
18753 ID = Intrinsic::riscv_vsub_mask;
18754 PolicyAttrs = 1;
18755 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18756 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18757 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18758 break;
18759case RISCVVector::BI__builtin_rvv_vsuxei8_v:
18760case RISCVVector::BI__builtin_rvv_vsuxei64_v:
18761case RISCVVector::BI__builtin_rvv_vsuxei16_v:
18762case RISCVVector::BI__builtin_rvv_vsuxei32_v:
18763 ID = Intrinsic::riscv_vsuxei;
18764 PolicyAttrs = 3;
18765IsMasked = false;
18766
18767 if (IsMasked) {
18768 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
18769 std::swap(Ops[0], Ops[3]);
18770 } else {
18771 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
18772 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
18773 }
18774 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
18775 if (IsMasked)
18776 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
18777 else
18778 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
18779 break;
18780case RISCVVector::BI__builtin_rvv_vsuxei8_v_m:
18781case RISCVVector::BI__builtin_rvv_vsuxei64_v_m:
18782case RISCVVector::BI__builtin_rvv_vsuxei16_v_m:
18783case RISCVVector::BI__builtin_rvv_vsuxei32_v_m:
18784 ID = Intrinsic::riscv_vsuxei_mask;
18785 PolicyAttrs = 3;
18786IsMasked = true;
18787
18788 if (IsMasked) {
18789 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
18790 std::swap(Ops[0], Ops[3]);
18791 } else {
18792 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
18793 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
18794 }
18795 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
18796 if (IsMasked)
18797 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
18798 else
18799 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
18800 break;
18801case RISCVVector::BI__builtin_rvv_vsuxseg2ei8_v:
18802case RISCVVector::BI__builtin_rvv_vsuxseg2ei16_v:
18803case RISCVVector::BI__builtin_rvv_vsuxseg2ei32_v:
18804case RISCVVector::BI__builtin_rvv_vsuxseg2ei64_v:
18805 ID = Intrinsic::riscv_vsuxseg2;
18806 NF = 2;
18807 PolicyAttrs = 3;
18808IsMasked = false;
18809
18810 {
18811 if (IsMasked) {
18812 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18813 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18814 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18815 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18816 IntrinsicTypes = {Ops[0]->getType(),
18817 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18818 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"
, 18818, __extension__ __PRETTY_FUNCTION__))
;
18819 } else {
18820 // Builtin: (ptr, index, val0, val1, ..., vl)
18821 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18822 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18823 IntrinsicTypes = {Ops[0]->getType(),
18824 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18825 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"
, 18825, __extension__ __PRETTY_FUNCTION__))
;
18826 }
18827 }
18828 break;
18829case RISCVVector::BI__builtin_rvv_vsuxseg2ei8_v_m:
18830case RISCVVector::BI__builtin_rvv_vsuxseg2ei16_v_m:
18831case RISCVVector::BI__builtin_rvv_vsuxseg2ei32_v_m:
18832case RISCVVector::BI__builtin_rvv_vsuxseg2ei64_v_m:
18833 ID = Intrinsic::riscv_vsuxseg2_mask;
18834 NF = 2;
18835 PolicyAttrs = 3;
18836IsMasked = true;
18837
18838 {
18839 if (IsMasked) {
18840 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18841 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18842 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18843 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18844 IntrinsicTypes = {Ops[0]->getType(),
18845 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18846 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"
, 18846, __extension__ __PRETTY_FUNCTION__))
;
18847 } else {
18848 // Builtin: (ptr, index, val0, val1, ..., vl)
18849 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18850 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18851 IntrinsicTypes = {Ops[0]->getType(),
18852 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18853 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"
, 18853, __extension__ __PRETTY_FUNCTION__))
;
18854 }
18855 }
18856 break;
18857case RISCVVector::BI__builtin_rvv_vsuxseg3ei8_v:
18858case RISCVVector::BI__builtin_rvv_vsuxseg3ei16_v:
18859case RISCVVector::BI__builtin_rvv_vsuxseg3ei32_v:
18860case RISCVVector::BI__builtin_rvv_vsuxseg3ei64_v:
18861 ID = Intrinsic::riscv_vsuxseg3;
18862 NF = 3;
18863 PolicyAttrs = 3;
18864IsMasked = false;
18865
18866 {
18867 if (IsMasked) {
18868 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18869 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18870 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18871 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18872 IntrinsicTypes = {Ops[0]->getType(),
18873 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18874 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"
, 18874, __extension__ __PRETTY_FUNCTION__))
;
18875 } else {
18876 // Builtin: (ptr, index, val0, val1, ..., vl)
18877 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18878 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18879 IntrinsicTypes = {Ops[0]->getType(),
18880 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18881 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"
, 18881, __extension__ __PRETTY_FUNCTION__))
;
18882 }
18883 }
18884 break;
18885case RISCVVector::BI__builtin_rvv_vsuxseg3ei8_v_m:
18886case RISCVVector::BI__builtin_rvv_vsuxseg3ei16_v_m:
18887case RISCVVector::BI__builtin_rvv_vsuxseg3ei32_v_m:
18888case RISCVVector::BI__builtin_rvv_vsuxseg3ei64_v_m:
18889 ID = Intrinsic::riscv_vsuxseg3_mask;
18890 NF = 3;
18891 PolicyAttrs = 3;
18892IsMasked = true;
18893
18894 {
18895 if (IsMasked) {
18896 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18897 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18898 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18899 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18900 IntrinsicTypes = {Ops[0]->getType(),
18901 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18902 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"
, 18902, __extension__ __PRETTY_FUNCTION__))
;
18903 } else {
18904 // Builtin: (ptr, index, val0, val1, ..., vl)
18905 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18906 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18907 IntrinsicTypes = {Ops[0]->getType(),
18908 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18909 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"
, 18909, __extension__ __PRETTY_FUNCTION__))
;
18910 }
18911 }
18912 break;
18913case RISCVVector::BI__builtin_rvv_vsuxseg4ei8_v:
18914case RISCVVector::BI__builtin_rvv_vsuxseg4ei16_v:
18915case RISCVVector::BI__builtin_rvv_vsuxseg4ei32_v:
18916case RISCVVector::BI__builtin_rvv_vsuxseg4ei64_v:
18917 ID = Intrinsic::riscv_vsuxseg4;
18918 NF = 4;
18919 PolicyAttrs = 3;
18920IsMasked = false;
18921
18922 {
18923 if (IsMasked) {
18924 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18925 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18926 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18927 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18928 IntrinsicTypes = {Ops[0]->getType(),
18929 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18930 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"
, 18930, __extension__ __PRETTY_FUNCTION__))
;
18931 } else {
18932 // Builtin: (ptr, index, val0, val1, ..., vl)
18933 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18934 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18935 IntrinsicTypes = {Ops[0]->getType(),
18936 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18937 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"
, 18937, __extension__ __PRETTY_FUNCTION__))
;
18938 }
18939 }
18940 break;
18941case RISCVVector::BI__builtin_rvv_vsuxseg4ei8_v_m:
18942case RISCVVector::BI__builtin_rvv_vsuxseg4ei16_v_m:
18943case RISCVVector::BI__builtin_rvv_vsuxseg4ei32_v_m:
18944case RISCVVector::BI__builtin_rvv_vsuxseg4ei64_v_m:
18945 ID = Intrinsic::riscv_vsuxseg4_mask;
18946 NF = 4;
18947 PolicyAttrs = 3;
18948IsMasked = true;
18949
18950 {
18951 if (IsMasked) {
18952 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18953 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18954 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18955 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18956 IntrinsicTypes = {Ops[0]->getType(),
18957 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18958 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"
, 18958, __extension__ __PRETTY_FUNCTION__))
;
18959 } else {
18960 // Builtin: (ptr, index, val0, val1, ..., vl)
18961 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18962 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18963 IntrinsicTypes = {Ops[0]->getType(),
18964 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18965 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"
, 18965, __extension__ __PRETTY_FUNCTION__))
;
18966 }
18967 }
18968 break;
18969case RISCVVector::BI__builtin_rvv_vsuxseg5ei8_v:
18970case RISCVVector::BI__builtin_rvv_vsuxseg5ei16_v:
18971case RISCVVector::BI__builtin_rvv_vsuxseg5ei32_v:
18972case RISCVVector::BI__builtin_rvv_vsuxseg5ei64_v:
18973 ID = Intrinsic::riscv_vsuxseg5;
18974 NF = 5;
18975 PolicyAttrs = 3;
18976IsMasked = false;
18977
18978 {
18979 if (IsMasked) {
18980 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18981 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18982 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18983 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18984 IntrinsicTypes = {Ops[0]->getType(),
18985 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18986 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"
, 18986, __extension__ __PRETTY_FUNCTION__))
;
18987 } else {
18988 // Builtin: (ptr, index, val0, val1, ..., vl)
18989 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18990 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18991 IntrinsicTypes = {Ops[0]->getType(),
18992 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18993 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"
, 18993, __extension__ __PRETTY_FUNCTION__))
;
18994 }
18995 }
18996 break;
18997case RISCVVector::BI__builtin_rvv_vsuxseg5ei8_v_m:
18998case RISCVVector::BI__builtin_rvv_vsuxseg5ei16_v_m:
18999case RISCVVector::BI__builtin_rvv_vsuxseg5ei32_v_m:
19000case RISCVVector::BI__builtin_rvv_vsuxseg5ei64_v_m:
19001 ID = Intrinsic::riscv_vsuxseg5_mask;
19002 NF = 5;
19003 PolicyAttrs = 3;
19004IsMasked = true;
19005
19006 {
19007 if (IsMasked) {
19008 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19009 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19010 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19011 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19012 IntrinsicTypes = {Ops[0]->getType(),
19013 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19014 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"
, 19014, __extension__ __PRETTY_FUNCTION__))
;
19015 } else {
19016 // Builtin: (ptr, index, val0, val1, ..., vl)
19017 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19018 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19019 IntrinsicTypes = {Ops[0]->getType(),
19020 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19021 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"
, 19021, __extension__ __PRETTY_FUNCTION__))
;
19022 }
19023 }
19024 break;
19025case RISCVVector::BI__builtin_rvv_vsuxseg6ei8_v:
19026case RISCVVector::BI__builtin_rvv_vsuxseg6ei16_v:
19027case RISCVVector::BI__builtin_rvv_vsuxseg6ei32_v:
19028case RISCVVector::BI__builtin_rvv_vsuxseg6ei64_v:
19029 ID = Intrinsic::riscv_vsuxseg6;
19030 NF = 6;
19031 PolicyAttrs = 3;
19032IsMasked = false;
19033
19034 {
19035 if (IsMasked) {
19036 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19037 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19038 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19039 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19040 IntrinsicTypes = {Ops[0]->getType(),
19041 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19042 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"
, 19042, __extension__ __PRETTY_FUNCTION__))
;
19043 } else {
19044 // Builtin: (ptr, index, val0, val1, ..., vl)
19045 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19046 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19047 IntrinsicTypes = {Ops[0]->getType(),
19048 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19049 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"
, 19049, __extension__ __PRETTY_FUNCTION__))
;
19050 }
19051 }
19052 break;
19053case RISCVVector::BI__builtin_rvv_vsuxseg6ei8_v_m:
19054case RISCVVector::BI__builtin_rvv_vsuxseg6ei16_v_m:
19055case RISCVVector::BI__builtin_rvv_vsuxseg6ei32_v_m:
19056case RISCVVector::BI__builtin_rvv_vsuxseg6ei64_v_m:
19057 ID = Intrinsic::riscv_vsuxseg6_mask;
19058 NF = 6;
19059 PolicyAttrs = 3;
19060IsMasked = true;
19061
19062 {
19063 if (IsMasked) {
19064 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19065 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19066 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19067 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19068 IntrinsicTypes = {Ops[0]->getType(),
19069 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19070 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"
, 19070, __extension__ __PRETTY_FUNCTION__))
;
19071 } else {
19072 // Builtin: (ptr, index, val0, val1, ..., vl)
19073 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19074 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19075 IntrinsicTypes = {Ops[0]->getType(),
19076 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19077 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"
, 19077, __extension__ __PRETTY_FUNCTION__))
;
19078 }
19079 }
19080 break;
19081case RISCVVector::BI__builtin_rvv_vsuxseg7ei8_v:
19082case RISCVVector::BI__builtin_rvv_vsuxseg7ei16_v:
19083case RISCVVector::BI__builtin_rvv_vsuxseg7ei32_v:
19084case RISCVVector::BI__builtin_rvv_vsuxseg7ei64_v:
19085 ID = Intrinsic::riscv_vsuxseg7;
19086 NF = 7;
19087 PolicyAttrs = 3;
19088IsMasked = false;
19089
19090 {
19091 if (IsMasked) {
19092 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19093 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19094 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19095 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19096 IntrinsicTypes = {Ops[0]->getType(),
19097 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19098 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"
, 19098, __extension__ __PRETTY_FUNCTION__))
;
19099 } else {
19100 // Builtin: (ptr, index, val0, val1, ..., vl)
19101 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19102 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19103 IntrinsicTypes = {Ops[0]->getType(),
19104 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19105 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"
, 19105, __extension__ __PRETTY_FUNCTION__))
;
19106 }
19107 }
19108 break;
19109case RISCVVector::BI__builtin_rvv_vsuxseg7ei8_v_m:
19110case RISCVVector::BI__builtin_rvv_vsuxseg7ei16_v_m:
19111case RISCVVector::BI__builtin_rvv_vsuxseg7ei32_v_m:
19112case RISCVVector::BI__builtin_rvv_vsuxseg7ei64_v_m:
19113 ID = Intrinsic::riscv_vsuxseg7_mask;
19114 NF = 7;
19115 PolicyAttrs = 3;
19116IsMasked = true;
19117
19118 {
19119 if (IsMasked) {
19120 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19121 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19122 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19123 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19124 IntrinsicTypes = {Ops[0]->getType(),
19125 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19126 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"
, 19126, __extension__ __PRETTY_FUNCTION__))
;
19127 } else {
19128 // Builtin: (ptr, index, val0, val1, ..., vl)
19129 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19130 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19131 IntrinsicTypes = {Ops[0]->getType(),
19132 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19133 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"
, 19133, __extension__ __PRETTY_FUNCTION__))
;
19134 }
19135 }
19136 break;
19137case RISCVVector::BI__builtin_rvv_vsuxseg8ei8_v:
19138case RISCVVector::BI__builtin_rvv_vsuxseg8ei16_v:
19139case RISCVVector::BI__builtin_rvv_vsuxseg8ei32_v:
19140case RISCVVector::BI__builtin_rvv_vsuxseg8ei64_v:
19141 ID = Intrinsic::riscv_vsuxseg8;
19142 NF = 8;
19143 PolicyAttrs = 3;
19144IsMasked = false;
19145
19146 {
19147 if (IsMasked) {
19148 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19149 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19150 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19151 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19152 IntrinsicTypes = {Ops[0]->getType(),
19153 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19154 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"
, 19154, __extension__ __PRETTY_FUNCTION__))
;
19155 } else {
19156 // Builtin: (ptr, index, val0, val1, ..., vl)
19157 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19158 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19159 IntrinsicTypes = {Ops[0]->getType(),
19160 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19161 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"
, 19161, __extension__ __PRETTY_FUNCTION__))
;
19162 }
19163 }
19164 break;
19165case RISCVVector::BI__builtin_rvv_vsuxseg8ei8_v_m:
19166case RISCVVector::BI__builtin_rvv_vsuxseg8ei16_v_m:
19167case RISCVVector::BI__builtin_rvv_vsuxseg8ei32_v_m:
19168case RISCVVector::BI__builtin_rvv_vsuxseg8ei64_v_m:
19169 ID = Intrinsic::riscv_vsuxseg8_mask;
19170 NF = 8;
19171 PolicyAttrs = 3;
19172IsMasked = true;
19173
19174 {
19175 if (IsMasked) {
19176 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19177 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19178 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19179 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19180 IntrinsicTypes = {Ops[0]->getType(),
19181 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19182 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"
, 19182, __extension__ __PRETTY_FUNCTION__))
;
19183 } else {
19184 // Builtin: (ptr, index, val0, val1, ..., vl)
19185 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19186 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19187 IntrinsicTypes = {Ops[0]->getType(),
19188 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19189 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"
, 19189, __extension__ __PRETTY_FUNCTION__))
;
19190 }
19191 }
19192 break;
19193case RISCVVector::BI__builtin_rvv_vwadd_vv_tu:
19194case RISCVVector::BI__builtin_rvv_vwadd_vx_tu:
19195 ID = Intrinsic::riscv_vwadd;
19196 PolicyAttrs = 2;
19197 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19198 break;
19199case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tu:
19200 ID = Intrinsic::riscv_vwadd;
19201 PolicyAttrs = 2;
19202IsMasked = false;
19203
19204 {
19205 if (IsMasked) {
19206 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19207 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19208 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19209 } else {
19210 if (PolicyAttrs & RVV_VTA)
19211 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19212 }
19213 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19214 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19215 if (IsMasked) {
19216 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19217 // maskedoff, op1, op2, mask, vl, policy
19218 IntrinsicTypes = {ResultType,
19219 Ops[1]->getType(),
19220 ElemTy,
19221 Ops[4]->getType()};
19222 } else {
19223 // passtru, op1, op2, vl
19224 IntrinsicTypes = {ResultType,
19225 Ops[1]->getType(),
19226 ElemTy,
19227 Ops[3]->getType()};
19228 }
19229 break;
19230 }
19231 break;
19232case RISCVVector::BI__builtin_rvv_vwadd_vv_ta:
19233case RISCVVector::BI__builtin_rvv_vwadd_vx_ta:
19234 ID = Intrinsic::riscv_vwadd;
19235 PolicyAttrs = 3;
19236 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19237 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19238 break;
19239case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_ta:
19240 ID = Intrinsic::riscv_vwadd;
19241 PolicyAttrs = 3;
19242IsMasked = false;
19243
19244 {
19245 if (IsMasked) {
19246 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19247 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19248 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19249 } else {
19250 if (PolicyAttrs & RVV_VTA)
19251 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19252 }
19253 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19254 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19255 if (IsMasked) {
19256 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19257 // maskedoff, op1, op2, mask, vl, policy
19258 IntrinsicTypes = {ResultType,
19259 Ops[1]->getType(),
19260 ElemTy,
19261 Ops[4]->getType()};
19262 } else {
19263 // passtru, op1, op2, vl
19264 IntrinsicTypes = {ResultType,
19265 Ops[1]->getType(),
19266 ElemTy,
19267 Ops[3]->getType()};
19268 }
19269 break;
19270 }
19271 break;
19272case RISCVVector::BI__builtin_rvv_vwadd_vv_tum:
19273case RISCVVector::BI__builtin_rvv_vwadd_vx_tum:
19274 ID = Intrinsic::riscv_vwadd_mask;
19275 PolicyAttrs = 2;
19276 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19277 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19278 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19279 break;
19280case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tum:
19281 ID = Intrinsic::riscv_vwadd_mask;
19282 PolicyAttrs = 2;
19283IsMasked = true;
19284
19285 {
19286 if (IsMasked) {
19287 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19288 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19289 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19290 } else {
19291 if (PolicyAttrs & RVV_VTA)
19292 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19293 }
19294 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19295 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19296 if (IsMasked) {
19297 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19298 // maskedoff, op1, op2, mask, vl, policy
19299 IntrinsicTypes = {ResultType,
19300 Ops[1]->getType(),
19301 ElemTy,
19302 Ops[4]->getType()};
19303 } else {
19304 // passtru, op1, op2, vl
19305 IntrinsicTypes = {ResultType,
19306 Ops[1]->getType(),
19307 ElemTy,
19308 Ops[3]->getType()};
19309 }
19310 break;
19311 }
19312 break;
19313case RISCVVector::BI__builtin_rvv_vwadd_vv_tama:
19314case RISCVVector::BI__builtin_rvv_vwadd_vx_tama:
19315 ID = Intrinsic::riscv_vwadd_mask;
19316 PolicyAttrs = 3;
19317 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19318 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19319 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19320 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19321 break;
19322case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tama:
19323 ID = Intrinsic::riscv_vwadd_mask;
19324 PolicyAttrs = 3;
19325IsMasked = true;
19326
19327 {
19328 if (IsMasked) {
19329 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19330 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19331 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19332 } else {
19333 if (PolicyAttrs & RVV_VTA)
19334 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19335 }
19336 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19337 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19338 if (IsMasked) {
19339 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19340 // maskedoff, op1, op2, mask, vl, policy
19341 IntrinsicTypes = {ResultType,
19342 Ops[1]->getType(),
19343 ElemTy,
19344 Ops[4]->getType()};
19345 } else {
19346 // passtru, op1, op2, vl
19347 IntrinsicTypes = {ResultType,
19348 Ops[1]->getType(),
19349 ElemTy,
19350 Ops[3]->getType()};
19351 }
19352 break;
19353 }
19354 break;
19355case RISCVVector::BI__builtin_rvv_vwadd_vv_tumu:
19356case RISCVVector::BI__builtin_rvv_vwadd_vx_tumu:
19357 ID = Intrinsic::riscv_vwadd_mask;
19358 PolicyAttrs = 0;
19359 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19360 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19361 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19362 break;
19363case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tumu:
19364 ID = Intrinsic::riscv_vwadd_mask;
19365 PolicyAttrs = 0;
19366IsMasked = true;
19367
19368 {
19369 if (IsMasked) {
19370 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19371 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19372 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19373 } else {
19374 if (PolicyAttrs & RVV_VTA)
19375 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19376 }
19377 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19378 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19379 if (IsMasked) {
19380 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19381 // maskedoff, op1, op2, mask, vl, policy
19382 IntrinsicTypes = {ResultType,
19383 Ops[1]->getType(),
19384 ElemTy,
19385 Ops[4]->getType()};
19386 } else {
19387 // passtru, op1, op2, vl
19388 IntrinsicTypes = {ResultType,
19389 Ops[1]->getType(),
19390 ElemTy,
19391 Ops[3]->getType()};
19392 }
19393 break;
19394 }
19395 break;
19396case RISCVVector::BI__builtin_rvv_vwadd_vv_mu:
19397case RISCVVector::BI__builtin_rvv_vwadd_vx_mu:
19398 ID = Intrinsic::riscv_vwadd_mask;
19399 PolicyAttrs = 1;
19400 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19401 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19402 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19403 break;
19404case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_mu:
19405 ID = Intrinsic::riscv_vwadd_mask;
19406 PolicyAttrs = 1;
19407IsMasked = true;
19408
19409 {
19410 if (IsMasked) {
19411 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19412 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19413 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19414 } else {
19415 if (PolicyAttrs & RVV_VTA)
19416 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19417 }
19418 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19419 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19420 if (IsMasked) {
19421 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19422 // maskedoff, op1, op2, mask, vl, policy
19423 IntrinsicTypes = {ResultType,
19424 Ops[1]->getType(),
19425 ElemTy,
19426 Ops[4]->getType()};
19427 } else {
19428 // passtru, op1, op2, vl
19429 IntrinsicTypes = {ResultType,
19430 Ops[1]->getType(),
19431 ElemTy,
19432 Ops[3]->getType()};
19433 }
19434 break;
19435 }
19436 break;
19437case RISCVVector::BI__builtin_rvv_vwadd_wv_tu:
19438case RISCVVector::BI__builtin_rvv_vwadd_wx_tu:
19439 ID = Intrinsic::riscv_vwadd_w;
19440 PolicyAttrs = 2;
19441 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19442 break;
19443case RISCVVector::BI__builtin_rvv_vwadd_wv_ta:
19444case RISCVVector::BI__builtin_rvv_vwadd_wx_ta:
19445 ID = Intrinsic::riscv_vwadd_w;
19446 PolicyAttrs = 3;
19447 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19448 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19449 break;
19450case RISCVVector::BI__builtin_rvv_vwadd_wv_tum:
19451case RISCVVector::BI__builtin_rvv_vwadd_wx_tum:
19452 ID = Intrinsic::riscv_vwadd_w_mask;
19453 PolicyAttrs = 2;
19454 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19455 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19456 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19457 break;
19458case RISCVVector::BI__builtin_rvv_vwadd_wv_tama:
19459case RISCVVector::BI__builtin_rvv_vwadd_wx_tama:
19460 ID = Intrinsic::riscv_vwadd_w_mask;
19461 PolicyAttrs = 3;
19462 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19463 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19464 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19465 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19466 break;
19467case RISCVVector::BI__builtin_rvv_vwadd_wv_tumu:
19468case RISCVVector::BI__builtin_rvv_vwadd_wx_tumu:
19469 ID = Intrinsic::riscv_vwadd_w_mask;
19470 PolicyAttrs = 0;
19471 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19472 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19473 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19474 break;
19475case RISCVVector::BI__builtin_rvv_vwadd_wv_mu:
19476case RISCVVector::BI__builtin_rvv_vwadd_wx_mu:
19477 ID = Intrinsic::riscv_vwadd_w_mask;
19478 PolicyAttrs = 1;
19479 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19480 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19481 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19482 break;
19483case RISCVVector::BI__builtin_rvv_vwaddu_vv_tu:
19484 ID = Intrinsic::riscv_vwaddu;
19485 PolicyAttrs = 2;
19486 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19487 break;
19488case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tu:
19489 ID = Intrinsic::riscv_vwaddu;
19490 PolicyAttrs = 2;
19491IsMasked = false;
19492
19493 {
19494 if (IsMasked) {
19495 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19496 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19497 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19498 } else {
19499 if (PolicyAttrs & RVV_VTA)
19500 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19501 }
19502 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19503 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19504 if (IsMasked) {
19505 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19506 // maskedoff, op1, op2, mask, vl, policy
19507 IntrinsicTypes = {ResultType,
19508 Ops[1]->getType(),
19509 ElemTy,
19510 Ops[4]->getType()};
19511 } else {
19512 // passtru, op1, op2, vl
19513 IntrinsicTypes = {ResultType,
19514 Ops[1]->getType(),
19515 ElemTy,
19516 Ops[3]->getType()};
19517 }
19518 break;
19519 }
19520 break;
19521case RISCVVector::BI__builtin_rvv_vwaddu_vx_tu:
19522 ID = Intrinsic::riscv_vwaddu;
19523 PolicyAttrs = 2;
19524 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19525 break;
19526case RISCVVector::BI__builtin_rvv_vwaddu_vv_ta:
19527 ID = Intrinsic::riscv_vwaddu;
19528 PolicyAttrs = 3;
19529 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19530 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19531 break;
19532case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_ta:
19533 ID = Intrinsic::riscv_vwaddu;
19534 PolicyAttrs = 3;
19535IsMasked = false;
19536
19537 {
19538 if (IsMasked) {
19539 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19540 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19541 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19542 } else {
19543 if (PolicyAttrs & RVV_VTA)
19544 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19545 }
19546 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19547 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19548 if (IsMasked) {
19549 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19550 // maskedoff, op1, op2, mask, vl, policy
19551 IntrinsicTypes = {ResultType,
19552 Ops[1]->getType(),
19553 ElemTy,
19554 Ops[4]->getType()};
19555 } else {
19556 // passtru, op1, op2, vl
19557 IntrinsicTypes = {ResultType,
19558 Ops[1]->getType(),
19559 ElemTy,
19560 Ops[3]->getType()};
19561 }
19562 break;
19563 }
19564 break;
19565case RISCVVector::BI__builtin_rvv_vwaddu_vx_ta:
19566 ID = Intrinsic::riscv_vwaddu;
19567 PolicyAttrs = 3;
19568 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19569 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19570 break;
19571case RISCVVector::BI__builtin_rvv_vwaddu_vv_tum:
19572 ID = Intrinsic::riscv_vwaddu_mask;
19573 PolicyAttrs = 2;
19574 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19575 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19576 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19577 break;
19578case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tum:
19579 ID = Intrinsic::riscv_vwaddu_mask;
19580 PolicyAttrs = 2;
19581IsMasked = true;
19582
19583 {
19584 if (IsMasked) {
19585 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19586 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19587 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19588 } else {
19589 if (PolicyAttrs & RVV_VTA)
19590 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19591 }
19592 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19593 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19594 if (IsMasked) {
19595 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19596 // maskedoff, op1, op2, mask, vl, policy
19597 IntrinsicTypes = {ResultType,
19598 Ops[1]->getType(),
19599 ElemTy,
19600 Ops[4]->getType()};
19601 } else {
19602 // passtru, op1, op2, vl
19603 IntrinsicTypes = {ResultType,
19604 Ops[1]->getType(),
19605 ElemTy,
19606 Ops[3]->getType()};
19607 }
19608 break;
19609 }
19610 break;
19611case RISCVVector::BI__builtin_rvv_vwaddu_vx_tum:
19612 ID = Intrinsic::riscv_vwaddu_mask;
19613 PolicyAttrs = 2;
19614 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19615 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19616 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19617 break;
19618case RISCVVector::BI__builtin_rvv_vwaddu_vv_tama:
19619 ID = Intrinsic::riscv_vwaddu_mask;
19620 PolicyAttrs = 3;
19621 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19622 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19623 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19624 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19625 break;
19626case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tama:
19627 ID = Intrinsic::riscv_vwaddu_mask;
19628 PolicyAttrs = 3;
19629IsMasked = true;
19630
19631 {
19632 if (IsMasked) {
19633 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19634 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19635 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19636 } else {
19637 if (PolicyAttrs & RVV_VTA)
19638 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19639 }
19640 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19641 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19642 if (IsMasked) {
19643 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19644 // maskedoff, op1, op2, mask, vl, policy
19645 IntrinsicTypes = {ResultType,
19646 Ops[1]->getType(),
19647 ElemTy,
19648 Ops[4]->getType()};
19649 } else {
19650 // passtru, op1, op2, vl
19651 IntrinsicTypes = {ResultType,
19652 Ops[1]->getType(),
19653 ElemTy,
19654 Ops[3]->getType()};
19655 }
19656 break;
19657 }
19658 break;
19659case RISCVVector::BI__builtin_rvv_vwaddu_vx_tama:
19660 ID = Intrinsic::riscv_vwaddu_mask;
19661 PolicyAttrs = 3;
19662 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19663 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19664 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19665 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19666 break;
19667case RISCVVector::BI__builtin_rvv_vwaddu_vv_tumu:
19668 ID = Intrinsic::riscv_vwaddu_mask;
19669 PolicyAttrs = 0;
19670 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19671 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19672 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19673 break;
19674case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tumu:
19675 ID = Intrinsic::riscv_vwaddu_mask;
19676 PolicyAttrs = 0;
19677IsMasked = true;
19678
19679 {
19680 if (IsMasked) {
19681 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19682 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19683 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19684 } else {
19685 if (PolicyAttrs & RVV_VTA)
19686 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19687 }
19688 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19689 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19690 if (IsMasked) {
19691 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19692 // maskedoff, op1, op2, mask, vl, policy
19693 IntrinsicTypes = {ResultType,
19694 Ops[1]->getType(),
19695 ElemTy,
19696 Ops[4]->getType()};
19697 } else {
19698 // passtru, op1, op2, vl
19699 IntrinsicTypes = {ResultType,
19700 Ops[1]->getType(),
19701 ElemTy,
19702 Ops[3]->getType()};
19703 }
19704 break;
19705 }
19706 break;
19707case RISCVVector::BI__builtin_rvv_vwaddu_vx_tumu:
19708 ID = Intrinsic::riscv_vwaddu_mask;
19709 PolicyAttrs = 0;
19710 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19711 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19712 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19713 break;
19714case RISCVVector::BI__builtin_rvv_vwaddu_vv_mu:
19715 ID = Intrinsic::riscv_vwaddu_mask;
19716 PolicyAttrs = 1;
19717 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19718 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19719 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19720 break;
19721case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_mu:
19722 ID = Intrinsic::riscv_vwaddu_mask;
19723 PolicyAttrs = 1;
19724IsMasked = true;
19725
19726 {
19727 if (IsMasked) {
19728 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19729 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19730 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19731 } else {
19732 if (PolicyAttrs & RVV_VTA)
19733 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19734 }
19735 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19736 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19737 if (IsMasked) {
19738 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19739 // maskedoff, op1, op2, mask, vl, policy
19740 IntrinsicTypes = {ResultType,
19741 Ops[1]->getType(),
19742 ElemTy,
19743 Ops[4]->getType()};
19744 } else {
19745 // passtru, op1, op2, vl
19746 IntrinsicTypes = {ResultType,
19747 Ops[1]->getType(),
19748 ElemTy,
19749 Ops[3]->getType()};
19750 }
19751 break;
19752 }
19753 break;
19754case RISCVVector::BI__builtin_rvv_vwaddu_vx_mu:
19755 ID = Intrinsic::riscv_vwaddu_mask;
19756 PolicyAttrs = 1;
19757 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19758 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19759 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19760 break;
19761case RISCVVector::BI__builtin_rvv_vwaddu_wv_tu:
19762case RISCVVector::BI__builtin_rvv_vwaddu_wx_tu:
19763 ID = Intrinsic::riscv_vwaddu_w;
19764 PolicyAttrs = 2;
19765 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19766 break;
19767case RISCVVector::BI__builtin_rvv_vwaddu_wv_ta:
19768case RISCVVector::BI__builtin_rvv_vwaddu_wx_ta:
19769 ID = Intrinsic::riscv_vwaddu_w;
19770 PolicyAttrs = 3;
19771 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19772 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19773 break;
19774case RISCVVector::BI__builtin_rvv_vwaddu_wv_tum:
19775case RISCVVector::BI__builtin_rvv_vwaddu_wx_tum:
19776 ID = Intrinsic::riscv_vwaddu_w_mask;
19777 PolicyAttrs = 2;
19778 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19779 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19780 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19781 break;
19782case RISCVVector::BI__builtin_rvv_vwaddu_wv_tama:
19783case RISCVVector::BI__builtin_rvv_vwaddu_wx_tama:
19784 ID = Intrinsic::riscv_vwaddu_w_mask;
19785 PolicyAttrs = 3;
19786 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19787 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19788 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19789 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19790 break;
19791case RISCVVector::BI__builtin_rvv_vwaddu_wv_tumu:
19792case RISCVVector::BI__builtin_rvv_vwaddu_wx_tumu:
19793 ID = Intrinsic::riscv_vwaddu_w_mask;
19794 PolicyAttrs = 0;
19795 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19796 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19797 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19798 break;
19799case RISCVVector::BI__builtin_rvv_vwaddu_wv_mu:
19800case RISCVVector::BI__builtin_rvv_vwaddu_wx_mu:
19801 ID = Intrinsic::riscv_vwaddu_w_mask;
19802 PolicyAttrs = 1;
19803 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19804 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19805 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19806 break;
19807case RISCVVector::BI__builtin_rvv_vwmacc_vv_tu:
19808case RISCVVector::BI__builtin_rvv_vwmacc_vx_tu:
19809 ID = Intrinsic::riscv_vwmacc;
19810 PolicyAttrs = 2;
19811 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19812 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19813 break;
19814case RISCVVector::BI__builtin_rvv_vwmacc_vv_ta:
19815case RISCVVector::BI__builtin_rvv_vwmacc_vx_ta:
19816 ID = Intrinsic::riscv_vwmacc;
19817 PolicyAttrs = 3;
19818 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19819 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19820 break;
19821case RISCVVector::BI__builtin_rvv_vwmacc_vv_tum:
19822case RISCVVector::BI__builtin_rvv_vwmacc_vx_tum:
19823 ID = Intrinsic::riscv_vwmacc_mask;
19824 PolicyAttrs = 2;
19825 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19826 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19827 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19828 break;
19829case RISCVVector::BI__builtin_rvv_vwmacc_vv_tama:
19830case RISCVVector::BI__builtin_rvv_vwmacc_vx_tama:
19831 ID = Intrinsic::riscv_vwmacc_mask;
19832 PolicyAttrs = 3;
19833 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19834 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19835 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19836 break;
19837case RISCVVector::BI__builtin_rvv_vwmacc_vv_tumu:
19838case RISCVVector::BI__builtin_rvv_vwmacc_vx_tumu:
19839 ID = Intrinsic::riscv_vwmacc_mask;
19840 PolicyAttrs = 0;
19841 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19842 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19843 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19844 break;
19845case RISCVVector::BI__builtin_rvv_vwmacc_vv_mu:
19846case RISCVVector::BI__builtin_rvv_vwmacc_vx_mu:
19847 ID = Intrinsic::riscv_vwmacc_mask;
19848 PolicyAttrs = 1;
19849 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19850 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19851 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19852 break;
19853case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tu:
19854case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tu:
19855 ID = Intrinsic::riscv_vwmaccsu;
19856 PolicyAttrs = 2;
19857 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19858 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19859 break;
19860case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_ta:
19861case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_ta:
19862 ID = Intrinsic::riscv_vwmaccsu;
19863 PolicyAttrs = 3;
19864 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19865 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19866 break;
19867case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tum:
19868case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tum:
19869 ID = Intrinsic::riscv_vwmaccsu_mask;
19870 PolicyAttrs = 2;
19871 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19872 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19873 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19874 break;
19875case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tama:
19876case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tama:
19877 ID = Intrinsic::riscv_vwmaccsu_mask;
19878 PolicyAttrs = 3;
19879 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19880 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19881 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19882 break;
19883case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tumu:
19884case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tumu:
19885 ID = Intrinsic::riscv_vwmaccsu_mask;
19886 PolicyAttrs = 0;
19887 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19888 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19889 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19890 break;
19891case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_mu:
19892case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_mu:
19893 ID = Intrinsic::riscv_vwmaccsu_mask;
19894 PolicyAttrs = 1;
19895 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19896 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19897 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19898 break;
19899case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tu:
19900case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tu:
19901 ID = Intrinsic::riscv_vwmaccu;
19902 PolicyAttrs = 2;
19903 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19904 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19905 break;
19906case RISCVVector::BI__builtin_rvv_vwmaccu_vv_ta:
19907case RISCVVector::BI__builtin_rvv_vwmaccu_vx_ta:
19908 ID = Intrinsic::riscv_vwmaccu;
19909 PolicyAttrs = 3;
19910 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19911 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19912 break;
19913case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tum:
19914case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tum:
19915 ID = Intrinsic::riscv_vwmaccu_mask;
19916 PolicyAttrs = 2;
19917 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19918 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19919 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19920 break;
19921case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tama:
19922case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tama:
19923 ID = Intrinsic::riscv_vwmaccu_mask;
19924 PolicyAttrs = 3;
19925 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19926 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19927 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19928 break;
19929case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tumu:
19930case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tumu:
19931 ID = Intrinsic::riscv_vwmaccu_mask;
19932 PolicyAttrs = 0;
19933 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19934 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19935 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19936 break;
19937case RISCVVector::BI__builtin_rvv_vwmaccu_vv_mu:
19938case RISCVVector::BI__builtin_rvv_vwmaccu_vx_mu:
19939 ID = Intrinsic::riscv_vwmaccu_mask;
19940 PolicyAttrs = 1;
19941 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19942 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19943 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19944 break;
19945case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tu:
19946 ID = Intrinsic::riscv_vwmaccus;
19947 PolicyAttrs = 2;
19948 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19949 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19950 break;
19951case RISCVVector::BI__builtin_rvv_vwmaccus_vx_ta:
19952 ID = Intrinsic::riscv_vwmaccus;
19953 PolicyAttrs = 3;
19954 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19955 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19956 break;
19957case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tum:
19958 ID = Intrinsic::riscv_vwmaccus_mask;
19959 PolicyAttrs = 2;
19960 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19961 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19962 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19963 break;
19964case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tama:
19965 ID = Intrinsic::riscv_vwmaccus_mask;
19966 PolicyAttrs = 3;
19967 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19968 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19969 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19970 break;
19971case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tumu:
19972 ID = Intrinsic::riscv_vwmaccus_mask;
19973 PolicyAttrs = 0;
19974 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19975 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19976 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19977 break;
19978case RISCVVector::BI__builtin_rvv_vwmaccus_vx_mu:
19979 ID = Intrinsic::riscv_vwmaccus_mask;
19980 PolicyAttrs = 1;
19981 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19982 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19983 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19984 break;
19985case RISCVVector::BI__builtin_rvv_vwmul_vv_tu:
19986case RISCVVector::BI__builtin_rvv_vwmul_vx_tu:
19987 ID = Intrinsic::riscv_vwmul;
19988 PolicyAttrs = 2;
19989 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19990 break;
19991case RISCVVector::BI__builtin_rvv_vwmul_vv_ta:
19992case RISCVVector::BI__builtin_rvv_vwmul_vx_ta:
19993 ID = Intrinsic::riscv_vwmul;
19994 PolicyAttrs = 3;
19995 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19996 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19997 break;
19998case RISCVVector::BI__builtin_rvv_vwmul_vv_tum:
19999case RISCVVector::BI__builtin_rvv_vwmul_vx_tum:
20000 ID = Intrinsic::riscv_vwmul_mask;
20001 PolicyAttrs = 2;
20002 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20003 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20004 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20005 break;
20006case RISCVVector::BI__builtin_rvv_vwmul_vv_tama:
20007case RISCVVector::BI__builtin_rvv_vwmul_vx_tama:
20008 ID = Intrinsic::riscv_vwmul_mask;
20009 PolicyAttrs = 3;
20010 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20011 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20012 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20013 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20014 break;
20015case RISCVVector::BI__builtin_rvv_vwmul_vv_tumu:
20016case RISCVVector::BI__builtin_rvv_vwmul_vx_tumu:
20017 ID = Intrinsic::riscv_vwmul_mask;
20018 PolicyAttrs = 0;
20019 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20020 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20021 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20022 break;
20023case RISCVVector::BI__builtin_rvv_vwmul_vv_mu:
20024case RISCVVector::BI__builtin_rvv_vwmul_vx_mu:
20025 ID = Intrinsic::riscv_vwmul_mask;
20026 PolicyAttrs = 1;
20027 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20028 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20029 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20030 break;
20031case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tu:
20032case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tu:
20033 ID = Intrinsic::riscv_vwmulsu;
20034 PolicyAttrs = 2;
20035 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20036 break;
20037case RISCVVector::BI__builtin_rvv_vwmulsu_vv_ta:
20038case RISCVVector::BI__builtin_rvv_vwmulsu_vx_ta:
20039 ID = Intrinsic::riscv_vwmulsu;
20040 PolicyAttrs = 3;
20041 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20042 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20043 break;
20044case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tum:
20045case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tum:
20046 ID = Intrinsic::riscv_vwmulsu_mask;
20047 PolicyAttrs = 2;
20048 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20049 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20050 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20051 break;
20052case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tama:
20053case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tama:
20054 ID = Intrinsic::riscv_vwmulsu_mask;
20055 PolicyAttrs = 3;
20056 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20057 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20058 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20059 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20060 break;
20061case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tumu:
20062case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tumu:
20063 ID = Intrinsic::riscv_vwmulsu_mask;
20064 PolicyAttrs = 0;
20065 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20066 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20067 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20068 break;
20069case RISCVVector::BI__builtin_rvv_vwmulsu_vv_mu:
20070case RISCVVector::BI__builtin_rvv_vwmulsu_vx_mu:
20071 ID = Intrinsic::riscv_vwmulsu_mask;
20072 PolicyAttrs = 1;
20073 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20074 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20075 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20076 break;
20077case RISCVVector::BI__builtin_rvv_vwmulu_vv_tu:
20078case RISCVVector::BI__builtin_rvv_vwmulu_vx_tu:
20079 ID = Intrinsic::riscv_vwmulu;
20080 PolicyAttrs = 2;
20081 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20082 break;
20083case RISCVVector::BI__builtin_rvv_vwmulu_vv_ta:
20084case RISCVVector::BI__builtin_rvv_vwmulu_vx_ta:
20085 ID = Intrinsic::riscv_vwmulu;
20086 PolicyAttrs = 3;
20087 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20088 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20089 break;
20090case RISCVVector::BI__builtin_rvv_vwmulu_vv_tum:
20091case RISCVVector::BI__builtin_rvv_vwmulu_vx_tum:
20092 ID = Intrinsic::riscv_vwmulu_mask;
20093 PolicyAttrs = 2;
20094 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20095 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20096 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20097 break;
20098case RISCVVector::BI__builtin_rvv_vwmulu_vv_tama:
20099case RISCVVector::BI__builtin_rvv_vwmulu_vx_tama:
20100 ID = Intrinsic::riscv_vwmulu_mask;
20101 PolicyAttrs = 3;
20102 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20103 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20104 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20105 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20106 break;
20107case RISCVVector::BI__builtin_rvv_vwmulu_vv_tumu:
20108case RISCVVector::BI__builtin_rvv_vwmulu_vx_tumu:
20109 ID = Intrinsic::riscv_vwmulu_mask;
20110 PolicyAttrs = 0;
20111 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20112 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20113 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20114 break;
20115case RISCVVector::BI__builtin_rvv_vwmulu_vv_mu:
20116case RISCVVector::BI__builtin_rvv_vwmulu_vx_mu:
20117 ID = Intrinsic::riscv_vwmulu_mask;
20118 PolicyAttrs = 1;
20119 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20120 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20121 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20122 break;
20123case RISCVVector::BI__builtin_rvv_vwredsum_vs_tu:
20124 ID = Intrinsic::riscv_vwredsum;
20125 PolicyAttrs = 2;
20126 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20127 break;
20128case RISCVVector::BI__builtin_rvv_vwredsum_vs_ta:
20129 ID = Intrinsic::riscv_vwredsum;
20130 PolicyAttrs = 3;
20131 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20132 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20133 break;
20134case RISCVVector::BI__builtin_rvv_vwredsum_vs_tum:
20135 ID = Intrinsic::riscv_vwredsum_mask;
20136 PolicyAttrs = 2;
20137 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20138 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20139 break;
20140case RISCVVector::BI__builtin_rvv_vwredsum_vs_tama:
20141 ID = Intrinsic::riscv_vwredsum_mask;
20142 PolicyAttrs = 3;
20143 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20144 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20145 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20146 break;
20147case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tu:
20148 ID = Intrinsic::riscv_vwredsumu;
20149 PolicyAttrs = 2;
20150 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20151 break;
20152case RISCVVector::BI__builtin_rvv_vwredsumu_vs_ta:
20153 ID = Intrinsic::riscv_vwredsumu;
20154 PolicyAttrs = 3;
20155 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20156 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20157 break;
20158case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tum:
20159 ID = Intrinsic::riscv_vwredsumu_mask;
20160 PolicyAttrs = 2;
20161 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20162 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20163 break;
20164case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tama:
20165 ID = Intrinsic::riscv_vwredsumu_mask;
20166 PolicyAttrs = 3;
20167 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20168 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20169 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20170 break;
20171case RISCVVector::BI__builtin_rvv_vwsub_vv_tu:
20172case RISCVVector::BI__builtin_rvv_vwsub_vx_tu:
20173 ID = Intrinsic::riscv_vwsub;
20174 PolicyAttrs = 2;
20175 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20176 break;
20177case RISCVVector::BI__builtin_rvv_vwsub_vv_ta:
20178case RISCVVector::BI__builtin_rvv_vwsub_vx_ta:
20179 ID = Intrinsic::riscv_vwsub;
20180 PolicyAttrs = 3;
20181 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20182 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20183 break;
20184case RISCVVector::BI__builtin_rvv_vwsub_vv_tum:
20185case RISCVVector::BI__builtin_rvv_vwsub_vx_tum:
20186 ID = Intrinsic::riscv_vwsub_mask;
20187 PolicyAttrs = 2;
20188 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20189 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20190 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20191 break;
20192case RISCVVector::BI__builtin_rvv_vwsub_vv_tama:
20193case RISCVVector::BI__builtin_rvv_vwsub_vx_tama:
20194 ID = Intrinsic::riscv_vwsub_mask;
20195 PolicyAttrs = 3;
20196 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20197 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20198 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20199 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20200 break;
20201case RISCVVector::BI__builtin_rvv_vwsub_vv_tumu:
20202case RISCVVector::BI__builtin_rvv_vwsub_vx_tumu:
20203 ID = Intrinsic::riscv_vwsub_mask;
20204 PolicyAttrs = 0;
20205 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20206 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20207 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20208 break;
20209case RISCVVector::BI__builtin_rvv_vwsub_vv_mu:
20210case RISCVVector::BI__builtin_rvv_vwsub_vx_mu:
20211 ID = Intrinsic::riscv_vwsub_mask;
20212 PolicyAttrs = 1;
20213 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20214 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20215 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20216 break;
20217case RISCVVector::BI__builtin_rvv_vwsub_wv_tu:
20218case RISCVVector::BI__builtin_rvv_vwsub_wx_tu:
20219 ID = Intrinsic::riscv_vwsub_w;
20220 PolicyAttrs = 2;
20221 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20222 break;
20223case RISCVVector::BI__builtin_rvv_vwsub_wv_ta:
20224case RISCVVector::BI__builtin_rvv_vwsub_wx_ta:
20225 ID = Intrinsic::riscv_vwsub_w;
20226 PolicyAttrs = 3;
20227 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20228 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20229 break;
20230case RISCVVector::BI__builtin_rvv_vwsub_wv_tum:
20231case RISCVVector::BI__builtin_rvv_vwsub_wx_tum:
20232 ID = Intrinsic::riscv_vwsub_w_mask;
20233 PolicyAttrs = 2;
20234 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20235 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20236 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20237 break;
20238case RISCVVector::BI__builtin_rvv_vwsub_wv_tama:
20239case RISCVVector::BI__builtin_rvv_vwsub_wx_tama:
20240 ID = Intrinsic::riscv_vwsub_w_mask;
20241 PolicyAttrs = 3;
20242 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20243 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20244 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20245 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20246 break;
20247case RISCVVector::BI__builtin_rvv_vwsub_wv_tumu:
20248case RISCVVector::BI__builtin_rvv_vwsub_wx_tumu:
20249 ID = Intrinsic::riscv_vwsub_w_mask;
20250 PolicyAttrs = 0;
20251 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20252 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20253 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20254 break;
20255case RISCVVector::BI__builtin_rvv_vwsub_wv_mu:
20256case RISCVVector::BI__builtin_rvv_vwsub_wx_mu:
20257 ID = Intrinsic::riscv_vwsub_w_mask;
20258 PolicyAttrs = 1;
20259 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20260 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20261 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20262 break;
20263case RISCVVector::BI__builtin_rvv_vwsubu_vv_tu:
20264case RISCVVector::BI__builtin_rvv_vwsubu_vx_tu:
20265 ID = Intrinsic::riscv_vwsubu;
20266 PolicyAttrs = 2;
20267 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20268 break;
20269case RISCVVector::BI__builtin_rvv_vwsubu_vv_ta:
20270case RISCVVector::BI__builtin_rvv_vwsubu_vx_ta:
20271 ID = Intrinsic::riscv_vwsubu;
20272 PolicyAttrs = 3;
20273 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20274 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20275 break;
20276case RISCVVector::BI__builtin_rvv_vwsubu_vv_tum:
20277case RISCVVector::BI__builtin_rvv_vwsubu_vx_tum:
20278 ID = Intrinsic::riscv_vwsubu_mask;
20279 PolicyAttrs = 2;
20280 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20281 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20282 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20283 break;
20284case RISCVVector::BI__builtin_rvv_vwsubu_vv_tama:
20285case RISCVVector::BI__builtin_rvv_vwsubu_vx_tama:
20286 ID = Intrinsic::riscv_vwsubu_mask;
20287 PolicyAttrs = 3;
20288 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20289 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20290 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20291 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20292 break;
20293case RISCVVector::BI__builtin_rvv_vwsubu_vv_tumu:
20294case RISCVVector::BI__builtin_rvv_vwsubu_vx_tumu:
20295 ID = Intrinsic::riscv_vwsubu_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[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20300 break;
20301case RISCVVector::BI__builtin_rvv_vwsubu_vv_mu:
20302case RISCVVector::BI__builtin_rvv_vwsubu_vx_mu:
20303 ID = Intrinsic::riscv_vwsubu_mask;
20304 PolicyAttrs = 1;
20305 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20306 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20307 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20308 break;
20309case RISCVVector::BI__builtin_rvv_vwsubu_wv_tu:
20310case RISCVVector::BI__builtin_rvv_vwsubu_wx_tu:
20311 ID = Intrinsic::riscv_vwsubu_w;
20312 PolicyAttrs = 2;
20313 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20314 break;
20315case RISCVVector::BI__builtin_rvv_vwsubu_wv_ta:
20316case RISCVVector::BI__builtin_rvv_vwsubu_wx_ta:
20317 ID = Intrinsic::riscv_vwsubu_w;
20318 PolicyAttrs = 3;
20319 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20320 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20321 break;
20322case RISCVVector::BI__builtin_rvv_vwsubu_wv_tum:
20323case RISCVVector::BI__builtin_rvv_vwsubu_wx_tum:
20324 ID = Intrinsic::riscv_vwsubu_w_mask;
20325 PolicyAttrs = 2;
20326 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20327 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20328 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20329 break;
20330case RISCVVector::BI__builtin_rvv_vwsubu_wv_tama:
20331case RISCVVector::BI__builtin_rvv_vwsubu_wx_tama:
20332 ID = Intrinsic::riscv_vwsubu_w_mask;
20333 PolicyAttrs = 3;
20334 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20335 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20336 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20337 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20338 break;
20339case RISCVVector::BI__builtin_rvv_vwsubu_wv_tumu:
20340case RISCVVector::BI__builtin_rvv_vwsubu_wx_tumu:
20341 ID = Intrinsic::riscv_vwsubu_w_mask;
20342 PolicyAttrs = 0;
20343 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20344 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20345 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20346 break;
20347case RISCVVector::BI__builtin_rvv_vwsubu_wv_mu:
20348case RISCVVector::BI__builtin_rvv_vwsubu_wx_mu:
20349 ID = Intrinsic::riscv_vwsubu_w_mask;
20350 PolicyAttrs = 1;
20351 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20352 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20353 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20354 break;
20355case RISCVVector::BI__builtin_rvv_vnot_v_tu:
20356 ID = Intrinsic::riscv_vxor;
20357 PolicyAttrs = 2;
20358IsMasked = false;
20359
20360 {
20361 if (IsMasked) {
20362 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20363 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20364 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20365 } else {
20366 if (PolicyAttrs & RVV_VTA)
20367 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20368 }
20369 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20370 Ops.insert(Ops.begin() + 2,
20371 llvm::Constant::getAllOnesValue(ElemTy));
20372 if (IsMasked) {
20373 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20374 // maskedoff, op1, po2, mask, vl, policy
20375 IntrinsicTypes = {ResultType,
20376 ElemTy,
20377 Ops[4]->getType()};
20378 } else {
20379 // passthru, op1, op2, vl
20380 IntrinsicTypes = {ResultType,
20381 ElemTy,
20382 Ops[3]->getType()};
20383 }
20384 break;
20385 }
20386 break;
20387case RISCVVector::BI__builtin_rvv_vxor_vv_tu:
20388case RISCVVector::BI__builtin_rvv_vxor_vx_tu:
20389 ID = Intrinsic::riscv_vxor;
20390 PolicyAttrs = 2;
20391 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20392 break;
20393case RISCVVector::BI__builtin_rvv_vnot_v_ta:
20394 ID = Intrinsic::riscv_vxor;
20395 PolicyAttrs = 3;
20396IsMasked = false;
20397
20398 {
20399 if (IsMasked) {
20400 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20401 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20402 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20403 } else {
20404 if (PolicyAttrs & RVV_VTA)
20405 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20406 }
20407 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20408 Ops.insert(Ops.begin() + 2,
20409 llvm::Constant::getAllOnesValue(ElemTy));
20410 if (IsMasked) {
20411 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20412 // maskedoff, op1, po2, mask, vl, policy
20413 IntrinsicTypes = {ResultType,
20414 ElemTy,
20415 Ops[4]->getType()};
20416 } else {
20417 // passthru, op1, op2, vl
20418 IntrinsicTypes = {ResultType,
20419 ElemTy,
20420 Ops[3]->getType()};
20421 }
20422 break;
20423 }
20424 break;
20425case RISCVVector::BI__builtin_rvv_vxor_vv_ta:
20426case RISCVVector::BI__builtin_rvv_vxor_vx_ta:
20427 ID = Intrinsic::riscv_vxor;
20428 PolicyAttrs = 3;
20429 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20430 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20431 break;
20432case RISCVVector::BI__builtin_rvv_vnot_v_tum:
20433 ID = Intrinsic::riscv_vxor_mask;
20434 PolicyAttrs = 2;
20435IsMasked = true;
20436
20437 {
20438 if (IsMasked) {
20439 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20440 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20441 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20442 } else {
20443 if (PolicyAttrs & RVV_VTA)
20444 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20445 }
20446 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20447 Ops.insert(Ops.begin() + 2,
20448 llvm::Constant::getAllOnesValue(ElemTy));
20449 if (IsMasked) {
20450 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20451 // maskedoff, op1, po2, mask, vl, policy
20452 IntrinsicTypes = {ResultType,
20453 ElemTy,
20454 Ops[4]->getType()};
20455 } else {
20456 // passthru, op1, op2, vl
20457 IntrinsicTypes = {ResultType,
20458 ElemTy,
20459 Ops[3]->getType()};
20460 }
20461 break;
20462 }
20463 break;
20464case RISCVVector::BI__builtin_rvv_vxor_vv_tum:
20465case RISCVVector::BI__builtin_rvv_vxor_vx_tum:
20466 ID = Intrinsic::riscv_vxor_mask;
20467 PolicyAttrs = 2;
20468 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20469 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20470 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20471 break;
20472case RISCVVector::BI__builtin_rvv_vnot_v_tama:
20473 ID = Intrinsic::riscv_vxor_mask;
20474 PolicyAttrs = 3;
20475IsMasked = true;
20476
20477 {
20478 if (IsMasked) {
20479 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20480 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20481 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20482 } else {
20483 if (PolicyAttrs & RVV_VTA)
20484 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20485 }
20486 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20487 Ops.insert(Ops.begin() + 2,
20488 llvm::Constant::getAllOnesValue(ElemTy));
20489 if (IsMasked) {
20490 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20491 // maskedoff, op1, po2, mask, vl, policy
20492 IntrinsicTypes = {ResultType,
20493 ElemTy,
20494 Ops[4]->getType()};
20495 } else {
20496 // passthru, op1, op2, vl
20497 IntrinsicTypes = {ResultType,
20498 ElemTy,
20499 Ops[3]->getType()};
20500 }
20501 break;
20502 }
20503 break;
20504case RISCVVector::BI__builtin_rvv_vxor_vv_tama:
20505case RISCVVector::BI__builtin_rvv_vxor_vx_tama:
20506 ID = Intrinsic::riscv_vxor_mask;
20507 PolicyAttrs = 3;
20508 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20509 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20510 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20511 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20512 break;
20513case RISCVVector::BI__builtin_rvv_vnot_v_tumu:
20514 ID = Intrinsic::riscv_vxor_mask;
20515 PolicyAttrs = 0;
20516IsMasked = true;
20517
20518 {
20519 if (IsMasked) {
20520 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20521 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20522 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20523 } else {
20524 if (PolicyAttrs & RVV_VTA)
20525 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20526 }
20527 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20528 Ops.insert(Ops.begin() + 2,
20529 llvm::Constant::getAllOnesValue(ElemTy));
20530 if (IsMasked) {
20531 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20532 // maskedoff, op1, po2, mask, vl, policy
20533 IntrinsicTypes = {ResultType,
20534 ElemTy,
20535 Ops[4]->getType()};
20536 } else {
20537 // passthru, op1, op2, vl
20538 IntrinsicTypes = {ResultType,
20539 ElemTy,
20540 Ops[3]->getType()};
20541 }
20542 break;
20543 }
20544 break;
20545case RISCVVector::BI__builtin_rvv_vxor_vv_tumu:
20546case RISCVVector::BI__builtin_rvv_vxor_vx_tumu:
20547 ID = Intrinsic::riscv_vxor_mask;
20548 PolicyAttrs = 0;
20549 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20550 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20551 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20552 break;
20553case RISCVVector::BI__builtin_rvv_vnot_v_mu:
20554 ID = Intrinsic::riscv_vxor_mask;
20555 PolicyAttrs = 1;
20556IsMasked = true;
20557
20558 {
20559 if (IsMasked) {
20560 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20561 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20562 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20563 } else {
20564 if (PolicyAttrs & RVV_VTA)
20565 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20566 }
20567 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20568 Ops.insert(Ops.begin() + 2,
20569 llvm::Constant::getAllOnesValue(ElemTy));
20570 if (IsMasked) {
20571 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20572 // maskedoff, op1, po2, mask, vl, policy
20573 IntrinsicTypes = {ResultType,
20574 ElemTy,
20575 Ops[4]->getType()};
20576 } else {
20577 // passthru, op1, op2, vl
20578 IntrinsicTypes = {ResultType,
20579 ElemTy,
20580 Ops[3]->getType()};
20581 }
20582 break;
20583 }
20584 break;
20585case RISCVVector::BI__builtin_rvv_vxor_vv_mu:
20586case RISCVVector::BI__builtin_rvv_vxor_vx_mu:
20587 ID = Intrinsic::riscv_vxor_mask;
20588 PolicyAttrs = 1;
20589 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20590 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20591 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20592 break;
20593case RISCVVector::BI__builtin_rvv_vzext_vf2_tu:
20594case RISCVVector::BI__builtin_rvv_vzext_vf4_tu:
20595case RISCVVector::BI__builtin_rvv_vzext_vf8_tu:
20596 ID = Intrinsic::riscv_vzext;
20597 PolicyAttrs = 2;
20598 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20599 break;
20600case RISCVVector::BI__builtin_rvv_vzext_vf2_ta:
20601case RISCVVector::BI__builtin_rvv_vzext_vf4_ta:
20602case RISCVVector::BI__builtin_rvv_vzext_vf8_ta:
20603 ID = Intrinsic::riscv_vzext;
20604 PolicyAttrs = 3;
20605 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20606 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20607 break;
20608case RISCVVector::BI__builtin_rvv_vzext_vf2_tum:
20609case RISCVVector::BI__builtin_rvv_vzext_vf4_tum:
20610case RISCVVector::BI__builtin_rvv_vzext_vf8_tum:
20611 ID = Intrinsic::riscv_vzext_mask;
20612 PolicyAttrs = 2;
20613 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20614 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20615 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20616 break;
20617case RISCVVector::BI__builtin_rvv_vzext_vf2_tama:
20618case RISCVVector::BI__builtin_rvv_vzext_vf4_tama:
20619case RISCVVector::BI__builtin_rvv_vzext_vf8_tama:
20620 ID = Intrinsic::riscv_vzext_mask;
20621 PolicyAttrs = 3;
20622 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20623 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20624 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20625 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20626 break;
20627case RISCVVector::BI__builtin_rvv_vzext_vf2_tumu:
20628case RISCVVector::BI__builtin_rvv_vzext_vf4_tumu:
20629case RISCVVector::BI__builtin_rvv_vzext_vf8_tumu:
20630 ID = Intrinsic::riscv_vzext_mask;
20631 PolicyAttrs = 0;
20632 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20633 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20634 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20635 break;
20636case RISCVVector::BI__builtin_rvv_vzext_vf2_mu:
20637case RISCVVector::BI__builtin_rvv_vzext_vf4_mu:
20638case RISCVVector::BI__builtin_rvv_vzext_vf8_mu:
20639 ID = Intrinsic::riscv_vzext_mask;
20640 PolicyAttrs = 1;
20641 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20642 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20643 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20644 break;
20645