Bug Summary

File:build/source/build-llvm/tools/clang/include/clang/Basic/riscv_vector_builtin_cg.inc
Warning:line 3321, 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-16/lib/clang/16 -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 _GNU_SOURCE -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-16/lib/clang/16/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/build/source/build-llvm=build-llvm -fmacro-prefix-map=/build/source/= -fcoverage-prefix-map=/build/source/build-llvm=build-llvm -fcoverage-prefix-map=/build/source/= -source-date-epoch 1674602410 -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-01-25-024556-16494-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_tuma:
104case RISCVVector::BI__builtin_rvv_vaadd_vx_tuma:
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_tamu:
129case RISCVVector::BI__builtin_rvv_vaadd_vx_tamu:
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_tuma:
150case RISCVVector::BI__builtin_rvv_vaaddu_vx_tuma:
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_tamu:
175case RISCVVector::BI__builtin_rvv_vaaddu_vx_tamu:
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_tuma:
209case RISCVVector::BI__builtin_rvv_vadd_vx_tuma:
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_tamu:
234case RISCVVector::BI__builtin_rvv_vadd_vx_tamu:
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_tuma:
255case RISCVVector::BI__builtin_rvv_vand_vx_tuma:
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_tamu:
280case RISCVVector::BI__builtin_rvv_vand_vx_tamu:
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_tuma:
301case RISCVVector::BI__builtin_rvv_vasub_vx_tuma:
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_tamu:
326case RISCVVector::BI__builtin_rvv_vasub_vx_tamu:
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_tuma:
347case RISCVVector::BI__builtin_rvv_vasubu_vx_tuma:
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_tamu:
372case RISCVVector::BI__builtin_rvv_vasubu_vx_tamu:
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_tuma:
424case RISCVVector::BI__builtin_rvv_vdiv_vx_tuma:
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_tamu:
449case RISCVVector::BI__builtin_rvv_vdiv_vx_tamu:
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_tuma:
470case RISCVVector::BI__builtin_rvv_vdivu_vx_tuma:
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_tamu:
495case RISCVVector::BI__builtin_rvv_vdivu_vx_tamu:
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_tuma:
516case RISCVVector::BI__builtin_rvv_vfadd_vf_tuma:
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_tamu:
541case RISCVVector::BI__builtin_rvv_vfadd_vf_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
842case RISCVVector::BI__builtin_rvv_vfdiv_vf_tuma:
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_tamu:
867case RISCVVector::BI__builtin_rvv_vfdiv_vf_tamu:
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_tuma:
900case RISCVVector::BI__builtin_rvv_vfmacc_vf_tuma:
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_tamu:
924case RISCVVector::BI__builtin_rvv_vfmacc_vf_tamu:
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_tuma:
946case RISCVVector::BI__builtin_rvv_vfmadd_vf_tuma:
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_tamu:
970case RISCVVector::BI__builtin_rvv_vfmadd_vf_tamu:
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_tuma:
991case RISCVVector::BI__builtin_rvv_vfmax_vf_tuma:
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_tamu:
1016case RISCVVector::BI__builtin_rvv_vfmax_vf_tamu:
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_tuma:
1057case RISCVVector::BI__builtin_rvv_vfmin_vf_tuma:
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_tamu:
1082case RISCVVector::BI__builtin_rvv_vfmin_vf_tamu:
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_tuma:
1104case RISCVVector::BI__builtin_rvv_vfmsac_vf_tuma:
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_tamu:
1128case RISCVVector::BI__builtin_rvv_vfmsac_vf_tamu:
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_tuma:
1150case RISCVVector::BI__builtin_rvv_vfmsub_vf_tuma:
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_tamu:
1174case RISCVVector::BI__builtin_rvv_vfmsub_vf_tamu:
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_tuma:
1195case RISCVVector::BI__builtin_rvv_vfmul_vf_tuma:
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_tamu:
1220case RISCVVector::BI__builtin_rvv_vfmul_vf_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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_tuma:
1591case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tuma:
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_tamu:
1615case RISCVVector::BI__builtin_rvv_vfnmacc_vf_tamu:
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_tuma:
1637case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tuma:
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_tamu:
1661case RISCVVector::BI__builtin_rvv_vfnmadd_vf_tamu:
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_tuma:
1683case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tuma:
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_tamu:
1707case RISCVVector::BI__builtin_rvv_vfnmsac_vf_tamu:
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_tuma:
1729case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tuma:
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_tamu:
1753case RISCVVector::BI__builtin_rvv_vfnmsub_vf_tamu:
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_tuma:
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_tamu:
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_tuma:
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_tamu:
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:
1858case RISCVVector::BI__builtin_rvv_vfredmax_vs_tam:
1859 ID = Intrinsic::riscv_vfredmax_mask;
1860 PolicyAttrs = 3;
1861 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1862 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1863 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1864 break;
1865case RISCVVector::BI__builtin_rvv_vfredmin_vs_tu:
1866 ID = Intrinsic::riscv_vfredmin;
1867 PolicyAttrs = 2;
1868 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1869 break;
1870case RISCVVector::BI__builtin_rvv_vfredmin_vs_ta:
1871 ID = Intrinsic::riscv_vfredmin;
1872 PolicyAttrs = 3;
1873 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1874 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1875 break;
1876case RISCVVector::BI__builtin_rvv_vfredmin_vs_tum:
1877 ID = Intrinsic::riscv_vfredmin_mask;
1878 PolicyAttrs = 2;
1879 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1880 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1881 break;
1882case RISCVVector::BI__builtin_rvv_vfredmin_vs_tama:
1883case RISCVVector::BI__builtin_rvv_vfredmin_vs_tam:
1884 ID = Intrinsic::riscv_vfredmin_mask;
1885 PolicyAttrs = 3;
1886 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1887 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1888 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1889 break;
1890case RISCVVector::BI__builtin_rvv_vfredosum_vs_tu:
1891 ID = Intrinsic::riscv_vfredosum;
1892 PolicyAttrs = 2;
1893 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1894 break;
1895case RISCVVector::BI__builtin_rvv_vfredosum_vs_ta:
1896 ID = Intrinsic::riscv_vfredosum;
1897 PolicyAttrs = 3;
1898 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1899 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1900 break;
1901case RISCVVector::BI__builtin_rvv_vfredosum_vs_tum:
1902 ID = Intrinsic::riscv_vfredosum_mask;
1903 PolicyAttrs = 2;
1904 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1905 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1906 break;
1907case RISCVVector::BI__builtin_rvv_vfredosum_vs_tama:
1908case RISCVVector::BI__builtin_rvv_vfredosum_vs_tam:
1909 ID = Intrinsic::riscv_vfredosum_mask;
1910 PolicyAttrs = 3;
1911 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1912 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1913 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1914 break;
1915case RISCVVector::BI__builtin_rvv_vfredusum_vs_tu:
1916 ID = Intrinsic::riscv_vfredusum;
1917 PolicyAttrs = 2;
1918 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1919 break;
1920case RISCVVector::BI__builtin_rvv_vfredusum_vs_ta:
1921 ID = Intrinsic::riscv_vfredusum;
1922 PolicyAttrs = 3;
1923 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1924 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1925 break;
1926case RISCVVector::BI__builtin_rvv_vfredusum_vs_tum:
1927 ID = Intrinsic::riscv_vfredusum_mask;
1928 PolicyAttrs = 2;
1929 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1930 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1931 break;
1932case RISCVVector::BI__builtin_rvv_vfredusum_vs_tama:
1933case RISCVVector::BI__builtin_rvv_vfredusum_vs_tam:
1934 ID = Intrinsic::riscv_vfredusum_mask;
1935 PolicyAttrs = 3;
1936 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1937 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1938 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
1939 break;
1940case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tu:
1941 ID = Intrinsic::riscv_vfrsqrt7;
1942 PolicyAttrs = 2;
1943 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1944 break;
1945case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_ta:
1946 ID = Intrinsic::riscv_vfrsqrt7;
1947 PolicyAttrs = 3;
1948 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1949 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1950 break;
1951case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tuma:
1952 ID = Intrinsic::riscv_vfrsqrt7_mask;
1953 PolicyAttrs = 2;
1954 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1955 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1956 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1957 break;
1958case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tama:
1959 ID = Intrinsic::riscv_vfrsqrt7_mask;
1960 PolicyAttrs = 3;
1961 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1962 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1963 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1964 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1965 break;
1966case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tumu:
1967 ID = Intrinsic::riscv_vfrsqrt7_mask;
1968 PolicyAttrs = 0;
1969 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1970 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1971 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1972 break;
1973case RISCVVector::BI__builtin_rvv_vfrsqrt7_v_tamu:
1974 ID = Intrinsic::riscv_vfrsqrt7_mask;
1975 PolicyAttrs = 1;
1976 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1977 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1978 IntrinsicTypes = {ResultType, Ops.back()->getType()};
1979 break;
1980case RISCVVector::BI__builtin_rvv_vfrsub_vf_tu:
1981 ID = Intrinsic::riscv_vfrsub;
1982 PolicyAttrs = 2;
1983 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1984 break;
1985case RISCVVector::BI__builtin_rvv_vfrsub_vf_ta:
1986 ID = Intrinsic::riscv_vfrsub;
1987 PolicyAttrs = 3;
1988 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
1989 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1990 break;
1991case RISCVVector::BI__builtin_rvv_vfrsub_vf_tuma:
1992 ID = Intrinsic::riscv_vfrsub_mask;
1993 PolicyAttrs = 2;
1994 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
1995 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
1996 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
1997 break;
1998case RISCVVector::BI__builtin_rvv_vfrsub_vf_tama:
1999 ID = Intrinsic::riscv_vfrsub_mask;
2000 PolicyAttrs = 3;
2001 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2002 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2003 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2004 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2005 break;
2006case RISCVVector::BI__builtin_rvv_vfrsub_vf_tumu:
2007 ID = Intrinsic::riscv_vfrsub_mask;
2008 PolicyAttrs = 0;
2009 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2010 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2011 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2012 break;
2013case RISCVVector::BI__builtin_rvv_vfrsub_vf_tamu:
2014 ID = Intrinsic::riscv_vfrsub_mask;
2015 PolicyAttrs = 1;
2016 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2017 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2018 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2019 break;
2020case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tu:
2021case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tu:
2022 ID = Intrinsic::riscv_vfsgnj;
2023 PolicyAttrs = 2;
2024 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2025 break;
2026case RISCVVector::BI__builtin_rvv_vfsgnj_vv_ta:
2027case RISCVVector::BI__builtin_rvv_vfsgnj_vf_ta:
2028 ID = Intrinsic::riscv_vfsgnj;
2029 PolicyAttrs = 3;
2030 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2031 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2032 break;
2033case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tuma:
2034case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tuma:
2035 ID = Intrinsic::riscv_vfsgnj_mask;
2036 PolicyAttrs = 2;
2037 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2038 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2039 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2040 break;
2041case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tama:
2042case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tama:
2043 ID = Intrinsic::riscv_vfsgnj_mask;
2044 PolicyAttrs = 3;
2045 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2046 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2047 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2048 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2049 break;
2050case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tumu:
2051case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tumu:
2052 ID = Intrinsic::riscv_vfsgnj_mask;
2053 PolicyAttrs = 0;
2054 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2055 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2056 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2057 break;
2058case RISCVVector::BI__builtin_rvv_vfsgnj_vv_tamu:
2059case RISCVVector::BI__builtin_rvv_vfsgnj_vf_tamu:
2060 ID = Intrinsic::riscv_vfsgnj_mask;
2061 PolicyAttrs = 1;
2062 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2063 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2064 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2065 break;
2066case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tu:
2067case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tu:
2068 ID = Intrinsic::riscv_vfsgnjn;
2069 PolicyAttrs = 2;
2070 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2071 break;
2072case RISCVVector::BI__builtin_rvv_vfneg_v_tu:
2073 ID = Intrinsic::riscv_vfsgnjn;
2074 PolicyAttrs = 2;
2075IsMasked = false;
2076
2077 {
2078 if (IsMasked) {
2079 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2080 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2081 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2082 Ops.insert(Ops.begin() + 2, Ops[1]);
2083 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2084 // maskedoff, op1, op2, mask, vl
2085 IntrinsicTypes = {ResultType,
2086 Ops[2]->getType(),
2087 Ops.back()->getType()};
2088 } else {
2089 if (PolicyAttrs & RVV_VTA)
2090 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2091 // op1, po2, vl
2092 IntrinsicTypes = {ResultType,
2093 Ops[1]->getType(), Ops[2]->getType()};
2094 Ops.insert(Ops.begin() + 2, Ops[1]);
2095 break;
2096 }
2097 break;
2098 }
2099 break;
2100case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_ta:
2101case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_ta:
2102 ID = Intrinsic::riscv_vfsgnjn;
2103 PolicyAttrs = 3;
2104 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2105 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2106 break;
2107case RISCVVector::BI__builtin_rvv_vfneg_v_ta:
2108 ID = Intrinsic::riscv_vfsgnjn;
2109 PolicyAttrs = 3;
2110IsMasked = false;
2111
2112 {
2113 if (IsMasked) {
2114 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2115 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2116 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2117 Ops.insert(Ops.begin() + 2, Ops[1]);
2118 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2119 // maskedoff, op1, op2, mask, vl
2120 IntrinsicTypes = {ResultType,
2121 Ops[2]->getType(),
2122 Ops.back()->getType()};
2123 } else {
2124 if (PolicyAttrs & RVV_VTA)
2125 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2126 // op1, po2, vl
2127 IntrinsicTypes = {ResultType,
2128 Ops[1]->getType(), Ops[2]->getType()};
2129 Ops.insert(Ops.begin() + 2, Ops[1]);
2130 break;
2131 }
2132 break;
2133 }
2134 break;
2135case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tuma:
2136case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tuma:
2137 ID = Intrinsic::riscv_vfsgnjn_mask;
2138 PolicyAttrs = 2;
2139 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2140 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2141 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2142 break;
2143case RISCVVector::BI__builtin_rvv_vfneg_v_tuma:
2144 ID = Intrinsic::riscv_vfsgnjn_mask;
2145 PolicyAttrs = 2;
2146IsMasked = true;
2147
2148 {
2149 if (IsMasked) {
2150 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2151 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2152 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2153 Ops.insert(Ops.begin() + 2, Ops[1]);
2154 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2155 // maskedoff, op1, op2, mask, vl
2156 IntrinsicTypes = {ResultType,
2157 Ops[2]->getType(),
2158 Ops.back()->getType()};
2159 } else {
2160 if (PolicyAttrs & RVV_VTA)
2161 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2162 // op1, po2, vl
2163 IntrinsicTypes = {ResultType,
2164 Ops[1]->getType(), Ops[2]->getType()};
2165 Ops.insert(Ops.begin() + 2, Ops[1]);
2166 break;
2167 }
2168 break;
2169 }
2170 break;
2171case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tama:
2172case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tama:
2173 ID = Intrinsic::riscv_vfsgnjn_mask;
2174 PolicyAttrs = 3;
2175 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2176 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2177 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2178 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2179 break;
2180case RISCVVector::BI__builtin_rvv_vfneg_v_tama:
2181 ID = Intrinsic::riscv_vfsgnjn_mask;
2182 PolicyAttrs = 3;
2183IsMasked = true;
2184
2185 {
2186 if (IsMasked) {
2187 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2188 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2189 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2190 Ops.insert(Ops.begin() + 2, Ops[1]);
2191 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2192 // maskedoff, op1, op2, mask, vl
2193 IntrinsicTypes = {ResultType,
2194 Ops[2]->getType(),
2195 Ops.back()->getType()};
2196 } else {
2197 if (PolicyAttrs & RVV_VTA)
2198 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2199 // op1, po2, vl
2200 IntrinsicTypes = {ResultType,
2201 Ops[1]->getType(), Ops[2]->getType()};
2202 Ops.insert(Ops.begin() + 2, Ops[1]);
2203 break;
2204 }
2205 break;
2206 }
2207 break;
2208case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tumu:
2209case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tumu:
2210 ID = Intrinsic::riscv_vfsgnjn_mask;
2211 PolicyAttrs = 0;
2212 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2213 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2214 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2215 break;
2216case RISCVVector::BI__builtin_rvv_vfneg_v_tumu:
2217 ID = Intrinsic::riscv_vfsgnjn_mask;
2218 PolicyAttrs = 0;
2219IsMasked = true;
2220
2221 {
2222 if (IsMasked) {
2223 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2224 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2225 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2226 Ops.insert(Ops.begin() + 2, Ops[1]);
2227 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2228 // maskedoff, op1, op2, mask, vl
2229 IntrinsicTypes = {ResultType,
2230 Ops[2]->getType(),
2231 Ops.back()->getType()};
2232 } else {
2233 if (PolicyAttrs & RVV_VTA)
2234 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2235 // op1, po2, vl
2236 IntrinsicTypes = {ResultType,
2237 Ops[1]->getType(), Ops[2]->getType()};
2238 Ops.insert(Ops.begin() + 2, Ops[1]);
2239 break;
2240 }
2241 break;
2242 }
2243 break;
2244case RISCVVector::BI__builtin_rvv_vfsgnjn_vv_tamu:
2245case RISCVVector::BI__builtin_rvv_vfsgnjn_vf_tamu:
2246 ID = Intrinsic::riscv_vfsgnjn_mask;
2247 PolicyAttrs = 1;
2248 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2249 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2250 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2251 break;
2252case RISCVVector::BI__builtin_rvv_vfneg_v_tamu:
2253 ID = Intrinsic::riscv_vfsgnjn_mask;
2254 PolicyAttrs = 1;
2255IsMasked = true;
2256
2257 {
2258 if (IsMasked) {
2259 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2260 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2261 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2262 Ops.insert(Ops.begin() + 2, Ops[1]);
2263 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2264 // maskedoff, op1, op2, mask, vl
2265 IntrinsicTypes = {ResultType,
2266 Ops[2]->getType(),
2267 Ops.back()->getType()};
2268 } else {
2269 if (PolicyAttrs & RVV_VTA)
2270 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2271 // op1, po2, vl
2272 IntrinsicTypes = {ResultType,
2273 Ops[1]->getType(), Ops[2]->getType()};
2274 Ops.insert(Ops.begin() + 2, Ops[1]);
2275 break;
2276 }
2277 break;
2278 }
2279 break;
2280case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tu:
2281case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tu:
2282 ID = Intrinsic::riscv_vfsgnjx;
2283 PolicyAttrs = 2;
2284 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2285 break;
2286case RISCVVector::BI__builtin_rvv_vfabs_v_tu:
2287 ID = Intrinsic::riscv_vfsgnjx;
2288 PolicyAttrs = 2;
2289IsMasked = false;
2290
2291 {
2292 if (IsMasked) {
2293 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2294 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2295 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2296 Ops.insert(Ops.begin() + 2, Ops[1]);
2297 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2298 // maskedoff, op1, op2, mask, vl
2299 IntrinsicTypes = {ResultType,
2300 Ops[2]->getType(),
2301 Ops.back()->getType()};
2302 } else {
2303 if (PolicyAttrs & RVV_VTA)
2304 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2305 // op1, po2, vl
2306 IntrinsicTypes = {ResultType,
2307 Ops[1]->getType(), Ops[2]->getType()};
2308 Ops.insert(Ops.begin() + 2, Ops[1]);
2309 break;
2310 }
2311 break;
2312 }
2313 break;
2314case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_ta:
2315case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_ta:
2316 ID = Intrinsic::riscv_vfsgnjx;
2317 PolicyAttrs = 3;
2318 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2319 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2320 break;
2321case RISCVVector::BI__builtin_rvv_vfabs_v_ta:
2322 ID = Intrinsic::riscv_vfsgnjx;
2323 PolicyAttrs = 3;
2324IsMasked = false;
2325
2326 {
2327 if (IsMasked) {
2328 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2329 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2330 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2331 Ops.insert(Ops.begin() + 2, Ops[1]);
2332 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2333 // maskedoff, op1, op2, mask, vl
2334 IntrinsicTypes = {ResultType,
2335 Ops[2]->getType(),
2336 Ops.back()->getType()};
2337 } else {
2338 if (PolicyAttrs & RVV_VTA)
2339 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2340 // op1, po2, vl
2341 IntrinsicTypes = {ResultType,
2342 Ops[1]->getType(), Ops[2]->getType()};
2343 Ops.insert(Ops.begin() + 2, Ops[1]);
2344 break;
2345 }
2346 break;
2347 }
2348 break;
2349case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tuma:
2350case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tuma:
2351 ID = Intrinsic::riscv_vfsgnjx_mask;
2352 PolicyAttrs = 2;
2353 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2354 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2355 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2356 break;
2357case RISCVVector::BI__builtin_rvv_vfabs_v_tuma:
2358 ID = Intrinsic::riscv_vfsgnjx_mask;
2359 PolicyAttrs = 2;
2360IsMasked = true;
2361
2362 {
2363 if (IsMasked) {
2364 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2365 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2366 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2367 Ops.insert(Ops.begin() + 2, Ops[1]);
2368 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2369 // maskedoff, op1, op2, mask, vl
2370 IntrinsicTypes = {ResultType,
2371 Ops[2]->getType(),
2372 Ops.back()->getType()};
2373 } else {
2374 if (PolicyAttrs & RVV_VTA)
2375 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2376 // op1, po2, vl
2377 IntrinsicTypes = {ResultType,
2378 Ops[1]->getType(), Ops[2]->getType()};
2379 Ops.insert(Ops.begin() + 2, Ops[1]);
2380 break;
2381 }
2382 break;
2383 }
2384 break;
2385case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tama:
2386case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tama:
2387 ID = Intrinsic::riscv_vfsgnjx_mask;
2388 PolicyAttrs = 3;
2389 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2390 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2391 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2392 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2393 break;
2394case RISCVVector::BI__builtin_rvv_vfabs_v_tama:
2395 ID = Intrinsic::riscv_vfsgnjx_mask;
2396 PolicyAttrs = 3;
2397IsMasked = true;
2398
2399 {
2400 if (IsMasked) {
2401 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2402 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2403 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2404 Ops.insert(Ops.begin() + 2, Ops[1]);
2405 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2406 // maskedoff, op1, op2, mask, vl
2407 IntrinsicTypes = {ResultType,
2408 Ops[2]->getType(),
2409 Ops.back()->getType()};
2410 } else {
2411 if (PolicyAttrs & RVV_VTA)
2412 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2413 // op1, po2, vl
2414 IntrinsicTypes = {ResultType,
2415 Ops[1]->getType(), Ops[2]->getType()};
2416 Ops.insert(Ops.begin() + 2, Ops[1]);
2417 break;
2418 }
2419 break;
2420 }
2421 break;
2422case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tumu:
2423case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tumu:
2424 ID = Intrinsic::riscv_vfsgnjx_mask;
2425 PolicyAttrs = 0;
2426 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2427 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2428 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2429 break;
2430case RISCVVector::BI__builtin_rvv_vfabs_v_tumu:
2431 ID = Intrinsic::riscv_vfsgnjx_mask;
2432 PolicyAttrs = 0;
2433IsMasked = true;
2434
2435 {
2436 if (IsMasked) {
2437 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2438 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2439 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2440 Ops.insert(Ops.begin() + 2, Ops[1]);
2441 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2442 // maskedoff, op1, op2, mask, vl
2443 IntrinsicTypes = {ResultType,
2444 Ops[2]->getType(),
2445 Ops.back()->getType()};
2446 } else {
2447 if (PolicyAttrs & RVV_VTA)
2448 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2449 // op1, po2, vl
2450 IntrinsicTypes = {ResultType,
2451 Ops[1]->getType(), Ops[2]->getType()};
2452 Ops.insert(Ops.begin() + 2, Ops[1]);
2453 break;
2454 }
2455 break;
2456 }
2457 break;
2458case RISCVVector::BI__builtin_rvv_vfsgnjx_vv_tamu:
2459case RISCVVector::BI__builtin_rvv_vfsgnjx_vf_tamu:
2460 ID = Intrinsic::riscv_vfsgnjx_mask;
2461 PolicyAttrs = 1;
2462 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2463 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2464 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2465 break;
2466case RISCVVector::BI__builtin_rvv_vfabs_v_tamu:
2467 ID = Intrinsic::riscv_vfsgnjx_mask;
2468 PolicyAttrs = 1;
2469IsMasked = true;
2470
2471 {
2472 if (IsMasked) {
2473 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2474 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
2475 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2476 Ops.insert(Ops.begin() + 2, Ops[1]);
2477 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2478 // maskedoff, op1, op2, mask, vl
2479 IntrinsicTypes = {ResultType,
2480 Ops[2]->getType(),
2481 Ops.back()->getType()};
2482 } else {
2483 if (PolicyAttrs & RVV_VTA)
2484 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2485 // op1, po2, vl
2486 IntrinsicTypes = {ResultType,
2487 Ops[1]->getType(), Ops[2]->getType()};
2488 Ops.insert(Ops.begin() + 2, Ops[1]);
2489 break;
2490 }
2491 break;
2492 }
2493 break;
2494case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tu:
2495 ID = Intrinsic::riscv_vfslide1down;
2496 PolicyAttrs = 2;
2497 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2498 break;
2499case RISCVVector::BI__builtin_rvv_vfslide1down_vf_ta:
2500 ID = Intrinsic::riscv_vfslide1down;
2501 PolicyAttrs = 3;
2502 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2503 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2504 break;
2505case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tuma:
2506 ID = Intrinsic::riscv_vfslide1down_mask;
2507 PolicyAttrs = 2;
2508 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2509 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2510 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2511 break;
2512case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tama:
2513 ID = Intrinsic::riscv_vfslide1down_mask;
2514 PolicyAttrs = 3;
2515 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2516 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2517 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2518 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2519 break;
2520case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tumu:
2521 ID = Intrinsic::riscv_vfslide1down_mask;
2522 PolicyAttrs = 0;
2523 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2524 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2525 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2526 break;
2527case RISCVVector::BI__builtin_rvv_vfslide1down_vf_tamu:
2528 ID = Intrinsic::riscv_vfslide1down_mask;
2529 PolicyAttrs = 1;
2530 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2531 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2532 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2533 break;
2534case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tu:
2535 ID = Intrinsic::riscv_vfslide1up;
2536 PolicyAttrs = 2;
2537 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2538 break;
2539case RISCVVector::BI__builtin_rvv_vfslide1up_vf_ta:
2540 ID = Intrinsic::riscv_vfslide1up;
2541 PolicyAttrs = 3;
2542 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2543 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2544 break;
2545case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tuma:
2546 ID = Intrinsic::riscv_vfslide1up_mask;
2547 PolicyAttrs = 2;
2548 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2549 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2550 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2551 break;
2552case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tama:
2553 ID = Intrinsic::riscv_vfslide1up_mask;
2554 PolicyAttrs = 3;
2555 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2556 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2557 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2558 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2559 break;
2560case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tumu:
2561 ID = Intrinsic::riscv_vfslide1up_mask;
2562 PolicyAttrs = 0;
2563 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2564 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2565 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2566 break;
2567case RISCVVector::BI__builtin_rvv_vfslide1up_vf_tamu:
2568 ID = Intrinsic::riscv_vfslide1up_mask;
2569 PolicyAttrs = 1;
2570 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2571 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2572 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2573 break;
2574case RISCVVector::BI__builtin_rvv_vfsqrt_v_tu:
2575 ID = Intrinsic::riscv_vfsqrt;
2576 PolicyAttrs = 2;
2577 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2578 break;
2579case RISCVVector::BI__builtin_rvv_vfsqrt_v_ta:
2580 ID = Intrinsic::riscv_vfsqrt;
2581 PolicyAttrs = 3;
2582 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2583 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2584 break;
2585case RISCVVector::BI__builtin_rvv_vfsqrt_v_tuma:
2586 ID = Intrinsic::riscv_vfsqrt_mask;
2587 PolicyAttrs = 2;
2588 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2589 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2590 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2591 break;
2592case RISCVVector::BI__builtin_rvv_vfsqrt_v_tama:
2593 ID = Intrinsic::riscv_vfsqrt_mask;
2594 PolicyAttrs = 3;
2595 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2596 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2597 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2598 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2599 break;
2600case RISCVVector::BI__builtin_rvv_vfsqrt_v_tumu:
2601 ID = Intrinsic::riscv_vfsqrt_mask;
2602 PolicyAttrs = 0;
2603 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2604 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2605 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2606 break;
2607case RISCVVector::BI__builtin_rvv_vfsqrt_v_tamu:
2608 ID = Intrinsic::riscv_vfsqrt_mask;
2609 PolicyAttrs = 1;
2610 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2611 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2612 IntrinsicTypes = {ResultType, Ops.back()->getType()};
2613 break;
2614case RISCVVector::BI__builtin_rvv_vfsub_vv_tu:
2615case RISCVVector::BI__builtin_rvv_vfsub_vf_tu:
2616 ID = Intrinsic::riscv_vfsub;
2617 PolicyAttrs = 2;
2618 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2619 break;
2620case RISCVVector::BI__builtin_rvv_vfsub_vv_ta:
2621case RISCVVector::BI__builtin_rvv_vfsub_vf_ta:
2622 ID = Intrinsic::riscv_vfsub;
2623 PolicyAttrs = 3;
2624 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2625 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2626 break;
2627case RISCVVector::BI__builtin_rvv_vfsub_vv_tuma:
2628case RISCVVector::BI__builtin_rvv_vfsub_vf_tuma:
2629 ID = Intrinsic::riscv_vfsub_mask;
2630 PolicyAttrs = 2;
2631 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2632 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2633 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2634 break;
2635case RISCVVector::BI__builtin_rvv_vfsub_vv_tama:
2636case RISCVVector::BI__builtin_rvv_vfsub_vf_tama:
2637 ID = Intrinsic::riscv_vfsub_mask;
2638 PolicyAttrs = 3;
2639 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2640 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2641 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2642 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2643 break;
2644case RISCVVector::BI__builtin_rvv_vfsub_vv_tumu:
2645case RISCVVector::BI__builtin_rvv_vfsub_vf_tumu:
2646 ID = Intrinsic::riscv_vfsub_mask;
2647 PolicyAttrs = 0;
2648 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2649 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2650 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2651 break;
2652case RISCVVector::BI__builtin_rvv_vfsub_vv_tamu:
2653case RISCVVector::BI__builtin_rvv_vfsub_vf_tamu:
2654 ID = Intrinsic::riscv_vfsub_mask;
2655 PolicyAttrs = 1;
2656 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2657 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2658 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2659 break;
2660case RISCVVector::BI__builtin_rvv_vfwadd_vv_tu:
2661case RISCVVector::BI__builtin_rvv_vfwadd_vf_tu:
2662 ID = Intrinsic::riscv_vfwadd;
2663 PolicyAttrs = 2;
2664 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2665 break;
2666case RISCVVector::BI__builtin_rvv_vfwadd_vv_ta:
2667case RISCVVector::BI__builtin_rvv_vfwadd_vf_ta:
2668 ID = Intrinsic::riscv_vfwadd;
2669 PolicyAttrs = 3;
2670 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2671 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2672 break;
2673case RISCVVector::BI__builtin_rvv_vfwadd_vv_tuma:
2674case RISCVVector::BI__builtin_rvv_vfwadd_vf_tuma:
2675 ID = Intrinsic::riscv_vfwadd_mask;
2676 PolicyAttrs = 2;
2677 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2678 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2679 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2680 break;
2681case RISCVVector::BI__builtin_rvv_vfwadd_vv_tama:
2682case RISCVVector::BI__builtin_rvv_vfwadd_vf_tama:
2683 ID = Intrinsic::riscv_vfwadd_mask;
2684 PolicyAttrs = 3;
2685 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2686 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2687 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2688 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2689 break;
2690case RISCVVector::BI__builtin_rvv_vfwadd_vv_tumu:
2691case RISCVVector::BI__builtin_rvv_vfwadd_vf_tumu:
2692 ID = Intrinsic::riscv_vfwadd_mask;
2693 PolicyAttrs = 0;
2694 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2695 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2696 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2697 break;
2698case RISCVVector::BI__builtin_rvv_vfwadd_vv_tamu:
2699case RISCVVector::BI__builtin_rvv_vfwadd_vf_tamu:
2700 ID = Intrinsic::riscv_vfwadd_mask;
2701 PolicyAttrs = 1;
2702 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2703 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2704 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
2705 break;
2706case RISCVVector::BI__builtin_rvv_vfwadd_wv_tu:
2707case RISCVVector::BI__builtin_rvv_vfwadd_wf_tu:
2708 ID = Intrinsic::riscv_vfwadd_w;
2709 PolicyAttrs = 2;
2710 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2711 break;
2712case RISCVVector::BI__builtin_rvv_vfwadd_wv_ta:
2713case RISCVVector::BI__builtin_rvv_vfwadd_wf_ta:
2714 ID = Intrinsic::riscv_vfwadd_w;
2715 PolicyAttrs = 3;
2716 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2717 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2718 break;
2719case RISCVVector::BI__builtin_rvv_vfwadd_wv_tuma:
2720case RISCVVector::BI__builtin_rvv_vfwadd_wf_tuma:
2721 ID = Intrinsic::riscv_vfwadd_w_mask;
2722 PolicyAttrs = 2;
2723 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2724 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2725 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2726 break;
2727case RISCVVector::BI__builtin_rvv_vfwadd_wv_tama:
2728case RISCVVector::BI__builtin_rvv_vfwadd_wf_tama:
2729 ID = Intrinsic::riscv_vfwadd_w_mask;
2730 PolicyAttrs = 3;
2731 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2732 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2733 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2734 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2735 break;
2736case RISCVVector::BI__builtin_rvv_vfwadd_wv_tumu:
2737case RISCVVector::BI__builtin_rvv_vfwadd_wf_tumu:
2738 ID = Intrinsic::riscv_vfwadd_w_mask;
2739 PolicyAttrs = 0;
2740 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2741 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2742 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2743 break;
2744case RISCVVector::BI__builtin_rvv_vfwadd_wv_tamu:
2745case RISCVVector::BI__builtin_rvv_vfwadd_wf_tamu:
2746 ID = Intrinsic::riscv_vfwadd_w_mask;
2747 PolicyAttrs = 1;
2748 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2749 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2750 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
2751 break;
2752case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tu:
2753 ID = Intrinsic::riscv_vfwcvt_f_f_v;
2754 PolicyAttrs = 2;
2755 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2756 break;
2757case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_ta:
2758 ID = Intrinsic::riscv_vfwcvt_f_f_v;
2759 PolicyAttrs = 3;
2760 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2761 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2762 break;
2763case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tuma:
2764 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2765 PolicyAttrs = 2;
2766 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2767 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2768 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2769 break;
2770case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tama:
2771 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2772 PolicyAttrs = 3;
2773 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2774 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2775 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2776 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2777 break;
2778case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tumu:
2779 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2780 PolicyAttrs = 0;
2781 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2782 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2783 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2784 break;
2785case RISCVVector::BI__builtin_rvv_vfwcvt_f_f_v_tamu:
2786 ID = Intrinsic::riscv_vfwcvt_f_f_v_mask;
2787 PolicyAttrs = 1;
2788 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2789 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2790 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2791 break;
2792case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tu:
2793 ID = Intrinsic::riscv_vfwcvt_f_x_v;
2794 PolicyAttrs = 2;
2795 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2796 break;
2797case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_ta:
2798 ID = Intrinsic::riscv_vfwcvt_f_x_v;
2799 PolicyAttrs = 3;
2800 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2801 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2802 break;
2803case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tuma:
2804 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2805 PolicyAttrs = 2;
2806 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2807 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2808 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2809 break;
2810case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tama:
2811 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2812 PolicyAttrs = 3;
2813 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2814 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2815 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2816 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2817 break;
2818case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tumu:
2819 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2820 PolicyAttrs = 0;
2821 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2822 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2823 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2824 break;
2825case RISCVVector::BI__builtin_rvv_vfwcvt_f_x_v_tamu:
2826 ID = Intrinsic::riscv_vfwcvt_f_x_v_mask;
2827 PolicyAttrs = 1;
2828 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2829 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2830 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2831 break;
2832case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tu:
2833 ID = Intrinsic::riscv_vfwcvt_f_xu_v;
2834 PolicyAttrs = 2;
2835 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2836 break;
2837case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_ta:
2838 ID = Intrinsic::riscv_vfwcvt_f_xu_v;
2839 PolicyAttrs = 3;
2840 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2841 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2842 break;
2843case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tuma:
2844 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2845 PolicyAttrs = 2;
2846 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2847 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2848 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2849 break;
2850case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tama:
2851 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2852 PolicyAttrs = 3;
2853 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2854 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2855 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2856 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2857 break;
2858case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tumu:
2859 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2860 PolicyAttrs = 0;
2861 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2862 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2863 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2864 break;
2865case RISCVVector::BI__builtin_rvv_vfwcvt_f_xu_v_tamu:
2866 ID = Intrinsic::riscv_vfwcvt_f_xu_v_mask;
2867 PolicyAttrs = 1;
2868 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2869 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2870 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2871 break;
2872case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tu:
2873 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v;
2874 PolicyAttrs = 2;
2875 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2876 break;
2877case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_ta:
2878 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v;
2879 PolicyAttrs = 3;
2880 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2881 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2882 break;
2883case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tuma:
2884 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2885 PolicyAttrs = 2;
2886 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2887 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2888 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2889 break;
2890case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tama:
2891 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2892 PolicyAttrs = 3;
2893 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2894 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2895 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2896 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2897 break;
2898case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tumu:
2899 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2900 PolicyAttrs = 0;
2901 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2902 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2903 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2904 break;
2905case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_x_f_v_tamu:
2906 ID = Intrinsic::riscv_vfwcvt_rtz_x_f_v_mask;
2907 PolicyAttrs = 1;
2908 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2909 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2910 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2911 break;
2912case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tu:
2913 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v;
2914 PolicyAttrs = 2;
2915 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2916 break;
2917case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_ta:
2918 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v;
2919 PolicyAttrs = 3;
2920 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2921 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2922 break;
2923case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tuma:
2924 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2925 PolicyAttrs = 2;
2926 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2927 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2928 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2929 break;
2930case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tama:
2931 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2932 PolicyAttrs = 3;
2933 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2934 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2935 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2936 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2937 break;
2938case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tumu:
2939 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2940 PolicyAttrs = 0;
2941 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2942 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2943 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2944 break;
2945case RISCVVector::BI__builtin_rvv_vfwcvt_rtz_xu_f_v_tamu:
2946 ID = Intrinsic::riscv_vfwcvt_rtz_xu_f_v_mask;
2947 PolicyAttrs = 1;
2948 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2949 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2950 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2951 break;
2952case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tu:
2953 ID = Intrinsic::riscv_vfwcvt_x_f_v;
2954 PolicyAttrs = 2;
2955 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2956 break;
2957case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_ta:
2958 ID = Intrinsic::riscv_vfwcvt_x_f_v;
2959 PolicyAttrs = 3;
2960 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2961 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2962 break;
2963case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tuma:
2964 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2965 PolicyAttrs = 2;
2966 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2967 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2968 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2969 break;
2970case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tama:
2971 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2972 PolicyAttrs = 3;
2973 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2974 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2975 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
2976 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2977 break;
2978case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tumu:
2979 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2980 PolicyAttrs = 0;
2981 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2982 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2983 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2984 break;
2985case RISCVVector::BI__builtin_rvv_vfwcvt_x_f_v_tamu:
2986 ID = Intrinsic::riscv_vfwcvt_x_f_v_mask;
2987 PolicyAttrs = 1;
2988 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
2989 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
2990 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2991 break;
2992case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tu:
2993 ID = Intrinsic::riscv_vfwcvt_xu_f_v;
2994 PolicyAttrs = 2;
2995 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
2996 break;
2997case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_ta:
2998 ID = Intrinsic::riscv_vfwcvt_xu_f_v;
2999 PolicyAttrs = 3;
3000 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3001 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3002 break;
3003case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tuma:
3004 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3005 PolicyAttrs = 2;
3006 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3007 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3008 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3009 break;
3010case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tama:
3011 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3012 PolicyAttrs = 3;
3013 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3014 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3015 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3016 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3017 break;
3018case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tumu:
3019 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3020 PolicyAttrs = 0;
3021 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3022 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3023 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3024 break;
3025case RISCVVector::BI__builtin_rvv_vfwcvt_xu_f_v_tamu:
3026 ID = Intrinsic::riscv_vfwcvt_xu_f_v_mask;
3027 PolicyAttrs = 1;
3028 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3029 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3030 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3031 break;
3032case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tu:
3033case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tu:
3034 ID = Intrinsic::riscv_vfwmacc;
3035 PolicyAttrs = 2;
3036 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3037 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3038 break;
3039case RISCVVector::BI__builtin_rvv_vfwmacc_vv_ta:
3040case RISCVVector::BI__builtin_rvv_vfwmacc_vf_ta:
3041 ID = Intrinsic::riscv_vfwmacc;
3042 PolicyAttrs = 3;
3043 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3044 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3045 break;
3046case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tuma:
3047case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tuma:
3048 ID = Intrinsic::riscv_vfwmacc_mask;
3049 PolicyAttrs = 2;
3050 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3051 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3052 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3053 break;
3054case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tama:
3055case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tama:
3056 ID = Intrinsic::riscv_vfwmacc_mask;
3057 PolicyAttrs = 3;
3058 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3059 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3060 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3061 break;
3062case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tumu:
3063case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tumu:
3064 ID = Intrinsic::riscv_vfwmacc_mask;
3065 PolicyAttrs = 0;
3066 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3067 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3068 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3069 break;
3070case RISCVVector::BI__builtin_rvv_vfwmacc_vv_tamu:
3071case RISCVVector::BI__builtin_rvv_vfwmacc_vf_tamu:
3072 ID = Intrinsic::riscv_vfwmacc_mask;
3073 PolicyAttrs = 1;
3074 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3075 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3076 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3077 break;
3078case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tu:
3079case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tu:
3080 ID = Intrinsic::riscv_vfwmsac;
3081 PolicyAttrs = 2;
3082 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3083 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3084 break;
3085case RISCVVector::BI__builtin_rvv_vfwmsac_vv_ta:
3086case RISCVVector::BI__builtin_rvv_vfwmsac_vf_ta:
3087 ID = Intrinsic::riscv_vfwmsac;
3088 PolicyAttrs = 3;
3089 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3090 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3091 break;
3092case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tuma:
3093case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tuma:
3094 ID = Intrinsic::riscv_vfwmsac_mask;
3095 PolicyAttrs = 2;
3096 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3097 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3098 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3099 break;
3100case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tama:
3101case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tama:
3102 ID = Intrinsic::riscv_vfwmsac_mask;
3103 PolicyAttrs = 3;
3104 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3105 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3106 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3107 break;
3108case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tumu:
3109case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tumu:
3110 ID = Intrinsic::riscv_vfwmsac_mask;
3111 PolicyAttrs = 0;
3112 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3113 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3114 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3115 break;
3116case RISCVVector::BI__builtin_rvv_vfwmsac_vv_tamu:
3117case RISCVVector::BI__builtin_rvv_vfwmsac_vf_tamu:
3118 ID = Intrinsic::riscv_vfwmsac_mask;
3119 PolicyAttrs = 1;
3120 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3121 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3122 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3123 break;
3124case RISCVVector::BI__builtin_rvv_vfwmul_vv_tu:
3125case RISCVVector::BI__builtin_rvv_vfwmul_vf_tu:
3126 ID = Intrinsic::riscv_vfwmul;
3127 PolicyAttrs = 2;
3128 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3129 break;
3130case RISCVVector::BI__builtin_rvv_vfwmul_vv_ta:
3131case RISCVVector::BI__builtin_rvv_vfwmul_vf_ta:
3132 ID = Intrinsic::riscv_vfwmul;
3133 PolicyAttrs = 3;
3134 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3135 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3136 break;
3137case RISCVVector::BI__builtin_rvv_vfwmul_vv_tuma:
3138case RISCVVector::BI__builtin_rvv_vfwmul_vf_tuma:
3139 ID = Intrinsic::riscv_vfwmul_mask;
3140 PolicyAttrs = 2;
3141 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3142 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3143 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3144 break;
3145case RISCVVector::BI__builtin_rvv_vfwmul_vv_tama:
3146case RISCVVector::BI__builtin_rvv_vfwmul_vf_tama:
3147 ID = Intrinsic::riscv_vfwmul_mask;
3148 PolicyAttrs = 3;
3149 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3150 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3151 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3152 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3153 break;
3154case RISCVVector::BI__builtin_rvv_vfwmul_vv_tumu:
3155case RISCVVector::BI__builtin_rvv_vfwmul_vf_tumu:
3156 ID = Intrinsic::riscv_vfwmul_mask;
3157 PolicyAttrs = 0;
3158 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3159 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3160 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3161 break;
3162case RISCVVector::BI__builtin_rvv_vfwmul_vv_tamu:
3163case RISCVVector::BI__builtin_rvv_vfwmul_vf_tamu:
3164 ID = Intrinsic::riscv_vfwmul_mask;
3165 PolicyAttrs = 1;
3166 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3167 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3168 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3169 break;
3170case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tu:
3171case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tu:
3172 ID = Intrinsic::riscv_vfwnmacc;
3173 PolicyAttrs = 2;
3174 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3175 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3176 break;
3177case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_ta:
3178case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_ta:
3179 ID = Intrinsic::riscv_vfwnmacc;
3180 PolicyAttrs = 3;
3181 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3182 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3183 break;
3184case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tuma:
3185case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tuma:
3186 ID = Intrinsic::riscv_vfwnmacc_mask;
3187 PolicyAttrs = 2;
3188 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3189 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3190 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3191 break;
3192case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tama:
3193case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tama:
3194 ID = Intrinsic::riscv_vfwnmacc_mask;
3195 PolicyAttrs = 3;
3196 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3197 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3198 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3199 break;
3200case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tumu:
3201case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tumu:
3202 ID = Intrinsic::riscv_vfwnmacc_mask;
3203 PolicyAttrs = 0;
3204 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3205 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3206 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3207 break;
3208case RISCVVector::BI__builtin_rvv_vfwnmacc_vv_tamu:
3209case RISCVVector::BI__builtin_rvv_vfwnmacc_vf_tamu:
3210 ID = Intrinsic::riscv_vfwnmacc_mask;
3211 PolicyAttrs = 1;
3212 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3213 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3214 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3215 break;
3216case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tu:
3217case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tu:
3218 ID = Intrinsic::riscv_vfwnmsac;
3219 PolicyAttrs = 2;
3220 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3221 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3222 break;
3223case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_ta:
3224case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_ta:
3225 ID = Intrinsic::riscv_vfwnmsac;
3226 PolicyAttrs = 3;
3227 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3228 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3229 break;
3230case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tuma:
3231case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tuma:
3232 ID = Intrinsic::riscv_vfwnmsac_mask;
3233 PolicyAttrs = 2;
3234 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3235 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3236 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3237 break;
3238case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tama:
3239case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tama:
3240 ID = Intrinsic::riscv_vfwnmsac_mask;
3241 PolicyAttrs = 3;
3242 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3243 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3244 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3245 break;
3246case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tumu:
3247case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tumu:
3248 ID = Intrinsic::riscv_vfwnmsac_mask;
3249 PolicyAttrs = 0;
3250 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3251 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3252 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3253 break;
3254case RISCVVector::BI__builtin_rvv_vfwnmsac_vv_tamu:
3255case RISCVVector::BI__builtin_rvv_vfwnmsac_vf_tamu:
3256 ID = Intrinsic::riscv_vfwnmsac_mask;
3257 PolicyAttrs = 1;
3258 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3259 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3260 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3261 break;
3262case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tu:
3263 ID = Intrinsic::riscv_vfwredosum;
3264 PolicyAttrs = 2;
3265 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3266 break;
3267case RISCVVector::BI__builtin_rvv_vfwredosum_vs_ta:
3268 ID = Intrinsic::riscv_vfwredosum;
3269 PolicyAttrs = 3;
3270 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3271 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3272 break;
3273case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tum:
3274 ID = Intrinsic::riscv_vfwredosum_mask;
3275 PolicyAttrs = 2;
3276 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3277 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3278 break;
3279case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tama:
3280case RISCVVector::BI__builtin_rvv_vfwredosum_vs_tam:
3281 ID = Intrinsic::riscv_vfwredosum_mask;
3282 PolicyAttrs = 3;
3283 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3284 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3285 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3286 break;
3287case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tu:
3288 ID = Intrinsic::riscv_vfwredusum;
3289 PolicyAttrs = 2;
3290 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3291 break;
3292case RISCVVector::BI__builtin_rvv_vfwredusum_vs_ta:
3293 ID = Intrinsic::riscv_vfwredusum;
3294 PolicyAttrs = 3;
3295 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3296 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3297 break;
3298case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tum:
3299 ID = Intrinsic::riscv_vfwredusum_mask;
3300 PolicyAttrs = 2;
3301 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3302 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3303 break;
3304case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tama:
3305case RISCVVector::BI__builtin_rvv_vfwredusum_vs_tam:
3306 ID = Intrinsic::riscv_vfwredusum_mask;
3307 PolicyAttrs = 3;
3308 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3309 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3310 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
3311 break;
3312case RISCVVector::BI__builtin_rvv_vfwsub_vv_tu:
3313case RISCVVector::BI__builtin_rvv_vfwsub_vf_tu:
3314 ID = Intrinsic::riscv_vfwsub;
3315 PolicyAttrs = 2;
3316 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3317 break;
3318case RISCVVector::BI__builtin_rvv_vfwsub_vv_ta:
3319case RISCVVector::BI__builtin_rvv_vfwsub_vf_ta:
3320 ID = Intrinsic::riscv_vfwsub;
3321 PolicyAttrs = 3;
Value stored to 'PolicyAttrs' is never read
3322 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3323 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3324 break;
3325case RISCVVector::BI__builtin_rvv_vfwsub_vv_tuma:
3326case RISCVVector::BI__builtin_rvv_vfwsub_vf_tuma:
3327 ID = Intrinsic::riscv_vfwsub_mask;
3328 PolicyAttrs = 2;
3329 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3330 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3331 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3332 break;
3333case RISCVVector::BI__builtin_rvv_vfwsub_vv_tama:
3334case RISCVVector::BI__builtin_rvv_vfwsub_vf_tama:
3335 ID = Intrinsic::riscv_vfwsub_mask;
3336 PolicyAttrs = 3;
3337 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3338 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3339 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3340 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3341 break;
3342case RISCVVector::BI__builtin_rvv_vfwsub_vv_tumu:
3343case RISCVVector::BI__builtin_rvv_vfwsub_vf_tumu:
3344 ID = Intrinsic::riscv_vfwsub_mask;
3345 PolicyAttrs = 0;
3346 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3347 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3348 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3349 break;
3350case RISCVVector::BI__builtin_rvv_vfwsub_vv_tamu:
3351case RISCVVector::BI__builtin_rvv_vfwsub_vf_tamu:
3352 ID = Intrinsic::riscv_vfwsub_mask;
3353 PolicyAttrs = 1;
3354 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3355 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3356 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
3357 break;
3358case RISCVVector::BI__builtin_rvv_vfwsub_wv_tu:
3359case RISCVVector::BI__builtin_rvv_vfwsub_wf_tu:
3360 ID = Intrinsic::riscv_vfwsub_w;
3361 PolicyAttrs = 2;
3362 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3363 break;
3364case RISCVVector::BI__builtin_rvv_vfwsub_wv_ta:
3365case RISCVVector::BI__builtin_rvv_vfwsub_wf_ta:
3366 ID = Intrinsic::riscv_vfwsub_w;
3367 PolicyAttrs = 3;
3368 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3369 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3370 break;
3371case RISCVVector::BI__builtin_rvv_vfwsub_wv_tuma:
3372case RISCVVector::BI__builtin_rvv_vfwsub_wf_tuma:
3373 ID = Intrinsic::riscv_vfwsub_w_mask;
3374 PolicyAttrs = 2;
3375 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3376 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3377 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3378 break;
3379case RISCVVector::BI__builtin_rvv_vfwsub_wv_tama:
3380case RISCVVector::BI__builtin_rvv_vfwsub_wf_tama:
3381 ID = Intrinsic::riscv_vfwsub_w_mask;
3382 PolicyAttrs = 3;
3383 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3384 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3385 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3386 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3387 break;
3388case RISCVVector::BI__builtin_rvv_vfwsub_wv_tumu:
3389case RISCVVector::BI__builtin_rvv_vfwsub_wf_tumu:
3390 ID = Intrinsic::riscv_vfwsub_w_mask;
3391 PolicyAttrs = 0;
3392 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3393 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3394 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3395 break;
3396case RISCVVector::BI__builtin_rvv_vfwsub_wv_tamu:
3397case RISCVVector::BI__builtin_rvv_vfwsub_wf_tamu:
3398 ID = Intrinsic::riscv_vfwsub_w_mask;
3399 PolicyAttrs = 1;
3400 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3401 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3402 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3403 break;
3404case RISCVVector::BI__builtin_rvv_vid_v_tu:
3405 ID = Intrinsic::riscv_vid;
3406 PolicyAttrs = 2;
3407 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3408 break;
3409case RISCVVector::BI__builtin_rvv_vid_v_ta:
3410 ID = Intrinsic::riscv_vid;
3411 PolicyAttrs = 3;
3412 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3413 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3414 break;
3415case RISCVVector::BI__builtin_rvv_vid_v_tuma:
3416 ID = Intrinsic::riscv_vid_mask;
3417 PolicyAttrs = 2;
3418 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3419 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3420 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3421 break;
3422case RISCVVector::BI__builtin_rvv_vid_v_tama:
3423 ID = Intrinsic::riscv_vid_mask;
3424 PolicyAttrs = 3;
3425 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3426 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3427 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3428 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3429 break;
3430case RISCVVector::BI__builtin_rvv_vid_v_tumu:
3431 ID = Intrinsic::riscv_vid_mask;
3432 PolicyAttrs = 0;
3433 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3434 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3435 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3436 break;
3437case RISCVVector::BI__builtin_rvv_vid_v_tamu:
3438 ID = Intrinsic::riscv_vid_mask;
3439 PolicyAttrs = 1;
3440 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3441 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3442 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3443 break;
3444case RISCVVector::BI__builtin_rvv_viota_m_tu:
3445 ID = Intrinsic::riscv_viota;
3446 PolicyAttrs = 2;
3447 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3448 break;
3449case RISCVVector::BI__builtin_rvv_viota_m_ta:
3450 ID = Intrinsic::riscv_viota;
3451 PolicyAttrs = 3;
3452 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3453 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3454 break;
3455case RISCVVector::BI__builtin_rvv_viota_m_tuma:
3456 ID = Intrinsic::riscv_viota_mask;
3457 PolicyAttrs = 2;
3458 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3459 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3460 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3461 break;
3462case RISCVVector::BI__builtin_rvv_viota_m_tama:
3463 ID = Intrinsic::riscv_viota_mask;
3464 PolicyAttrs = 3;
3465 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3466 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3467 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3468 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3469 break;
3470case RISCVVector::BI__builtin_rvv_viota_m_tumu:
3471 ID = Intrinsic::riscv_viota_mask;
3472 PolicyAttrs = 0;
3473 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3474 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3475 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3476 break;
3477case RISCVVector::BI__builtin_rvv_viota_m_tamu:
3478 ID = Intrinsic::riscv_viota_mask;
3479 PolicyAttrs = 1;
3480 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3481 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3482 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3483 break;
3484case RISCVVector::BI__builtin_rvv_vle8_v_tu:
3485case RISCVVector::BI__builtin_rvv_vle16_v_tu:
3486case RISCVVector::BI__builtin_rvv_vle32_v_tu:
3487case RISCVVector::BI__builtin_rvv_vle64_v_tu:
3488 ID = Intrinsic::riscv_vle;
3489 PolicyAttrs = 2;
3490 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3491 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3492 break;
3493case RISCVVector::BI__builtin_rvv_vle8_v_ta:
3494case RISCVVector::BI__builtin_rvv_vle16_v_ta:
3495case RISCVVector::BI__builtin_rvv_vle32_v_ta:
3496case RISCVVector::BI__builtin_rvv_vle64_v_ta:
3497 ID = Intrinsic::riscv_vle;
3498 PolicyAttrs = 3;
3499 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
3500 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3501 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3502 break;
3503case RISCVVector::BI__builtin_rvv_vle8_v_tuma:
3504case RISCVVector::BI__builtin_rvv_vle16_v_tuma:
3505case RISCVVector::BI__builtin_rvv_vle32_v_tuma:
3506case RISCVVector::BI__builtin_rvv_vle64_v_tuma:
3507 ID = Intrinsic::riscv_vle_mask;
3508 PolicyAttrs = 2;
3509 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3510 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3511 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3512 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3513 break;
3514case RISCVVector::BI__builtin_rvv_vle8_v_tama:
3515case RISCVVector::BI__builtin_rvv_vle16_v_tama:
3516case RISCVVector::BI__builtin_rvv_vle32_v_tama:
3517case RISCVVector::BI__builtin_rvv_vle64_v_tama:
3518 ID = Intrinsic::riscv_vle_mask;
3519 PolicyAttrs = 3;
3520 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3521 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3522 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3523 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3524 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3525 break;
3526case RISCVVector::BI__builtin_rvv_vle8_v_tumu:
3527case RISCVVector::BI__builtin_rvv_vle16_v_tumu:
3528case RISCVVector::BI__builtin_rvv_vle32_v_tumu:
3529case RISCVVector::BI__builtin_rvv_vle64_v_tumu:
3530 ID = Intrinsic::riscv_vle_mask;
3531 PolicyAttrs = 0;
3532 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3533 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3534 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3535 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3536 break;
3537case RISCVVector::BI__builtin_rvv_vle8_v_tamu:
3538case RISCVVector::BI__builtin_rvv_vle16_v_tamu:
3539case RISCVVector::BI__builtin_rvv_vle32_v_tamu:
3540case RISCVVector::BI__builtin_rvv_vle64_v_tamu:
3541 ID = Intrinsic::riscv_vle_mask;
3542 PolicyAttrs = 1;
3543 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3544 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3545 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3546 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3547 break;
3548case RISCVVector::BI__builtin_rvv_vle16ff_v_tu:
3549case RISCVVector::BI__builtin_rvv_vle32ff_v_tu:
3550case RISCVVector::BI__builtin_rvv_vle64ff_v_tu:
3551case RISCVVector::BI__builtin_rvv_vle8ff_v_tu:
3552 ID = Intrinsic::riscv_vleff;
3553 PolicyAttrs = 2;
3554IsMasked = false;
3555
3556 {
3557 if (IsMasked) {
3558 // Move mask to right before vl.
3559 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3560 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3561 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3562 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3563 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3564 } else {
3565 if (PolicyAttrs & RVV_VTA)
3566 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3567 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3568 }
3569 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3570 Value *NewVL = Ops[2];
3571 Ops.erase(Ops.begin() + 2);
3572 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3573 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3574 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3575 // Store new_vl.
3576 clang::CharUnits Align;
3577 if (IsMasked)
3578 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3579 else
3580 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3581 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3582 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3583 return V;
3584 }
3585 break;
3586case RISCVVector::BI__builtin_rvv_vle16ff_v_ta:
3587case RISCVVector::BI__builtin_rvv_vle32ff_v_ta:
3588case RISCVVector::BI__builtin_rvv_vle64ff_v_ta:
3589case RISCVVector::BI__builtin_rvv_vle8ff_v_ta:
3590 ID = Intrinsic::riscv_vleff;
3591 PolicyAttrs = 3;
3592IsMasked = false;
3593
3594 {
3595 if (IsMasked) {
3596 // Move mask to right before vl.
3597 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3598 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3599 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3600 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3601 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3602 } else {
3603 if (PolicyAttrs & RVV_VTA)
3604 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3605 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3606 }
3607 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3608 Value *NewVL = Ops[2];
3609 Ops.erase(Ops.begin() + 2);
3610 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3611 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3612 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3613 // Store new_vl.
3614 clang::CharUnits Align;
3615 if (IsMasked)
3616 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3617 else
3618 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3619 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3620 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3621 return V;
3622 }
3623 break;
3624case RISCVVector::BI__builtin_rvv_vle16ff_v_tuma:
3625case RISCVVector::BI__builtin_rvv_vle32ff_v_tuma:
3626case RISCVVector::BI__builtin_rvv_vle64ff_v_tuma:
3627case RISCVVector::BI__builtin_rvv_vle8ff_v_tuma:
3628 ID = Intrinsic::riscv_vleff_mask;
3629 PolicyAttrs = 2;
3630IsMasked = true;
3631
3632 {
3633 if (IsMasked) {
3634 // Move mask to right before vl.
3635 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3636 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3637 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3638 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3639 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3640 } else {
3641 if (PolicyAttrs & RVV_VTA)
3642 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3643 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3644 }
3645 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3646 Value *NewVL = Ops[2];
3647 Ops.erase(Ops.begin() + 2);
3648 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3649 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3650 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3651 // Store new_vl.
3652 clang::CharUnits Align;
3653 if (IsMasked)
3654 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3655 else
3656 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3657 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3658 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3659 return V;
3660 }
3661 break;
3662case RISCVVector::BI__builtin_rvv_vle16ff_v_tama:
3663case RISCVVector::BI__builtin_rvv_vle32ff_v_tama:
3664case RISCVVector::BI__builtin_rvv_vle64ff_v_tama:
3665case RISCVVector::BI__builtin_rvv_vle8ff_v_tama:
3666 ID = Intrinsic::riscv_vleff_mask;
3667 PolicyAttrs = 3;
3668IsMasked = true;
3669
3670 {
3671 if (IsMasked) {
3672 // Move mask to right before vl.
3673 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3674 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3675 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3676 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3677 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3678 } else {
3679 if (PolicyAttrs & RVV_VTA)
3680 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3681 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3682 }
3683 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3684 Value *NewVL = Ops[2];
3685 Ops.erase(Ops.begin() + 2);
3686 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3687 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3688 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3689 // Store new_vl.
3690 clang::CharUnits Align;
3691 if (IsMasked)
3692 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3693 else
3694 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3695 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3696 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3697 return V;
3698 }
3699 break;
3700case RISCVVector::BI__builtin_rvv_vle16ff_v_tumu:
3701case RISCVVector::BI__builtin_rvv_vle32ff_v_tumu:
3702case RISCVVector::BI__builtin_rvv_vle64ff_v_tumu:
3703case RISCVVector::BI__builtin_rvv_vle8ff_v_tumu:
3704 ID = Intrinsic::riscv_vleff_mask;
3705 PolicyAttrs = 0;
3706IsMasked = true;
3707
3708 {
3709 if (IsMasked) {
3710 // Move mask to right before vl.
3711 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3712 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3713 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3714 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3715 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3716 } else {
3717 if (PolicyAttrs & RVV_VTA)
3718 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3719 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3720 }
3721 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3722 Value *NewVL = Ops[2];
3723 Ops.erase(Ops.begin() + 2);
3724 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3725 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3726 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3727 // Store new_vl.
3728 clang::CharUnits Align;
3729 if (IsMasked)
3730 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3731 else
3732 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3733 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3734 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3735 return V;
3736 }
3737 break;
3738case RISCVVector::BI__builtin_rvv_vle16ff_v_tamu:
3739case RISCVVector::BI__builtin_rvv_vle32ff_v_tamu:
3740case RISCVVector::BI__builtin_rvv_vle64ff_v_tamu:
3741case RISCVVector::BI__builtin_rvv_vle8ff_v_tamu:
3742 ID = Intrinsic::riscv_vleff_mask;
3743 PolicyAttrs = 1;
3744IsMasked = true;
3745
3746 {
3747 if (IsMasked) {
3748 // Move mask to right before vl.
3749 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3750 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
3751 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3752 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3753 IntrinsicTypes = {ResultType, Ops[4]->getType()};
3754 } else {
3755 if (PolicyAttrs & RVV_VTA)
3756 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3757 IntrinsicTypes = {ResultType, Ops[3]->getType()};
3758 }
3759 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3760 Value *NewVL = Ops[2];
3761 Ops.erase(Ops.begin() + 2);
3762 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3763 llvm::Value *LoadValue = Builder.CreateCall(F, Ops, "");
3764 llvm::Value *V = Builder.CreateExtractValue(LoadValue, {0});
3765 // Store new_vl.
3766 clang::CharUnits Align;
3767 if (IsMasked)
3768 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(E->getNumArgs()-2)->getType());
3769 else
3770 Align = CGM.getNaturalPointeeTypeAlignment(E->getArg(1)->getType());
3771 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {1});
3772 Builder.CreateStore(Val, Address(NewVL, Val->getType(), Align));
3773 return V;
3774 }
3775 break;
3776case RISCVVector::BI__builtin_rvv_vlm_v:
3777 ID = Intrinsic::riscv_vlm;
3778 PolicyAttrs = 3;
3779 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
3780 IntrinsicTypes = {ResultType, Ops.back()->getType()};
3781 break;
3782case RISCVVector::BI__builtin_rvv_vloxei8_v_tu:
3783case RISCVVector::BI__builtin_rvv_vloxei16_v_tu:
3784case RISCVVector::BI__builtin_rvv_vloxei32_v_tu:
3785case RISCVVector::BI__builtin_rvv_vloxei64_v_tu:
3786 ID = Intrinsic::riscv_vloxei;
3787 PolicyAttrs = 2;
3788 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3789 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3790 break;
3791case RISCVVector::BI__builtin_rvv_vloxei8_v_ta:
3792case RISCVVector::BI__builtin_rvv_vloxei16_v_ta:
3793case RISCVVector::BI__builtin_rvv_vloxei32_v_ta:
3794case RISCVVector::BI__builtin_rvv_vloxei64_v_ta:
3795 ID = Intrinsic::riscv_vloxei;
3796 PolicyAttrs = 3;
3797 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
3798 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3799 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3800 break;
3801case RISCVVector::BI__builtin_rvv_vloxei8_v_tuma:
3802case RISCVVector::BI__builtin_rvv_vloxei16_v_tuma:
3803case RISCVVector::BI__builtin_rvv_vloxei32_v_tuma:
3804case RISCVVector::BI__builtin_rvv_vloxei64_v_tuma:
3805 ID = Intrinsic::riscv_vloxei_mask;
3806 PolicyAttrs = 2;
3807 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3808 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3809 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3810 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3811 break;
3812case RISCVVector::BI__builtin_rvv_vloxei8_v_tama:
3813case RISCVVector::BI__builtin_rvv_vloxei16_v_tama:
3814case RISCVVector::BI__builtin_rvv_vloxei32_v_tama:
3815case RISCVVector::BI__builtin_rvv_vloxei64_v_tama:
3816 ID = Intrinsic::riscv_vloxei_mask;
3817 PolicyAttrs = 3;
3818 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
3819 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3820 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3821 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
3822 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3823 break;
3824case RISCVVector::BI__builtin_rvv_vloxei8_v_tumu:
3825case RISCVVector::BI__builtin_rvv_vloxei16_v_tumu:
3826case RISCVVector::BI__builtin_rvv_vloxei32_v_tumu:
3827case RISCVVector::BI__builtin_rvv_vloxei64_v_tumu:
3828 ID = Intrinsic::riscv_vloxei_mask;
3829 PolicyAttrs = 0;
3830 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3831 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3832 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3833 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3834 break;
3835case RISCVVector::BI__builtin_rvv_vloxei8_v_tamu:
3836case RISCVVector::BI__builtin_rvv_vloxei16_v_tamu:
3837case RISCVVector::BI__builtin_rvv_vloxei32_v_tamu:
3838case RISCVVector::BI__builtin_rvv_vloxei64_v_tamu:
3839 ID = Intrinsic::riscv_vloxei_mask;
3840 PolicyAttrs = 1;
3841 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
3842 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
3843 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3844 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
3845 break;
3846case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tu:
3847case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tu:
3848case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tu:
3849case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tu:
3850 ID = Intrinsic::riscv_vloxseg2;
3851 NF = 2;
3852 PolicyAttrs = 2;
3853IsMasked = false;
3854
3855 {
3856 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
3857 SmallVector<llvm::Value*, 12> Operands;
3858
3859 // Please refer to comment under 'defvar NFList' in this file
3860 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
3861 (!IsMasked && PolicyAttrs & RVV_VTA))
3862 Operands.append(NF, llvm::PoisonValue::get(ResultType));
3863 else {
3864 if (IsMasked)
3865 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
3866 else // Unmasked
3867 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
3868 }
3869 unsigned PtrOperandIdx = IsMasked ?
3870 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
3871 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
3872 Value *PtrOperand = Ops[PtrOperandIdx];
3873 Value *IndexOperand = Ops[PtrOperandIdx + 1];
3874 Value *VLOperand = Ops[PtrOperandIdx + 2];
3875 Operands.push_back(PtrOperand);
3876 Operands.push_back(IndexOperand);
3877 if (IsMasked)
3878 Operands.push_back(Ops[NF]);
3879 Operands.push_back(VLOperand);
3880 if (IsMasked)
3881 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3882 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
3883
3884 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3885 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
3886 clang::CharUnits Align =
3887 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
3888 llvm::Value *V;
3889 for (unsigned I = 0; I < NF; ++I) {
3890 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
3891 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
3892 }
3893 return V;
3894 }
3895 break;
3896case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_ta:
3897case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_ta:
3898case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_ta:
3899case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_ta:
3900 ID = Intrinsic::riscv_vloxseg2;
3901 NF = 2;
3902 PolicyAttrs = 3;
3903IsMasked = false;
3904
3905 {
3906 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
3907 SmallVector<llvm::Value*, 12> Operands;
3908
3909 // Please refer to comment under 'defvar NFList' in this file
3910 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
3911 (!IsMasked && PolicyAttrs & RVV_VTA))
3912 Operands.append(NF, llvm::PoisonValue::get(ResultType));
3913 else {
3914 if (IsMasked)
3915 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
3916 else // Unmasked
3917 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
3918 }
3919 unsigned PtrOperandIdx = IsMasked ?
3920 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
3921 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
3922 Value *PtrOperand = Ops[PtrOperandIdx];
3923 Value *IndexOperand = Ops[PtrOperandIdx + 1];
3924 Value *VLOperand = Ops[PtrOperandIdx + 2];
3925 Operands.push_back(PtrOperand);
3926 Operands.push_back(IndexOperand);
3927 if (IsMasked)
3928 Operands.push_back(Ops[NF]);
3929 Operands.push_back(VLOperand);
3930 if (IsMasked)
3931 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3932 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
3933
3934 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3935 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
3936 clang::CharUnits Align =
3937 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
3938 llvm::Value *V;
3939 for (unsigned I = 0; I < NF; ++I) {
3940 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
3941 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
3942 }
3943 return V;
3944 }
3945 break;
3946case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tuma:
3947case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tuma:
3948case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tuma:
3949case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tuma:
3950 ID = Intrinsic::riscv_vloxseg2_mask;
3951 NF = 2;
3952 PolicyAttrs = 2;
3953IsMasked = true;
3954
3955 {
3956 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
3957 SmallVector<llvm::Value*, 12> Operands;
3958
3959 // Please refer to comment under 'defvar NFList' in this file
3960 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
3961 (!IsMasked && PolicyAttrs & RVV_VTA))
3962 Operands.append(NF, llvm::PoisonValue::get(ResultType));
3963 else {
3964 if (IsMasked)
3965 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
3966 else // Unmasked
3967 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
3968 }
3969 unsigned PtrOperandIdx = IsMasked ?
3970 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
3971 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
3972 Value *PtrOperand = Ops[PtrOperandIdx];
3973 Value *IndexOperand = Ops[PtrOperandIdx + 1];
3974 Value *VLOperand = Ops[PtrOperandIdx + 2];
3975 Operands.push_back(PtrOperand);
3976 Operands.push_back(IndexOperand);
3977 if (IsMasked)
3978 Operands.push_back(Ops[NF]);
3979 Operands.push_back(VLOperand);
3980 if (IsMasked)
3981 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
3982 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
3983
3984 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
3985 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
3986 clang::CharUnits Align =
3987 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
3988 llvm::Value *V;
3989 for (unsigned I = 0; I < NF; ++I) {
3990 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
3991 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
3992 }
3993 return V;
3994 }
3995 break;
3996case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tama:
3997case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tama:
3998case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tama:
3999case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tama:
4000 ID = Intrinsic::riscv_vloxseg2_mask;
4001 NF = 2;
4002 PolicyAttrs = 3;
4003IsMasked = true;
4004
4005 {
4006 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4007 SmallVector<llvm::Value*, 12> Operands;
4008
4009 // Please refer to comment under 'defvar NFList' in this file
4010 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4011 (!IsMasked && PolicyAttrs & RVV_VTA))
4012 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4013 else {
4014 if (IsMasked)
4015 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4016 else // Unmasked
4017 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4018 }
4019 unsigned PtrOperandIdx = IsMasked ?
4020 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4021 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4022 Value *PtrOperand = Ops[PtrOperandIdx];
4023 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4024 Value *VLOperand = Ops[PtrOperandIdx + 2];
4025 Operands.push_back(PtrOperand);
4026 Operands.push_back(IndexOperand);
4027 if (IsMasked)
4028 Operands.push_back(Ops[NF]);
4029 Operands.push_back(VLOperand);
4030 if (IsMasked)
4031 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4032 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4033
4034 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4035 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4036 clang::CharUnits Align =
4037 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4038 llvm::Value *V;
4039 for (unsigned I = 0; I < NF; ++I) {
4040 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4041 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4042 }
4043 return V;
4044 }
4045 break;
4046case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tumu:
4047case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tumu:
4048case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tumu:
4049case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tumu:
4050 ID = Intrinsic::riscv_vloxseg2_mask;
4051 NF = 2;
4052 PolicyAttrs = 0;
4053IsMasked = true;
4054
4055 {
4056 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4057 SmallVector<llvm::Value*, 12> Operands;
4058
4059 // Please refer to comment under 'defvar NFList' in this file
4060 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4061 (!IsMasked && PolicyAttrs & RVV_VTA))
4062 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4063 else {
4064 if (IsMasked)
4065 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4066 else // Unmasked
4067 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4068 }
4069 unsigned PtrOperandIdx = IsMasked ?
4070 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4071 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4072 Value *PtrOperand = Ops[PtrOperandIdx];
4073 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4074 Value *VLOperand = Ops[PtrOperandIdx + 2];
4075 Operands.push_back(PtrOperand);
4076 Operands.push_back(IndexOperand);
4077 if (IsMasked)
4078 Operands.push_back(Ops[NF]);
4079 Operands.push_back(VLOperand);
4080 if (IsMasked)
4081 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4082 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4083
4084 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4085 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4086 clang::CharUnits Align =
4087 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4088 llvm::Value *V;
4089 for (unsigned I = 0; I < NF; ++I) {
4090 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4091 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4092 }
4093 return V;
4094 }
4095 break;
4096case RISCVVector::BI__builtin_rvv_vloxseg2ei16_v_tamu:
4097case RISCVVector::BI__builtin_rvv_vloxseg2ei32_v_tamu:
4098case RISCVVector::BI__builtin_rvv_vloxseg2ei64_v_tamu:
4099case RISCVVector::BI__builtin_rvv_vloxseg2ei8_v_tamu:
4100 ID = Intrinsic::riscv_vloxseg2_mask;
4101 NF = 2;
4102 PolicyAttrs = 1;
4103IsMasked = true;
4104
4105 {
4106 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4107 SmallVector<llvm::Value*, 12> Operands;
4108
4109 // Please refer to comment under 'defvar NFList' in this file
4110 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4111 (!IsMasked && PolicyAttrs & RVV_VTA))
4112 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4113 else {
4114 if (IsMasked)
4115 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4116 else // Unmasked
4117 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4118 }
4119 unsigned PtrOperandIdx = IsMasked ?
4120 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4121 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4122 Value *PtrOperand = Ops[PtrOperandIdx];
4123 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4124 Value *VLOperand = Ops[PtrOperandIdx + 2];
4125 Operands.push_back(PtrOperand);
4126 Operands.push_back(IndexOperand);
4127 if (IsMasked)
4128 Operands.push_back(Ops[NF]);
4129 Operands.push_back(VLOperand);
4130 if (IsMasked)
4131 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4132 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4133
4134 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4135 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4136 clang::CharUnits Align =
4137 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4138 llvm::Value *V;
4139 for (unsigned I = 0; I < NF; ++I) {
4140 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4141 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4142 }
4143 return V;
4144 }
4145 break;
4146case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tu:
4147case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tu:
4148case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tu:
4149case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tu:
4150 ID = Intrinsic::riscv_vloxseg3;
4151 NF = 3;
4152 PolicyAttrs = 2;
4153IsMasked = false;
4154
4155 {
4156 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4157 SmallVector<llvm::Value*, 12> Operands;
4158
4159 // Please refer to comment under 'defvar NFList' in this file
4160 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4161 (!IsMasked && PolicyAttrs & RVV_VTA))
4162 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4163 else {
4164 if (IsMasked)
4165 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4166 else // Unmasked
4167 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4168 }
4169 unsigned PtrOperandIdx = IsMasked ?
4170 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4171 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4172 Value *PtrOperand = Ops[PtrOperandIdx];
4173 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4174 Value *VLOperand = Ops[PtrOperandIdx + 2];
4175 Operands.push_back(PtrOperand);
4176 Operands.push_back(IndexOperand);
4177 if (IsMasked)
4178 Operands.push_back(Ops[NF]);
4179 Operands.push_back(VLOperand);
4180 if (IsMasked)
4181 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4182 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4183
4184 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4185 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4186 clang::CharUnits Align =
4187 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4188 llvm::Value *V;
4189 for (unsigned I = 0; I < NF; ++I) {
4190 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4191 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4192 }
4193 return V;
4194 }
4195 break;
4196case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_ta:
4197case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_ta:
4198case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_ta:
4199case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_ta:
4200 ID = Intrinsic::riscv_vloxseg3;
4201 NF = 3;
4202 PolicyAttrs = 3;
4203IsMasked = false;
4204
4205 {
4206 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4207 SmallVector<llvm::Value*, 12> Operands;
4208
4209 // Please refer to comment under 'defvar NFList' in this file
4210 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4211 (!IsMasked && PolicyAttrs & RVV_VTA))
4212 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4213 else {
4214 if (IsMasked)
4215 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4216 else // Unmasked
4217 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4218 }
4219 unsigned PtrOperandIdx = IsMasked ?
4220 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4221 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4222 Value *PtrOperand = Ops[PtrOperandIdx];
4223 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4224 Value *VLOperand = Ops[PtrOperandIdx + 2];
4225 Operands.push_back(PtrOperand);
4226 Operands.push_back(IndexOperand);
4227 if (IsMasked)
4228 Operands.push_back(Ops[NF]);
4229 Operands.push_back(VLOperand);
4230 if (IsMasked)
4231 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4232 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4233
4234 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4235 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4236 clang::CharUnits Align =
4237 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4238 llvm::Value *V;
4239 for (unsigned I = 0; I < NF; ++I) {
4240 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4241 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4242 }
4243 return V;
4244 }
4245 break;
4246case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tuma:
4247case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tuma:
4248case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tuma:
4249case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tuma:
4250 ID = Intrinsic::riscv_vloxseg3_mask;
4251 NF = 3;
4252 PolicyAttrs = 2;
4253IsMasked = true;
4254
4255 {
4256 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4257 SmallVector<llvm::Value*, 12> Operands;
4258
4259 // Please refer to comment under 'defvar NFList' in this file
4260 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4261 (!IsMasked && PolicyAttrs & RVV_VTA))
4262 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4263 else {
4264 if (IsMasked)
4265 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4266 else // Unmasked
4267 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4268 }
4269 unsigned PtrOperandIdx = IsMasked ?
4270 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4271 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4272 Value *PtrOperand = Ops[PtrOperandIdx];
4273 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4274 Value *VLOperand = Ops[PtrOperandIdx + 2];
4275 Operands.push_back(PtrOperand);
4276 Operands.push_back(IndexOperand);
4277 if (IsMasked)
4278 Operands.push_back(Ops[NF]);
4279 Operands.push_back(VLOperand);
4280 if (IsMasked)
4281 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4282 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4283
4284 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4285 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4286 clang::CharUnits Align =
4287 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4288 llvm::Value *V;
4289 for (unsigned I = 0; I < NF; ++I) {
4290 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4291 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4292 }
4293 return V;
4294 }
4295 break;
4296case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tama:
4297case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tama:
4298case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tama:
4299case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tama:
4300 ID = Intrinsic::riscv_vloxseg3_mask;
4301 NF = 3;
4302 PolicyAttrs = 3;
4303IsMasked = true;
4304
4305 {
4306 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4307 SmallVector<llvm::Value*, 12> Operands;
4308
4309 // Please refer to comment under 'defvar NFList' in this file
4310 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4311 (!IsMasked && PolicyAttrs & RVV_VTA))
4312 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4313 else {
4314 if (IsMasked)
4315 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4316 else // Unmasked
4317 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4318 }
4319 unsigned PtrOperandIdx = IsMasked ?
4320 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4321 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4322 Value *PtrOperand = Ops[PtrOperandIdx];
4323 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4324 Value *VLOperand = Ops[PtrOperandIdx + 2];
4325 Operands.push_back(PtrOperand);
4326 Operands.push_back(IndexOperand);
4327 if (IsMasked)
4328 Operands.push_back(Ops[NF]);
4329 Operands.push_back(VLOperand);
4330 if (IsMasked)
4331 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4332 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4333
4334 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4335 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4336 clang::CharUnits Align =
4337 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4338 llvm::Value *V;
4339 for (unsigned I = 0; I < NF; ++I) {
4340 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4341 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4342 }
4343 return V;
4344 }
4345 break;
4346case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tumu:
4347case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tumu:
4348case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tumu:
4349case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tumu:
4350 ID = Intrinsic::riscv_vloxseg3_mask;
4351 NF = 3;
4352 PolicyAttrs = 0;
4353IsMasked = true;
4354
4355 {
4356 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4357 SmallVector<llvm::Value*, 12> Operands;
4358
4359 // Please refer to comment under 'defvar NFList' in this file
4360 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4361 (!IsMasked && PolicyAttrs & RVV_VTA))
4362 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4363 else {
4364 if (IsMasked)
4365 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4366 else // Unmasked
4367 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4368 }
4369 unsigned PtrOperandIdx = IsMasked ?
4370 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4371 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4372 Value *PtrOperand = Ops[PtrOperandIdx];
4373 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4374 Value *VLOperand = Ops[PtrOperandIdx + 2];
4375 Operands.push_back(PtrOperand);
4376 Operands.push_back(IndexOperand);
4377 if (IsMasked)
4378 Operands.push_back(Ops[NF]);
4379 Operands.push_back(VLOperand);
4380 if (IsMasked)
4381 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4382 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4383
4384 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4385 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4386 clang::CharUnits Align =
4387 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4388 llvm::Value *V;
4389 for (unsigned I = 0; I < NF; ++I) {
4390 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4391 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4392 }
4393 return V;
4394 }
4395 break;
4396case RISCVVector::BI__builtin_rvv_vloxseg3ei8_v_tamu:
4397case RISCVVector::BI__builtin_rvv_vloxseg3ei16_v_tamu:
4398case RISCVVector::BI__builtin_rvv_vloxseg3ei32_v_tamu:
4399case RISCVVector::BI__builtin_rvv_vloxseg3ei64_v_tamu:
4400 ID = Intrinsic::riscv_vloxseg3_mask;
4401 NF = 3;
4402 PolicyAttrs = 1;
4403IsMasked = true;
4404
4405 {
4406 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4407 SmallVector<llvm::Value*, 12> Operands;
4408
4409 // Please refer to comment under 'defvar NFList' in this file
4410 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4411 (!IsMasked && PolicyAttrs & RVV_VTA))
4412 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4413 else {
4414 if (IsMasked)
4415 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4416 else // Unmasked
4417 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4418 }
4419 unsigned PtrOperandIdx = IsMasked ?
4420 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4421 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4422 Value *PtrOperand = Ops[PtrOperandIdx];
4423 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4424 Value *VLOperand = Ops[PtrOperandIdx + 2];
4425 Operands.push_back(PtrOperand);
4426 Operands.push_back(IndexOperand);
4427 if (IsMasked)
4428 Operands.push_back(Ops[NF]);
4429 Operands.push_back(VLOperand);
4430 if (IsMasked)
4431 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4432 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4433
4434 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4435 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4436 clang::CharUnits Align =
4437 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4438 llvm::Value *V;
4439 for (unsigned I = 0; I < NF; ++I) {
4440 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4441 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4442 }
4443 return V;
4444 }
4445 break;
4446case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tu:
4447case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tu:
4448case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tu:
4449case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tu:
4450 ID = Intrinsic::riscv_vloxseg4;
4451 NF = 4;
4452 PolicyAttrs = 2;
4453IsMasked = false;
4454
4455 {
4456 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4457 SmallVector<llvm::Value*, 12> Operands;
4458
4459 // Please refer to comment under 'defvar NFList' in this file
4460 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4461 (!IsMasked && PolicyAttrs & RVV_VTA))
4462 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4463 else {
4464 if (IsMasked)
4465 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4466 else // Unmasked
4467 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4468 }
4469 unsigned PtrOperandIdx = IsMasked ?
4470 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4471 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4472 Value *PtrOperand = Ops[PtrOperandIdx];
4473 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4474 Value *VLOperand = Ops[PtrOperandIdx + 2];
4475 Operands.push_back(PtrOperand);
4476 Operands.push_back(IndexOperand);
4477 if (IsMasked)
4478 Operands.push_back(Ops[NF]);
4479 Operands.push_back(VLOperand);
4480 if (IsMasked)
4481 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4482 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4483
4484 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4485 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4486 clang::CharUnits Align =
4487 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4488 llvm::Value *V;
4489 for (unsigned I = 0; I < NF; ++I) {
4490 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4491 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4492 }
4493 return V;
4494 }
4495 break;
4496case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_ta:
4497case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_ta:
4498case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_ta:
4499case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_ta:
4500 ID = Intrinsic::riscv_vloxseg4;
4501 NF = 4;
4502 PolicyAttrs = 3;
4503IsMasked = false;
4504
4505 {
4506 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4507 SmallVector<llvm::Value*, 12> Operands;
4508
4509 // Please refer to comment under 'defvar NFList' in this file
4510 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4511 (!IsMasked && PolicyAttrs & RVV_VTA))
4512 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4513 else {
4514 if (IsMasked)
4515 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4516 else // Unmasked
4517 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4518 }
4519 unsigned PtrOperandIdx = IsMasked ?
4520 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4521 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4522 Value *PtrOperand = Ops[PtrOperandIdx];
4523 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4524 Value *VLOperand = Ops[PtrOperandIdx + 2];
4525 Operands.push_back(PtrOperand);
4526 Operands.push_back(IndexOperand);
4527 if (IsMasked)
4528 Operands.push_back(Ops[NF]);
4529 Operands.push_back(VLOperand);
4530 if (IsMasked)
4531 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4532 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4533
4534 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4535 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4536 clang::CharUnits Align =
4537 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4538 llvm::Value *V;
4539 for (unsigned I = 0; I < NF; ++I) {
4540 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4541 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4542 }
4543 return V;
4544 }
4545 break;
4546case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tuma:
4547case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tuma:
4548case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tuma:
4549case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tuma:
4550 ID = Intrinsic::riscv_vloxseg4_mask;
4551 NF = 4;
4552 PolicyAttrs = 2;
4553IsMasked = true;
4554
4555 {
4556 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4557 SmallVector<llvm::Value*, 12> Operands;
4558
4559 // Please refer to comment under 'defvar NFList' in this file
4560 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4561 (!IsMasked && PolicyAttrs & RVV_VTA))
4562 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4563 else {
4564 if (IsMasked)
4565 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4566 else // Unmasked
4567 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4568 }
4569 unsigned PtrOperandIdx = IsMasked ?
4570 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4571 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4572 Value *PtrOperand = Ops[PtrOperandIdx];
4573 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4574 Value *VLOperand = Ops[PtrOperandIdx + 2];
4575 Operands.push_back(PtrOperand);
4576 Operands.push_back(IndexOperand);
4577 if (IsMasked)
4578 Operands.push_back(Ops[NF]);
4579 Operands.push_back(VLOperand);
4580 if (IsMasked)
4581 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4582 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4583
4584 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4585 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4586 clang::CharUnits Align =
4587 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4588 llvm::Value *V;
4589 for (unsigned I = 0; I < NF; ++I) {
4590 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4591 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4592 }
4593 return V;
4594 }
4595 break;
4596case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tama:
4597case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tama:
4598case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tama:
4599case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tama:
4600 ID = Intrinsic::riscv_vloxseg4_mask;
4601 NF = 4;
4602 PolicyAttrs = 3;
4603IsMasked = true;
4604
4605 {
4606 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4607 SmallVector<llvm::Value*, 12> Operands;
4608
4609 // Please refer to comment under 'defvar NFList' in this file
4610 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4611 (!IsMasked && PolicyAttrs & RVV_VTA))
4612 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4613 else {
4614 if (IsMasked)
4615 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4616 else // Unmasked
4617 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4618 }
4619 unsigned PtrOperandIdx = IsMasked ?
4620 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4621 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4622 Value *PtrOperand = Ops[PtrOperandIdx];
4623 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4624 Value *VLOperand = Ops[PtrOperandIdx + 2];
4625 Operands.push_back(PtrOperand);
4626 Operands.push_back(IndexOperand);
4627 if (IsMasked)
4628 Operands.push_back(Ops[NF]);
4629 Operands.push_back(VLOperand);
4630 if (IsMasked)
4631 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4632 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4633
4634 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4635 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4636 clang::CharUnits Align =
4637 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4638 llvm::Value *V;
4639 for (unsigned I = 0; I < NF; ++I) {
4640 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4641 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4642 }
4643 return V;
4644 }
4645 break;
4646case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tumu:
4647case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tumu:
4648case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tumu:
4649case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tumu:
4650 ID = Intrinsic::riscv_vloxseg4_mask;
4651 NF = 4;
4652 PolicyAttrs = 0;
4653IsMasked = true;
4654
4655 {
4656 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4657 SmallVector<llvm::Value*, 12> Operands;
4658
4659 // Please refer to comment under 'defvar NFList' in this file
4660 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4661 (!IsMasked && PolicyAttrs & RVV_VTA))
4662 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4663 else {
4664 if (IsMasked)
4665 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4666 else // Unmasked
4667 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4668 }
4669 unsigned PtrOperandIdx = IsMasked ?
4670 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4671 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4672 Value *PtrOperand = Ops[PtrOperandIdx];
4673 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4674 Value *VLOperand = Ops[PtrOperandIdx + 2];
4675 Operands.push_back(PtrOperand);
4676 Operands.push_back(IndexOperand);
4677 if (IsMasked)
4678 Operands.push_back(Ops[NF]);
4679 Operands.push_back(VLOperand);
4680 if (IsMasked)
4681 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4682 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4683
4684 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4685 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4686 clang::CharUnits Align =
4687 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4688 llvm::Value *V;
4689 for (unsigned I = 0; I < NF; ++I) {
4690 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4691 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4692 }
4693 return V;
4694 }
4695 break;
4696case RISCVVector::BI__builtin_rvv_vloxseg4ei8_v_tamu:
4697case RISCVVector::BI__builtin_rvv_vloxseg4ei16_v_tamu:
4698case RISCVVector::BI__builtin_rvv_vloxseg4ei32_v_tamu:
4699case RISCVVector::BI__builtin_rvv_vloxseg4ei64_v_tamu:
4700 ID = Intrinsic::riscv_vloxseg4_mask;
4701 NF = 4;
4702 PolicyAttrs = 1;
4703IsMasked = true;
4704
4705 {
4706 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4707 SmallVector<llvm::Value*, 12> Operands;
4708
4709 // Please refer to comment under 'defvar NFList' in this file
4710 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4711 (!IsMasked && PolicyAttrs & RVV_VTA))
4712 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4713 else {
4714 if (IsMasked)
4715 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4716 else // Unmasked
4717 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4718 }
4719 unsigned PtrOperandIdx = IsMasked ?
4720 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4721 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4722 Value *PtrOperand = Ops[PtrOperandIdx];
4723 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4724 Value *VLOperand = Ops[PtrOperandIdx + 2];
4725 Operands.push_back(PtrOperand);
4726 Operands.push_back(IndexOperand);
4727 if (IsMasked)
4728 Operands.push_back(Ops[NF]);
4729 Operands.push_back(VLOperand);
4730 if (IsMasked)
4731 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4732 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4733
4734 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4735 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4736 clang::CharUnits Align =
4737 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4738 llvm::Value *V;
4739 for (unsigned I = 0; I < NF; ++I) {
4740 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4741 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4742 }
4743 return V;
4744 }
4745 break;
4746case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tu:
4747case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tu:
4748case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tu:
4749case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tu:
4750 ID = Intrinsic::riscv_vloxseg5;
4751 NF = 5;
4752 PolicyAttrs = 2;
4753IsMasked = false;
4754
4755 {
4756 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4757 SmallVector<llvm::Value*, 12> Operands;
4758
4759 // Please refer to comment under 'defvar NFList' in this file
4760 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4761 (!IsMasked && PolicyAttrs & RVV_VTA))
4762 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4763 else {
4764 if (IsMasked)
4765 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4766 else // Unmasked
4767 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4768 }
4769 unsigned PtrOperandIdx = IsMasked ?
4770 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4771 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4772 Value *PtrOperand = Ops[PtrOperandIdx];
4773 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4774 Value *VLOperand = Ops[PtrOperandIdx + 2];
4775 Operands.push_back(PtrOperand);
4776 Operands.push_back(IndexOperand);
4777 if (IsMasked)
4778 Operands.push_back(Ops[NF]);
4779 Operands.push_back(VLOperand);
4780 if (IsMasked)
4781 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4782 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4783
4784 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4785 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4786 clang::CharUnits Align =
4787 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4788 llvm::Value *V;
4789 for (unsigned I = 0; I < NF; ++I) {
4790 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4791 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4792 }
4793 return V;
4794 }
4795 break;
4796case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_ta:
4797case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_ta:
4798case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_ta:
4799case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_ta:
4800 ID = Intrinsic::riscv_vloxseg5;
4801 NF = 5;
4802 PolicyAttrs = 3;
4803IsMasked = false;
4804
4805 {
4806 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4807 SmallVector<llvm::Value*, 12> Operands;
4808
4809 // Please refer to comment under 'defvar NFList' in this file
4810 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4811 (!IsMasked && PolicyAttrs & RVV_VTA))
4812 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4813 else {
4814 if (IsMasked)
4815 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4816 else // Unmasked
4817 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4818 }
4819 unsigned PtrOperandIdx = IsMasked ?
4820 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4821 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4822 Value *PtrOperand = Ops[PtrOperandIdx];
4823 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4824 Value *VLOperand = Ops[PtrOperandIdx + 2];
4825 Operands.push_back(PtrOperand);
4826 Operands.push_back(IndexOperand);
4827 if (IsMasked)
4828 Operands.push_back(Ops[NF]);
4829 Operands.push_back(VLOperand);
4830 if (IsMasked)
4831 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4832 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4833
4834 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4835 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4836 clang::CharUnits Align =
4837 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4838 llvm::Value *V;
4839 for (unsigned I = 0; I < NF; ++I) {
4840 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4841 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4842 }
4843 return V;
4844 }
4845 break;
4846case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tuma:
4847case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tuma:
4848case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tuma:
4849case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tuma:
4850 ID = Intrinsic::riscv_vloxseg5_mask;
4851 NF = 5;
4852 PolicyAttrs = 2;
4853IsMasked = true;
4854
4855 {
4856 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4857 SmallVector<llvm::Value*, 12> Operands;
4858
4859 // Please refer to comment under 'defvar NFList' in this file
4860 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4861 (!IsMasked && PolicyAttrs & RVV_VTA))
4862 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4863 else {
4864 if (IsMasked)
4865 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4866 else // Unmasked
4867 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4868 }
4869 unsigned PtrOperandIdx = IsMasked ?
4870 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4871 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4872 Value *PtrOperand = Ops[PtrOperandIdx];
4873 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4874 Value *VLOperand = Ops[PtrOperandIdx + 2];
4875 Operands.push_back(PtrOperand);
4876 Operands.push_back(IndexOperand);
4877 if (IsMasked)
4878 Operands.push_back(Ops[NF]);
4879 Operands.push_back(VLOperand);
4880 if (IsMasked)
4881 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4882 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4883
4884 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4885 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4886 clang::CharUnits Align =
4887 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4888 llvm::Value *V;
4889 for (unsigned I = 0; I < NF; ++I) {
4890 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4891 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4892 }
4893 return V;
4894 }
4895 break;
4896case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tama:
4897case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tama:
4898case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tama:
4899case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tama:
4900 ID = Intrinsic::riscv_vloxseg5_mask;
4901 NF = 5;
4902 PolicyAttrs = 3;
4903IsMasked = true;
4904
4905 {
4906 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4907 SmallVector<llvm::Value*, 12> Operands;
4908
4909 // Please refer to comment under 'defvar NFList' in this file
4910 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4911 (!IsMasked && PolicyAttrs & RVV_VTA))
4912 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4913 else {
4914 if (IsMasked)
4915 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4916 else // Unmasked
4917 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4918 }
4919 unsigned PtrOperandIdx = IsMasked ?
4920 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4921 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4922 Value *PtrOperand = Ops[PtrOperandIdx];
4923 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4924 Value *VLOperand = Ops[PtrOperandIdx + 2];
4925 Operands.push_back(PtrOperand);
4926 Operands.push_back(IndexOperand);
4927 if (IsMasked)
4928 Operands.push_back(Ops[NF]);
4929 Operands.push_back(VLOperand);
4930 if (IsMasked)
4931 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4932 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4933
4934 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4935 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4936 clang::CharUnits Align =
4937 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4938 llvm::Value *V;
4939 for (unsigned I = 0; I < NF; ++I) {
4940 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4941 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4942 }
4943 return V;
4944 }
4945 break;
4946case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tumu:
4947case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tumu:
4948case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tumu:
4949case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tumu:
4950 ID = Intrinsic::riscv_vloxseg5_mask;
4951 NF = 5;
4952 PolicyAttrs = 0;
4953IsMasked = true;
4954
4955 {
4956 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
4957 SmallVector<llvm::Value*, 12> Operands;
4958
4959 // Please refer to comment under 'defvar NFList' in this file
4960 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
4961 (!IsMasked && PolicyAttrs & RVV_VTA))
4962 Operands.append(NF, llvm::PoisonValue::get(ResultType));
4963 else {
4964 if (IsMasked)
4965 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
4966 else // Unmasked
4967 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
4968 }
4969 unsigned PtrOperandIdx = IsMasked ?
4970 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
4971 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
4972 Value *PtrOperand = Ops[PtrOperandIdx];
4973 Value *IndexOperand = Ops[PtrOperandIdx + 1];
4974 Value *VLOperand = Ops[PtrOperandIdx + 2];
4975 Operands.push_back(PtrOperand);
4976 Operands.push_back(IndexOperand);
4977 if (IsMasked)
4978 Operands.push_back(Ops[NF]);
4979 Operands.push_back(VLOperand);
4980 if (IsMasked)
4981 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
4982 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
4983
4984 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
4985 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
4986 clang::CharUnits Align =
4987 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
4988 llvm::Value *V;
4989 for (unsigned I = 0; I < NF; ++I) {
4990 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
4991 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
4992 }
4993 return V;
4994 }
4995 break;
4996case RISCVVector::BI__builtin_rvv_vloxseg5ei8_v_tamu:
4997case RISCVVector::BI__builtin_rvv_vloxseg5ei16_v_tamu:
4998case RISCVVector::BI__builtin_rvv_vloxseg5ei32_v_tamu:
4999case RISCVVector::BI__builtin_rvv_vloxseg5ei64_v_tamu:
5000 ID = Intrinsic::riscv_vloxseg5_mask;
5001 NF = 5;
5002 PolicyAttrs = 1;
5003IsMasked = true;
5004
5005 {
5006 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5007 SmallVector<llvm::Value*, 12> Operands;
5008
5009 // Please refer to comment under 'defvar NFList' in this file
5010 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5011 (!IsMasked && PolicyAttrs & RVV_VTA))
5012 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5013 else {
5014 if (IsMasked)
5015 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5016 else // Unmasked
5017 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5018 }
5019 unsigned PtrOperandIdx = IsMasked ?
5020 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5021 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5022 Value *PtrOperand = Ops[PtrOperandIdx];
5023 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5024 Value *VLOperand = Ops[PtrOperandIdx + 2];
5025 Operands.push_back(PtrOperand);
5026 Operands.push_back(IndexOperand);
5027 if (IsMasked)
5028 Operands.push_back(Ops[NF]);
5029 Operands.push_back(VLOperand);
5030 if (IsMasked)
5031 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5032 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5033
5034 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5035 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5036 clang::CharUnits Align =
5037 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5038 llvm::Value *V;
5039 for (unsigned I = 0; I < NF; ++I) {
5040 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5041 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5042 }
5043 return V;
5044 }
5045 break;
5046case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tu:
5047case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tu:
5048case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tu:
5049case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tu:
5050 ID = Intrinsic::riscv_vloxseg6;
5051 NF = 6;
5052 PolicyAttrs = 2;
5053IsMasked = false;
5054
5055 {
5056 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5057 SmallVector<llvm::Value*, 12> Operands;
5058
5059 // Please refer to comment under 'defvar NFList' in this file
5060 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5061 (!IsMasked && PolicyAttrs & RVV_VTA))
5062 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5063 else {
5064 if (IsMasked)
5065 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5066 else // Unmasked
5067 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5068 }
5069 unsigned PtrOperandIdx = IsMasked ?
5070 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5071 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5072 Value *PtrOperand = Ops[PtrOperandIdx];
5073 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5074 Value *VLOperand = Ops[PtrOperandIdx + 2];
5075 Operands.push_back(PtrOperand);
5076 Operands.push_back(IndexOperand);
5077 if (IsMasked)
5078 Operands.push_back(Ops[NF]);
5079 Operands.push_back(VLOperand);
5080 if (IsMasked)
5081 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5082 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5083
5084 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5085 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5086 clang::CharUnits Align =
5087 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5088 llvm::Value *V;
5089 for (unsigned I = 0; I < NF; ++I) {
5090 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5091 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5092 }
5093 return V;
5094 }
5095 break;
5096case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_ta:
5097case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_ta:
5098case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_ta:
5099case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_ta:
5100 ID = Intrinsic::riscv_vloxseg6;
5101 NF = 6;
5102 PolicyAttrs = 3;
5103IsMasked = false;
5104
5105 {
5106 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5107 SmallVector<llvm::Value*, 12> Operands;
5108
5109 // Please refer to comment under 'defvar NFList' in this file
5110 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5111 (!IsMasked && PolicyAttrs & RVV_VTA))
5112 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5113 else {
5114 if (IsMasked)
5115 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5116 else // Unmasked
5117 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5118 }
5119 unsigned PtrOperandIdx = IsMasked ?
5120 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5121 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5122 Value *PtrOperand = Ops[PtrOperandIdx];
5123 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5124 Value *VLOperand = Ops[PtrOperandIdx + 2];
5125 Operands.push_back(PtrOperand);
5126 Operands.push_back(IndexOperand);
5127 if (IsMasked)
5128 Operands.push_back(Ops[NF]);
5129 Operands.push_back(VLOperand);
5130 if (IsMasked)
5131 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5132 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5133
5134 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5135 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5136 clang::CharUnits Align =
5137 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5138 llvm::Value *V;
5139 for (unsigned I = 0; I < NF; ++I) {
5140 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5141 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5142 }
5143 return V;
5144 }
5145 break;
5146case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tuma:
5147case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tuma:
5148case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tuma:
5149case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tuma:
5150 ID = Intrinsic::riscv_vloxseg6_mask;
5151 NF = 6;
5152 PolicyAttrs = 2;
5153IsMasked = true;
5154
5155 {
5156 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5157 SmallVector<llvm::Value*, 12> Operands;
5158
5159 // Please refer to comment under 'defvar NFList' in this file
5160 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5161 (!IsMasked && PolicyAttrs & RVV_VTA))
5162 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5163 else {
5164 if (IsMasked)
5165 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5166 else // Unmasked
5167 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5168 }
5169 unsigned PtrOperandIdx = IsMasked ?
5170 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5171 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5172 Value *PtrOperand = Ops[PtrOperandIdx];
5173 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5174 Value *VLOperand = Ops[PtrOperandIdx + 2];
5175 Operands.push_back(PtrOperand);
5176 Operands.push_back(IndexOperand);
5177 if (IsMasked)
5178 Operands.push_back(Ops[NF]);
5179 Operands.push_back(VLOperand);
5180 if (IsMasked)
5181 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5182 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5183
5184 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5185 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5186 clang::CharUnits Align =
5187 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5188 llvm::Value *V;
5189 for (unsigned I = 0; I < NF; ++I) {
5190 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5191 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5192 }
5193 return V;
5194 }
5195 break;
5196case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tama:
5197case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tama:
5198case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tama:
5199case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tama:
5200 ID = Intrinsic::riscv_vloxseg6_mask;
5201 NF = 6;
5202 PolicyAttrs = 3;
5203IsMasked = true;
5204
5205 {
5206 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5207 SmallVector<llvm::Value*, 12> Operands;
5208
5209 // Please refer to comment under 'defvar NFList' in this file
5210 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5211 (!IsMasked && PolicyAttrs & RVV_VTA))
5212 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5213 else {
5214 if (IsMasked)
5215 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5216 else // Unmasked
5217 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5218 }
5219 unsigned PtrOperandIdx = IsMasked ?
5220 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5221 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5222 Value *PtrOperand = Ops[PtrOperandIdx];
5223 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5224 Value *VLOperand = Ops[PtrOperandIdx + 2];
5225 Operands.push_back(PtrOperand);
5226 Operands.push_back(IndexOperand);
5227 if (IsMasked)
5228 Operands.push_back(Ops[NF]);
5229 Operands.push_back(VLOperand);
5230 if (IsMasked)
5231 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5232 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5233
5234 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5235 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5236 clang::CharUnits Align =
5237 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5238 llvm::Value *V;
5239 for (unsigned I = 0; I < NF; ++I) {
5240 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5241 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5242 }
5243 return V;
5244 }
5245 break;
5246case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tumu:
5247case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tumu:
5248case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tumu:
5249case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tumu:
5250 ID = Intrinsic::riscv_vloxseg6_mask;
5251 NF = 6;
5252 PolicyAttrs = 0;
5253IsMasked = true;
5254
5255 {
5256 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5257 SmallVector<llvm::Value*, 12> Operands;
5258
5259 // Please refer to comment under 'defvar NFList' in this file
5260 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5261 (!IsMasked && PolicyAttrs & RVV_VTA))
5262 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5263 else {
5264 if (IsMasked)
5265 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5266 else // Unmasked
5267 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5268 }
5269 unsigned PtrOperandIdx = IsMasked ?
5270 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5271 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5272 Value *PtrOperand = Ops[PtrOperandIdx];
5273 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5274 Value *VLOperand = Ops[PtrOperandIdx + 2];
5275 Operands.push_back(PtrOperand);
5276 Operands.push_back(IndexOperand);
5277 if (IsMasked)
5278 Operands.push_back(Ops[NF]);
5279 Operands.push_back(VLOperand);
5280 if (IsMasked)
5281 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5282 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5283
5284 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5285 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5286 clang::CharUnits Align =
5287 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5288 llvm::Value *V;
5289 for (unsigned I = 0; I < NF; ++I) {
5290 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5291 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5292 }
5293 return V;
5294 }
5295 break;
5296case RISCVVector::BI__builtin_rvv_vloxseg6ei8_v_tamu:
5297case RISCVVector::BI__builtin_rvv_vloxseg6ei16_v_tamu:
5298case RISCVVector::BI__builtin_rvv_vloxseg6ei32_v_tamu:
5299case RISCVVector::BI__builtin_rvv_vloxseg6ei64_v_tamu:
5300 ID = Intrinsic::riscv_vloxseg6_mask;
5301 NF = 6;
5302 PolicyAttrs = 1;
5303IsMasked = true;
5304
5305 {
5306 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5307 SmallVector<llvm::Value*, 12> Operands;
5308
5309 // Please refer to comment under 'defvar NFList' in this file
5310 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5311 (!IsMasked && PolicyAttrs & RVV_VTA))
5312 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5313 else {
5314 if (IsMasked)
5315 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5316 else // Unmasked
5317 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5318 }
5319 unsigned PtrOperandIdx = IsMasked ?
5320 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5321 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5322 Value *PtrOperand = Ops[PtrOperandIdx];
5323 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5324 Value *VLOperand = Ops[PtrOperandIdx + 2];
5325 Operands.push_back(PtrOperand);
5326 Operands.push_back(IndexOperand);
5327 if (IsMasked)
5328 Operands.push_back(Ops[NF]);
5329 Operands.push_back(VLOperand);
5330 if (IsMasked)
5331 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5332 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5333
5334 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5335 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5336 clang::CharUnits Align =
5337 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5338 llvm::Value *V;
5339 for (unsigned I = 0; I < NF; ++I) {
5340 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5341 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5342 }
5343 return V;
5344 }
5345 break;
5346case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tu:
5347case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tu:
5348case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tu:
5349case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tu:
5350 ID = Intrinsic::riscv_vloxseg7;
5351 NF = 7;
5352 PolicyAttrs = 2;
5353IsMasked = false;
5354
5355 {
5356 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5357 SmallVector<llvm::Value*, 12> Operands;
5358
5359 // Please refer to comment under 'defvar NFList' in this file
5360 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5361 (!IsMasked && PolicyAttrs & RVV_VTA))
5362 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5363 else {
5364 if (IsMasked)
5365 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5366 else // Unmasked
5367 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5368 }
5369 unsigned PtrOperandIdx = IsMasked ?
5370 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5371 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5372 Value *PtrOperand = Ops[PtrOperandIdx];
5373 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5374 Value *VLOperand = Ops[PtrOperandIdx + 2];
5375 Operands.push_back(PtrOperand);
5376 Operands.push_back(IndexOperand);
5377 if (IsMasked)
5378 Operands.push_back(Ops[NF]);
5379 Operands.push_back(VLOperand);
5380 if (IsMasked)
5381 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5382 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5383
5384 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5385 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5386 clang::CharUnits Align =
5387 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5388 llvm::Value *V;
5389 for (unsigned I = 0; I < NF; ++I) {
5390 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5391 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5392 }
5393 return V;
5394 }
5395 break;
5396case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_ta:
5397case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_ta:
5398case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_ta:
5399case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_ta:
5400 ID = Intrinsic::riscv_vloxseg7;
5401 NF = 7;
5402 PolicyAttrs = 3;
5403IsMasked = false;
5404
5405 {
5406 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5407 SmallVector<llvm::Value*, 12> Operands;
5408
5409 // Please refer to comment under 'defvar NFList' in this file
5410 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5411 (!IsMasked && PolicyAttrs & RVV_VTA))
5412 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5413 else {
5414 if (IsMasked)
5415 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5416 else // Unmasked
5417 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5418 }
5419 unsigned PtrOperandIdx = IsMasked ?
5420 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5421 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5422 Value *PtrOperand = Ops[PtrOperandIdx];
5423 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5424 Value *VLOperand = Ops[PtrOperandIdx + 2];
5425 Operands.push_back(PtrOperand);
5426 Operands.push_back(IndexOperand);
5427 if (IsMasked)
5428 Operands.push_back(Ops[NF]);
5429 Operands.push_back(VLOperand);
5430 if (IsMasked)
5431 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5432 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5433
5434 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5435 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5436 clang::CharUnits Align =
5437 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5438 llvm::Value *V;
5439 for (unsigned I = 0; I < NF; ++I) {
5440 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5441 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5442 }
5443 return V;
5444 }
5445 break;
5446case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tuma:
5447case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tuma:
5448case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tuma:
5449case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tuma:
5450 ID = Intrinsic::riscv_vloxseg7_mask;
5451 NF = 7;
5452 PolicyAttrs = 2;
5453IsMasked = true;
5454
5455 {
5456 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5457 SmallVector<llvm::Value*, 12> Operands;
5458
5459 // Please refer to comment under 'defvar NFList' in this file
5460 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5461 (!IsMasked && PolicyAttrs & RVV_VTA))
5462 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5463 else {
5464 if (IsMasked)
5465 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5466 else // Unmasked
5467 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5468 }
5469 unsigned PtrOperandIdx = IsMasked ?
5470 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5471 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5472 Value *PtrOperand = Ops[PtrOperandIdx];
5473 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5474 Value *VLOperand = Ops[PtrOperandIdx + 2];
5475 Operands.push_back(PtrOperand);
5476 Operands.push_back(IndexOperand);
5477 if (IsMasked)
5478 Operands.push_back(Ops[NF]);
5479 Operands.push_back(VLOperand);
5480 if (IsMasked)
5481 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5482 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5483
5484 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5485 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5486 clang::CharUnits Align =
5487 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5488 llvm::Value *V;
5489 for (unsigned I = 0; I < NF; ++I) {
5490 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5491 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5492 }
5493 return V;
5494 }
5495 break;
5496case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tama:
5497case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tama:
5498case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tama:
5499case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tama:
5500 ID = Intrinsic::riscv_vloxseg7_mask;
5501 NF = 7;
5502 PolicyAttrs = 3;
5503IsMasked = true;
5504
5505 {
5506 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5507 SmallVector<llvm::Value*, 12> Operands;
5508
5509 // Please refer to comment under 'defvar NFList' in this file
5510 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5511 (!IsMasked && PolicyAttrs & RVV_VTA))
5512 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5513 else {
5514 if (IsMasked)
5515 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5516 else // Unmasked
5517 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5518 }
5519 unsigned PtrOperandIdx = IsMasked ?
5520 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5521 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5522 Value *PtrOperand = Ops[PtrOperandIdx];
5523 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5524 Value *VLOperand = Ops[PtrOperandIdx + 2];
5525 Operands.push_back(PtrOperand);
5526 Operands.push_back(IndexOperand);
5527 if (IsMasked)
5528 Operands.push_back(Ops[NF]);
5529 Operands.push_back(VLOperand);
5530 if (IsMasked)
5531 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5532 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5533
5534 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5535 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5536 clang::CharUnits Align =
5537 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5538 llvm::Value *V;
5539 for (unsigned I = 0; I < NF; ++I) {
5540 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5541 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5542 }
5543 return V;
5544 }
5545 break;
5546case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tumu:
5547case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tumu:
5548case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tumu:
5549case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tumu:
5550 ID = Intrinsic::riscv_vloxseg7_mask;
5551 NF = 7;
5552 PolicyAttrs = 0;
5553IsMasked = true;
5554
5555 {
5556 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5557 SmallVector<llvm::Value*, 12> Operands;
5558
5559 // Please refer to comment under 'defvar NFList' in this file
5560 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5561 (!IsMasked && PolicyAttrs & RVV_VTA))
5562 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5563 else {
5564 if (IsMasked)
5565 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5566 else // Unmasked
5567 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5568 }
5569 unsigned PtrOperandIdx = IsMasked ?
5570 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5571 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5572 Value *PtrOperand = Ops[PtrOperandIdx];
5573 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5574 Value *VLOperand = Ops[PtrOperandIdx + 2];
5575 Operands.push_back(PtrOperand);
5576 Operands.push_back(IndexOperand);
5577 if (IsMasked)
5578 Operands.push_back(Ops[NF]);
5579 Operands.push_back(VLOperand);
5580 if (IsMasked)
5581 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5582 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5583
5584 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5585 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5586 clang::CharUnits Align =
5587 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5588 llvm::Value *V;
5589 for (unsigned I = 0; I < NF; ++I) {
5590 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5591 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5592 }
5593 return V;
5594 }
5595 break;
5596case RISCVVector::BI__builtin_rvv_vloxseg7ei8_v_tamu:
5597case RISCVVector::BI__builtin_rvv_vloxseg7ei16_v_tamu:
5598case RISCVVector::BI__builtin_rvv_vloxseg7ei32_v_tamu:
5599case RISCVVector::BI__builtin_rvv_vloxseg7ei64_v_tamu:
5600 ID = Intrinsic::riscv_vloxseg7_mask;
5601 NF = 7;
5602 PolicyAttrs = 1;
5603IsMasked = true;
5604
5605 {
5606 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5607 SmallVector<llvm::Value*, 12> Operands;
5608
5609 // Please refer to comment under 'defvar NFList' in this file
5610 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5611 (!IsMasked && PolicyAttrs & RVV_VTA))
5612 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5613 else {
5614 if (IsMasked)
5615 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5616 else // Unmasked
5617 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5618 }
5619 unsigned PtrOperandIdx = IsMasked ?
5620 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5621 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5622 Value *PtrOperand = Ops[PtrOperandIdx];
5623 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5624 Value *VLOperand = Ops[PtrOperandIdx + 2];
5625 Operands.push_back(PtrOperand);
5626 Operands.push_back(IndexOperand);
5627 if (IsMasked)
5628 Operands.push_back(Ops[NF]);
5629 Operands.push_back(VLOperand);
5630 if (IsMasked)
5631 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5632 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5633
5634 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5635 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5636 clang::CharUnits Align =
5637 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5638 llvm::Value *V;
5639 for (unsigned I = 0; I < NF; ++I) {
5640 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5641 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5642 }
5643 return V;
5644 }
5645 break;
5646case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tu:
5647case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tu:
5648case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tu:
5649case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tu:
5650 ID = Intrinsic::riscv_vloxseg8;
5651 NF = 8;
5652 PolicyAttrs = 2;
5653IsMasked = false;
5654
5655 {
5656 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5657 SmallVector<llvm::Value*, 12> Operands;
5658
5659 // Please refer to comment under 'defvar NFList' in this file
5660 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5661 (!IsMasked && PolicyAttrs & RVV_VTA))
5662 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5663 else {
5664 if (IsMasked)
5665 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5666 else // Unmasked
5667 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5668 }
5669 unsigned PtrOperandIdx = IsMasked ?
5670 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5671 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5672 Value *PtrOperand = Ops[PtrOperandIdx];
5673 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5674 Value *VLOperand = Ops[PtrOperandIdx + 2];
5675 Operands.push_back(PtrOperand);
5676 Operands.push_back(IndexOperand);
5677 if (IsMasked)
5678 Operands.push_back(Ops[NF]);
5679 Operands.push_back(VLOperand);
5680 if (IsMasked)
5681 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5682 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5683
5684 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5685 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5686 clang::CharUnits Align =
5687 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5688 llvm::Value *V;
5689 for (unsigned I = 0; I < NF; ++I) {
5690 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5691 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5692 }
5693 return V;
5694 }
5695 break;
5696case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_ta:
5697case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_ta:
5698case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_ta:
5699case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_ta:
5700 ID = Intrinsic::riscv_vloxseg8;
5701 NF = 8;
5702 PolicyAttrs = 3;
5703IsMasked = false;
5704
5705 {
5706 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5707 SmallVector<llvm::Value*, 12> Operands;
5708
5709 // Please refer to comment under 'defvar NFList' in this file
5710 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5711 (!IsMasked && PolicyAttrs & RVV_VTA))
5712 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5713 else {
5714 if (IsMasked)
5715 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5716 else // Unmasked
5717 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5718 }
5719 unsigned PtrOperandIdx = IsMasked ?
5720 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5721 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5722 Value *PtrOperand = Ops[PtrOperandIdx];
5723 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5724 Value *VLOperand = Ops[PtrOperandIdx + 2];
5725 Operands.push_back(PtrOperand);
5726 Operands.push_back(IndexOperand);
5727 if (IsMasked)
5728 Operands.push_back(Ops[NF]);
5729 Operands.push_back(VLOperand);
5730 if (IsMasked)
5731 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5732 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5733
5734 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5735 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5736 clang::CharUnits Align =
5737 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5738 llvm::Value *V;
5739 for (unsigned I = 0; I < NF; ++I) {
5740 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5741 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5742 }
5743 return V;
5744 }
5745 break;
5746case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tuma:
5747case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tuma:
5748case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tuma:
5749case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tuma:
5750 ID = Intrinsic::riscv_vloxseg8_mask;
5751 NF = 8;
5752 PolicyAttrs = 2;
5753IsMasked = true;
5754
5755 {
5756 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5757 SmallVector<llvm::Value*, 12> Operands;
5758
5759 // Please refer to comment under 'defvar NFList' in this file
5760 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5761 (!IsMasked && PolicyAttrs & RVV_VTA))
5762 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5763 else {
5764 if (IsMasked)
5765 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5766 else // Unmasked
5767 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5768 }
5769 unsigned PtrOperandIdx = IsMasked ?
5770 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5771 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5772 Value *PtrOperand = Ops[PtrOperandIdx];
5773 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5774 Value *VLOperand = Ops[PtrOperandIdx + 2];
5775 Operands.push_back(PtrOperand);
5776 Operands.push_back(IndexOperand);
5777 if (IsMasked)
5778 Operands.push_back(Ops[NF]);
5779 Operands.push_back(VLOperand);
5780 if (IsMasked)
5781 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5782 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5783
5784 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5785 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5786 clang::CharUnits Align =
5787 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5788 llvm::Value *V;
5789 for (unsigned I = 0; I < NF; ++I) {
5790 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5791 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5792 }
5793 return V;
5794 }
5795 break;
5796case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tama:
5797case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tama:
5798case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tama:
5799case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tama:
5800 ID = Intrinsic::riscv_vloxseg8_mask;
5801 NF = 8;
5802 PolicyAttrs = 3;
5803IsMasked = true;
5804
5805 {
5806 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5807 SmallVector<llvm::Value*, 12> Operands;
5808
5809 // Please refer to comment under 'defvar NFList' in this file
5810 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5811 (!IsMasked && PolicyAttrs & RVV_VTA))
5812 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5813 else {
5814 if (IsMasked)
5815 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5816 else // Unmasked
5817 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5818 }
5819 unsigned PtrOperandIdx = IsMasked ?
5820 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5821 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5822 Value *PtrOperand = Ops[PtrOperandIdx];
5823 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5824 Value *VLOperand = Ops[PtrOperandIdx + 2];
5825 Operands.push_back(PtrOperand);
5826 Operands.push_back(IndexOperand);
5827 if (IsMasked)
5828 Operands.push_back(Ops[NF]);
5829 Operands.push_back(VLOperand);
5830 if (IsMasked)
5831 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5832 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5833
5834 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5835 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5836 clang::CharUnits Align =
5837 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5838 llvm::Value *V;
5839 for (unsigned I = 0; I < NF; ++I) {
5840 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5841 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5842 }
5843 return V;
5844 }
5845 break;
5846case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tumu:
5847case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tumu:
5848case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tumu:
5849case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tumu:
5850 ID = Intrinsic::riscv_vloxseg8_mask;
5851 NF = 8;
5852 PolicyAttrs = 0;
5853IsMasked = true;
5854
5855 {
5856 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5857 SmallVector<llvm::Value*, 12> Operands;
5858
5859 // Please refer to comment under 'defvar NFList' in this file
5860 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5861 (!IsMasked && PolicyAttrs & RVV_VTA))
5862 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5863 else {
5864 if (IsMasked)
5865 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5866 else // Unmasked
5867 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5868 }
5869 unsigned PtrOperandIdx = IsMasked ?
5870 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5871 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5872 Value *PtrOperand = Ops[PtrOperandIdx];
5873 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5874 Value *VLOperand = Ops[PtrOperandIdx + 2];
5875 Operands.push_back(PtrOperand);
5876 Operands.push_back(IndexOperand);
5877 if (IsMasked)
5878 Operands.push_back(Ops[NF]);
5879 Operands.push_back(VLOperand);
5880 if (IsMasked)
5881 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5882 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5883
5884 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5885 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5886 clang::CharUnits Align =
5887 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5888 llvm::Value *V;
5889 for (unsigned I = 0; I < NF; ++I) {
5890 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5891 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5892 }
5893 return V;
5894 }
5895 break;
5896case RISCVVector::BI__builtin_rvv_vloxseg8ei8_v_tamu:
5897case RISCVVector::BI__builtin_rvv_vloxseg8ei16_v_tamu:
5898case RISCVVector::BI__builtin_rvv_vloxseg8ei32_v_tamu:
5899case RISCVVector::BI__builtin_rvv_vloxseg8ei64_v_tamu:
5900 ID = Intrinsic::riscv_vloxseg8_mask;
5901 NF = 8;
5902 PolicyAttrs = 1;
5903IsMasked = true;
5904
5905 {
5906 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
5907 SmallVector<llvm::Value*, 12> Operands;
5908
5909 // Please refer to comment under 'defvar NFList' in this file
5910 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
5911 (!IsMasked && PolicyAttrs & RVV_VTA))
5912 Operands.append(NF, llvm::PoisonValue::get(ResultType));
5913 else {
5914 if (IsMasked)
5915 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
5916 else // Unmasked
5917 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
5918 }
5919 unsigned PtrOperandIdx = IsMasked ?
5920 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
5921 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
5922 Value *PtrOperand = Ops[PtrOperandIdx];
5923 Value *IndexOperand = Ops[PtrOperandIdx + 1];
5924 Value *VLOperand = Ops[PtrOperandIdx + 2];
5925 Operands.push_back(PtrOperand);
5926 Operands.push_back(IndexOperand);
5927 if (IsMasked)
5928 Operands.push_back(Ops[NF]);
5929 Operands.push_back(VLOperand);
5930 if (IsMasked)
5931 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5932 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
5933
5934 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
5935 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
5936 clang::CharUnits Align =
5937 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
5938 llvm::Value *V;
5939 for (unsigned I = 0; I < NF; ++I) {
5940 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
5941 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
5942 }
5943 return V;
5944 }
5945 break;
5946case RISCVVector::BI__builtin_rvv_vlse32_v_tu:
5947case RISCVVector::BI__builtin_rvv_vlse64_v_tu:
5948case RISCVVector::BI__builtin_rvv_vlse8_v_tu:
5949case RISCVVector::BI__builtin_rvv_vlse16_v_tu:
5950 ID = Intrinsic::riscv_vlse;
5951 PolicyAttrs = 2;
5952 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
5953 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5954 break;
5955case RISCVVector::BI__builtin_rvv_vlse32_v_ta:
5956case RISCVVector::BI__builtin_rvv_vlse64_v_ta:
5957case RISCVVector::BI__builtin_rvv_vlse8_v_ta:
5958case RISCVVector::BI__builtin_rvv_vlse16_v_ta:
5959 ID = Intrinsic::riscv_vlse;
5960 PolicyAttrs = 3;
5961 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
5962 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
5963 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5964 break;
5965case RISCVVector::BI__builtin_rvv_vlse32_v_tuma:
5966case RISCVVector::BI__builtin_rvv_vlse64_v_tuma:
5967case RISCVVector::BI__builtin_rvv_vlse8_v_tuma:
5968case RISCVVector::BI__builtin_rvv_vlse16_v_tuma:
5969 ID = Intrinsic::riscv_vlse_mask;
5970 PolicyAttrs = 2;
5971 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
5972 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
5973 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5974 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5975 break;
5976case RISCVVector::BI__builtin_rvv_vlse32_v_tama:
5977case RISCVVector::BI__builtin_rvv_vlse64_v_tama:
5978case RISCVVector::BI__builtin_rvv_vlse8_v_tama:
5979case RISCVVector::BI__builtin_rvv_vlse16_v_tama:
5980 ID = Intrinsic::riscv_vlse_mask;
5981 PolicyAttrs = 3;
5982 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
5983 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
5984 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5985 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
5986 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5987 break;
5988case RISCVVector::BI__builtin_rvv_vlse32_v_tumu:
5989case RISCVVector::BI__builtin_rvv_vlse64_v_tumu:
5990case RISCVVector::BI__builtin_rvv_vlse8_v_tumu:
5991case RISCVVector::BI__builtin_rvv_vlse16_v_tumu:
5992 ID = Intrinsic::riscv_vlse_mask;
5993 PolicyAttrs = 0;
5994 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
5995 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
5996 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
5997 IntrinsicTypes = {ResultType, Ops.back()->getType()};
5998 break;
5999case RISCVVector::BI__builtin_rvv_vlse32_v_tamu:
6000case RISCVVector::BI__builtin_rvv_vlse64_v_tamu:
6001case RISCVVector::BI__builtin_rvv_vlse8_v_tamu:
6002case RISCVVector::BI__builtin_rvv_vlse16_v_tamu:
6003 ID = Intrinsic::riscv_vlse_mask;
6004 PolicyAttrs = 1;
6005 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
6006 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
6007 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6008 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6009 break;
6010case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tu:
6011case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tu:
6012case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tu:
6013case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tu:
6014 ID = Intrinsic::riscv_vlseg2;
6015 NF = 2;
6016 PolicyAttrs = 2;
6017IsMasked = false;
6018
6019 {
6020 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6021 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6022 SmallVector<llvm::Value*, 12> Operands;
6023
6024 // Please refer to comment under 'defvar NFList' in this file
6025 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6026 (!IsMasked && PolicyAttrs & RVV_VTA))
6027 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6028 else {
6029 if (IsMasked)
6030 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6031 else // Unmasked
6032 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6033 }
6034 unsigned PtrOperandIdx = IsMasked ?
6035 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6036 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6037 Value *PtrOperand = Ops[PtrOperandIdx];
6038 Value *VLOperand = Ops[PtrOperandIdx + 1];
6039 Operands.push_back(PtrOperand);
6040 if (IsMasked)
6041 Operands.push_back(Ops[NF]);
6042 Operands.push_back(VLOperand);
6043 if (IsMasked)
6044 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6045
6046 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6047 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6048 clang::CharUnits Align =
6049 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6050 llvm::Value *V;
6051 for (unsigned I = 0; I < NF; ++I) {
6052 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6053 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6054 }
6055 return V;
6056 }
6057 break;
6058case RISCVVector::BI__builtin_rvv_vlseg2e8_v_ta:
6059case RISCVVector::BI__builtin_rvv_vlseg2e16_v_ta:
6060case RISCVVector::BI__builtin_rvv_vlseg2e32_v_ta:
6061case RISCVVector::BI__builtin_rvv_vlseg2e64_v_ta:
6062 ID = Intrinsic::riscv_vlseg2;
6063 NF = 2;
6064 PolicyAttrs = 3;
6065IsMasked = false;
6066
6067 {
6068 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6069 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6070 SmallVector<llvm::Value*, 12> Operands;
6071
6072 // Please refer to comment under 'defvar NFList' in this file
6073 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6074 (!IsMasked && PolicyAttrs & RVV_VTA))
6075 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6076 else {
6077 if (IsMasked)
6078 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6079 else // Unmasked
6080 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6081 }
6082 unsigned PtrOperandIdx = IsMasked ?
6083 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6084 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6085 Value *PtrOperand = Ops[PtrOperandIdx];
6086 Value *VLOperand = Ops[PtrOperandIdx + 1];
6087 Operands.push_back(PtrOperand);
6088 if (IsMasked)
6089 Operands.push_back(Ops[NF]);
6090 Operands.push_back(VLOperand);
6091 if (IsMasked)
6092 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6093
6094 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6095 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6096 clang::CharUnits Align =
6097 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6098 llvm::Value *V;
6099 for (unsigned I = 0; I < NF; ++I) {
6100 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6101 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6102 }
6103 return V;
6104 }
6105 break;
6106case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tuma:
6107case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tuma:
6108case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tuma:
6109case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tuma:
6110 ID = Intrinsic::riscv_vlseg2_mask;
6111 NF = 2;
6112 PolicyAttrs = 2;
6113IsMasked = true;
6114
6115 {
6116 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6117 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6118 SmallVector<llvm::Value*, 12> Operands;
6119
6120 // Please refer to comment under 'defvar NFList' in this file
6121 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6122 (!IsMasked && PolicyAttrs & RVV_VTA))
6123 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6124 else {
6125 if (IsMasked)
6126 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6127 else // Unmasked
6128 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6129 }
6130 unsigned PtrOperandIdx = IsMasked ?
6131 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6132 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6133 Value *PtrOperand = Ops[PtrOperandIdx];
6134 Value *VLOperand = Ops[PtrOperandIdx + 1];
6135 Operands.push_back(PtrOperand);
6136 if (IsMasked)
6137 Operands.push_back(Ops[NF]);
6138 Operands.push_back(VLOperand);
6139 if (IsMasked)
6140 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6141
6142 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6143 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6144 clang::CharUnits Align =
6145 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6146 llvm::Value *V;
6147 for (unsigned I = 0; I < NF; ++I) {
6148 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6149 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6150 }
6151 return V;
6152 }
6153 break;
6154case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tama:
6155case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tama:
6156case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tama:
6157case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tama:
6158 ID = Intrinsic::riscv_vlseg2_mask;
6159 NF = 2;
6160 PolicyAttrs = 3;
6161IsMasked = true;
6162
6163 {
6164 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6165 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6166 SmallVector<llvm::Value*, 12> Operands;
6167
6168 // Please refer to comment under 'defvar NFList' in this file
6169 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6170 (!IsMasked && PolicyAttrs & RVV_VTA))
6171 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6172 else {
6173 if (IsMasked)
6174 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6175 else // Unmasked
6176 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6177 }
6178 unsigned PtrOperandIdx = IsMasked ?
6179 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6180 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6181 Value *PtrOperand = Ops[PtrOperandIdx];
6182 Value *VLOperand = Ops[PtrOperandIdx + 1];
6183 Operands.push_back(PtrOperand);
6184 if (IsMasked)
6185 Operands.push_back(Ops[NF]);
6186 Operands.push_back(VLOperand);
6187 if (IsMasked)
6188 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6189
6190 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6191 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6192 clang::CharUnits Align =
6193 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6194 llvm::Value *V;
6195 for (unsigned I = 0; I < NF; ++I) {
6196 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6197 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6198 }
6199 return V;
6200 }
6201 break;
6202case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tumu:
6203case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tumu:
6204case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tumu:
6205case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tumu:
6206 ID = Intrinsic::riscv_vlseg2_mask;
6207 NF = 2;
6208 PolicyAttrs = 0;
6209IsMasked = true;
6210
6211 {
6212 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6213 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6214 SmallVector<llvm::Value*, 12> Operands;
6215
6216 // Please refer to comment under 'defvar NFList' in this file
6217 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6218 (!IsMasked && PolicyAttrs & RVV_VTA))
6219 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6220 else {
6221 if (IsMasked)
6222 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6223 else // Unmasked
6224 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6225 }
6226 unsigned PtrOperandIdx = IsMasked ?
6227 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6228 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6229 Value *PtrOperand = Ops[PtrOperandIdx];
6230 Value *VLOperand = Ops[PtrOperandIdx + 1];
6231 Operands.push_back(PtrOperand);
6232 if (IsMasked)
6233 Operands.push_back(Ops[NF]);
6234 Operands.push_back(VLOperand);
6235 if (IsMasked)
6236 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6237
6238 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6239 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6240 clang::CharUnits Align =
6241 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6242 llvm::Value *V;
6243 for (unsigned I = 0; I < NF; ++I) {
6244 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6245 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6246 }
6247 return V;
6248 }
6249 break;
6250case RISCVVector::BI__builtin_rvv_vlseg2e8_v_tamu:
6251case RISCVVector::BI__builtin_rvv_vlseg2e16_v_tamu:
6252case RISCVVector::BI__builtin_rvv_vlseg2e32_v_tamu:
6253case RISCVVector::BI__builtin_rvv_vlseg2e64_v_tamu:
6254 ID = Intrinsic::riscv_vlseg2_mask;
6255 NF = 2;
6256 PolicyAttrs = 1;
6257IsMasked = true;
6258
6259 {
6260 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6261 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6262 SmallVector<llvm::Value*, 12> Operands;
6263
6264 // Please refer to comment under 'defvar NFList' in this file
6265 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6266 (!IsMasked && PolicyAttrs & RVV_VTA))
6267 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6268 else {
6269 if (IsMasked)
6270 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6271 else // Unmasked
6272 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6273 }
6274 unsigned PtrOperandIdx = IsMasked ?
6275 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6276 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6277 Value *PtrOperand = Ops[PtrOperandIdx];
6278 Value *VLOperand = Ops[PtrOperandIdx + 1];
6279 Operands.push_back(PtrOperand);
6280 if (IsMasked)
6281 Operands.push_back(Ops[NF]);
6282 Operands.push_back(VLOperand);
6283 if (IsMasked)
6284 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6285
6286 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6287 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6288 clang::CharUnits Align =
6289 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6290 llvm::Value *V;
6291 for (unsigned I = 0; I < NF; ++I) {
6292 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6293 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6294 }
6295 return V;
6296 }
6297 break;
6298case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tu:
6299case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tu:
6300case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tu:
6301case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tu:
6302 ID = Intrinsic::riscv_vlseg2ff;
6303 NF = 2;
6304 PolicyAttrs = 2;
6305IsMasked = false;
6306
6307 {
6308 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6309 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6310 SmallVector<llvm::Value*, 12> Operands;
6311
6312 // Please refer to comment under 'defvar NFList' in this file
6313 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6314 (!IsMasked && PolicyAttrs & RVV_VTA))
6315 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6316 else {
6317 if (IsMasked)
6318 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6319 else // Unmasked
6320 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6321 }
6322 unsigned PtrOperandIdx = IsMasked ?
6323 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6324 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6325 Value *PtrOperand = Ops[PtrOperandIdx];
6326 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6327 Value *VLOperand = Ops[PtrOperandIdx + 2];
6328 Operands.push_back(PtrOperand);
6329 if (IsMasked)
6330 Operands.push_back(Ops[NF]);
6331 Operands.push_back(VLOperand);
6332 if (IsMasked)
6333 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6334
6335 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6336 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6337 clang::CharUnits Align =
6338 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6339 for (unsigned I = 0; I < NF; ++I) {
6340 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6341 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6342 }
6343 // Store new_vl.
6344 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6345 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6346 }
6347 break;
6348case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_ta:
6349case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_ta:
6350case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_ta:
6351case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_ta:
6352 ID = Intrinsic::riscv_vlseg2ff;
6353 NF = 2;
6354 PolicyAttrs = 3;
6355IsMasked = false;
6356
6357 {
6358 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6359 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6360 SmallVector<llvm::Value*, 12> Operands;
6361
6362 // Please refer to comment under 'defvar NFList' in this file
6363 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6364 (!IsMasked && PolicyAttrs & RVV_VTA))
6365 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6366 else {
6367 if (IsMasked)
6368 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6369 else // Unmasked
6370 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6371 }
6372 unsigned PtrOperandIdx = IsMasked ?
6373 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6374 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6375 Value *PtrOperand = Ops[PtrOperandIdx];
6376 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6377 Value *VLOperand = Ops[PtrOperandIdx + 2];
6378 Operands.push_back(PtrOperand);
6379 if (IsMasked)
6380 Operands.push_back(Ops[NF]);
6381 Operands.push_back(VLOperand);
6382 if (IsMasked)
6383 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6384
6385 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6386 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6387 clang::CharUnits Align =
6388 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6389 for (unsigned I = 0; I < NF; ++I) {
6390 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6391 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6392 }
6393 // Store new_vl.
6394 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6395 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6396 }
6397 break;
6398case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tuma:
6399case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tuma:
6400case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tuma:
6401case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tuma:
6402 ID = Intrinsic::riscv_vlseg2ff_mask;
6403 NF = 2;
6404 PolicyAttrs = 2;
6405IsMasked = true;
6406
6407 {
6408 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6409 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6410 SmallVector<llvm::Value*, 12> Operands;
6411
6412 // Please refer to comment under 'defvar NFList' in this file
6413 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6414 (!IsMasked && PolicyAttrs & RVV_VTA))
6415 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6416 else {
6417 if (IsMasked)
6418 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6419 else // Unmasked
6420 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6421 }
6422 unsigned PtrOperandIdx = IsMasked ?
6423 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6424 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6425 Value *PtrOperand = Ops[PtrOperandIdx];
6426 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6427 Value *VLOperand = Ops[PtrOperandIdx + 2];
6428 Operands.push_back(PtrOperand);
6429 if (IsMasked)
6430 Operands.push_back(Ops[NF]);
6431 Operands.push_back(VLOperand);
6432 if (IsMasked)
6433 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6434
6435 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6436 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6437 clang::CharUnits Align =
6438 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6439 for (unsigned I = 0; I < NF; ++I) {
6440 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6441 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6442 }
6443 // Store new_vl.
6444 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6445 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6446 }
6447 break;
6448case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tama:
6449case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tama:
6450case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tama:
6451case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tama:
6452 ID = Intrinsic::riscv_vlseg2ff_mask;
6453 NF = 2;
6454 PolicyAttrs = 3;
6455IsMasked = true;
6456
6457 {
6458 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6459 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6460 SmallVector<llvm::Value*, 12> Operands;
6461
6462 // Please refer to comment under 'defvar NFList' in this file
6463 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6464 (!IsMasked && PolicyAttrs & RVV_VTA))
6465 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6466 else {
6467 if (IsMasked)
6468 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6469 else // Unmasked
6470 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6471 }
6472 unsigned PtrOperandIdx = IsMasked ?
6473 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6474 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6475 Value *PtrOperand = Ops[PtrOperandIdx];
6476 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6477 Value *VLOperand = Ops[PtrOperandIdx + 2];
6478 Operands.push_back(PtrOperand);
6479 if (IsMasked)
6480 Operands.push_back(Ops[NF]);
6481 Operands.push_back(VLOperand);
6482 if (IsMasked)
6483 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6484
6485 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6486 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6487 clang::CharUnits Align =
6488 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6489 for (unsigned I = 0; I < NF; ++I) {
6490 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6491 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6492 }
6493 // Store new_vl.
6494 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6495 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6496 }
6497 break;
6498case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tumu:
6499case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tumu:
6500case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tumu:
6501case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tumu:
6502 ID = Intrinsic::riscv_vlseg2ff_mask;
6503 NF = 2;
6504 PolicyAttrs = 0;
6505IsMasked = true;
6506
6507 {
6508 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6509 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6510 SmallVector<llvm::Value*, 12> Operands;
6511
6512 // Please refer to comment under 'defvar NFList' in this file
6513 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6514 (!IsMasked && PolicyAttrs & RVV_VTA))
6515 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6516 else {
6517 if (IsMasked)
6518 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6519 else // Unmasked
6520 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6521 }
6522 unsigned PtrOperandIdx = IsMasked ?
6523 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6524 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6525 Value *PtrOperand = Ops[PtrOperandIdx];
6526 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6527 Value *VLOperand = Ops[PtrOperandIdx + 2];
6528 Operands.push_back(PtrOperand);
6529 if (IsMasked)
6530 Operands.push_back(Ops[NF]);
6531 Operands.push_back(VLOperand);
6532 if (IsMasked)
6533 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6534
6535 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6536 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6537 clang::CharUnits Align =
6538 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6539 for (unsigned I = 0; I < NF; ++I) {
6540 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6541 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6542 }
6543 // Store new_vl.
6544 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6545 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6546 }
6547 break;
6548case RISCVVector::BI__builtin_rvv_vlseg2e16ff_v_tamu:
6549case RISCVVector::BI__builtin_rvv_vlseg2e32ff_v_tamu:
6550case RISCVVector::BI__builtin_rvv_vlseg2e64ff_v_tamu:
6551case RISCVVector::BI__builtin_rvv_vlseg2e8ff_v_tamu:
6552 ID = Intrinsic::riscv_vlseg2ff_mask;
6553 NF = 2;
6554 PolicyAttrs = 1;
6555IsMasked = true;
6556
6557 {
6558 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6559 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6560 SmallVector<llvm::Value*, 12> Operands;
6561
6562 // Please refer to comment under 'defvar NFList' in this file
6563 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6564 (!IsMasked && PolicyAttrs & RVV_VTA))
6565 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6566 else {
6567 if (IsMasked)
6568 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6569 else // Unmasked
6570 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6571 }
6572 unsigned PtrOperandIdx = IsMasked ?
6573 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6574 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6575 Value *PtrOperand = Ops[PtrOperandIdx];
6576 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6577 Value *VLOperand = Ops[PtrOperandIdx + 2];
6578 Operands.push_back(PtrOperand);
6579 if (IsMasked)
6580 Operands.push_back(Ops[NF]);
6581 Operands.push_back(VLOperand);
6582 if (IsMasked)
6583 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6584
6585 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6586 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6587 clang::CharUnits Align =
6588 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6589 for (unsigned I = 0; I < NF; ++I) {
6590 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6591 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6592 }
6593 // Store new_vl.
6594 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6595 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6596 }
6597 break;
6598case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tu:
6599case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tu:
6600case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tu:
6601case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tu:
6602 ID = Intrinsic::riscv_vlseg3;
6603 NF = 3;
6604 PolicyAttrs = 2;
6605IsMasked = false;
6606
6607 {
6608 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6609 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6610 SmallVector<llvm::Value*, 12> Operands;
6611
6612 // Please refer to comment under 'defvar NFList' in this file
6613 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6614 (!IsMasked && PolicyAttrs & RVV_VTA))
6615 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6616 else {
6617 if (IsMasked)
6618 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6619 else // Unmasked
6620 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6621 }
6622 unsigned PtrOperandIdx = IsMasked ?
6623 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6624 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6625 Value *PtrOperand = Ops[PtrOperandIdx];
6626 Value *VLOperand = Ops[PtrOperandIdx + 1];
6627 Operands.push_back(PtrOperand);
6628 if (IsMasked)
6629 Operands.push_back(Ops[NF]);
6630 Operands.push_back(VLOperand);
6631 if (IsMasked)
6632 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6633
6634 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6635 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6636 clang::CharUnits Align =
6637 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6638 llvm::Value *V;
6639 for (unsigned I = 0; I < NF; ++I) {
6640 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6641 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6642 }
6643 return V;
6644 }
6645 break;
6646case RISCVVector::BI__builtin_rvv_vlseg3e8_v_ta:
6647case RISCVVector::BI__builtin_rvv_vlseg3e16_v_ta:
6648case RISCVVector::BI__builtin_rvv_vlseg3e32_v_ta:
6649case RISCVVector::BI__builtin_rvv_vlseg3e64_v_ta:
6650 ID = Intrinsic::riscv_vlseg3;
6651 NF = 3;
6652 PolicyAttrs = 3;
6653IsMasked = false;
6654
6655 {
6656 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6657 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6658 SmallVector<llvm::Value*, 12> Operands;
6659
6660 // Please refer to comment under 'defvar NFList' in this file
6661 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6662 (!IsMasked && PolicyAttrs & RVV_VTA))
6663 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6664 else {
6665 if (IsMasked)
6666 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6667 else // Unmasked
6668 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6669 }
6670 unsigned PtrOperandIdx = IsMasked ?
6671 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6672 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6673 Value *PtrOperand = Ops[PtrOperandIdx];
6674 Value *VLOperand = Ops[PtrOperandIdx + 1];
6675 Operands.push_back(PtrOperand);
6676 if (IsMasked)
6677 Operands.push_back(Ops[NF]);
6678 Operands.push_back(VLOperand);
6679 if (IsMasked)
6680 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6681
6682 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6683 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6684 clang::CharUnits Align =
6685 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6686 llvm::Value *V;
6687 for (unsigned I = 0; I < NF; ++I) {
6688 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6689 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6690 }
6691 return V;
6692 }
6693 break;
6694case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tuma:
6695case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tuma:
6696case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tuma:
6697case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tuma:
6698 ID = Intrinsic::riscv_vlseg3_mask;
6699 NF = 3;
6700 PolicyAttrs = 2;
6701IsMasked = true;
6702
6703 {
6704 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6705 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6706 SmallVector<llvm::Value*, 12> Operands;
6707
6708 // Please refer to comment under 'defvar NFList' in this file
6709 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6710 (!IsMasked && PolicyAttrs & RVV_VTA))
6711 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6712 else {
6713 if (IsMasked)
6714 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6715 else // Unmasked
6716 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6717 }
6718 unsigned PtrOperandIdx = IsMasked ?
6719 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6720 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6721 Value *PtrOperand = Ops[PtrOperandIdx];
6722 Value *VLOperand = Ops[PtrOperandIdx + 1];
6723 Operands.push_back(PtrOperand);
6724 if (IsMasked)
6725 Operands.push_back(Ops[NF]);
6726 Operands.push_back(VLOperand);
6727 if (IsMasked)
6728 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6729
6730 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6731 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6732 clang::CharUnits Align =
6733 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6734 llvm::Value *V;
6735 for (unsigned I = 0; I < NF; ++I) {
6736 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6737 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6738 }
6739 return V;
6740 }
6741 break;
6742case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tama:
6743case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tama:
6744case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tama:
6745case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tama:
6746 ID = Intrinsic::riscv_vlseg3_mask;
6747 NF = 3;
6748 PolicyAttrs = 3;
6749IsMasked = true;
6750
6751 {
6752 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6753 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6754 SmallVector<llvm::Value*, 12> Operands;
6755
6756 // Please refer to comment under 'defvar NFList' in this file
6757 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6758 (!IsMasked && PolicyAttrs & RVV_VTA))
6759 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6760 else {
6761 if (IsMasked)
6762 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6763 else // Unmasked
6764 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6765 }
6766 unsigned PtrOperandIdx = IsMasked ?
6767 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6768 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6769 Value *PtrOperand = Ops[PtrOperandIdx];
6770 Value *VLOperand = Ops[PtrOperandIdx + 1];
6771 Operands.push_back(PtrOperand);
6772 if (IsMasked)
6773 Operands.push_back(Ops[NF]);
6774 Operands.push_back(VLOperand);
6775 if (IsMasked)
6776 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6777
6778 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6779 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6780 clang::CharUnits Align =
6781 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6782 llvm::Value *V;
6783 for (unsigned I = 0; I < NF; ++I) {
6784 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6785 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6786 }
6787 return V;
6788 }
6789 break;
6790case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tumu:
6791case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tumu:
6792case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tumu:
6793case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tumu:
6794 ID = Intrinsic::riscv_vlseg3_mask;
6795 NF = 3;
6796 PolicyAttrs = 0;
6797IsMasked = true;
6798
6799 {
6800 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6801 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6802 SmallVector<llvm::Value*, 12> Operands;
6803
6804 // Please refer to comment under 'defvar NFList' in this file
6805 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6806 (!IsMasked && PolicyAttrs & RVV_VTA))
6807 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6808 else {
6809 if (IsMasked)
6810 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6811 else // Unmasked
6812 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6813 }
6814 unsigned PtrOperandIdx = IsMasked ?
6815 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6816 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6817 Value *PtrOperand = Ops[PtrOperandIdx];
6818 Value *VLOperand = Ops[PtrOperandIdx + 1];
6819 Operands.push_back(PtrOperand);
6820 if (IsMasked)
6821 Operands.push_back(Ops[NF]);
6822 Operands.push_back(VLOperand);
6823 if (IsMasked)
6824 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6825
6826 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6827 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6828 clang::CharUnits Align =
6829 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6830 llvm::Value *V;
6831 for (unsigned I = 0; I < NF; ++I) {
6832 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6833 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6834 }
6835 return V;
6836 }
6837 break;
6838case RISCVVector::BI__builtin_rvv_vlseg3e8_v_tamu:
6839case RISCVVector::BI__builtin_rvv_vlseg3e16_v_tamu:
6840case RISCVVector::BI__builtin_rvv_vlseg3e32_v_tamu:
6841case RISCVVector::BI__builtin_rvv_vlseg3e64_v_tamu:
6842 ID = Intrinsic::riscv_vlseg3_mask;
6843 NF = 3;
6844 PolicyAttrs = 1;
6845IsMasked = true;
6846
6847 {
6848 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6849 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6850 SmallVector<llvm::Value*, 12> Operands;
6851
6852 // Please refer to comment under 'defvar NFList' in this file
6853 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6854 (!IsMasked && PolicyAttrs & RVV_VTA))
6855 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6856 else {
6857 if (IsMasked)
6858 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6859 else // Unmasked
6860 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6861 }
6862 unsigned PtrOperandIdx = IsMasked ?
6863 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6864 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6865 Value *PtrOperand = Ops[PtrOperandIdx];
6866 Value *VLOperand = Ops[PtrOperandIdx + 1];
6867 Operands.push_back(PtrOperand);
6868 if (IsMasked)
6869 Operands.push_back(Ops[NF]);
6870 Operands.push_back(VLOperand);
6871 if (IsMasked)
6872 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6873
6874 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6875 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6876 clang::CharUnits Align =
6877 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6878 llvm::Value *V;
6879 for (unsigned I = 0; I < NF; ++I) {
6880 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6881 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6882 }
6883 return V;
6884 }
6885 break;
6886case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tu:
6887case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tu:
6888case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tu:
6889case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tu:
6890 ID = Intrinsic::riscv_vlseg3ff;
6891 NF = 3;
6892 PolicyAttrs = 2;
6893IsMasked = false;
6894
6895 {
6896 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6897 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6898 SmallVector<llvm::Value*, 12> Operands;
6899
6900 // Please refer to comment under 'defvar NFList' in this file
6901 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6902 (!IsMasked && PolicyAttrs & RVV_VTA))
6903 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6904 else {
6905 if (IsMasked)
6906 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6907 else // Unmasked
6908 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6909 }
6910 unsigned PtrOperandIdx = IsMasked ?
6911 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6912 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6913 Value *PtrOperand = Ops[PtrOperandIdx];
6914 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6915 Value *VLOperand = Ops[PtrOperandIdx + 2];
6916 Operands.push_back(PtrOperand);
6917 if (IsMasked)
6918 Operands.push_back(Ops[NF]);
6919 Operands.push_back(VLOperand);
6920 if (IsMasked)
6921 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6922
6923 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6924 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6925 clang::CharUnits Align =
6926 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6927 for (unsigned I = 0; I < NF; ++I) {
6928 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6929 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6930 }
6931 // Store new_vl.
6932 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6933 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6934 }
6935 break;
6936case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_ta:
6937case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_ta:
6938case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_ta:
6939case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_ta:
6940 ID = Intrinsic::riscv_vlseg3ff;
6941 NF = 3;
6942 PolicyAttrs = 3;
6943IsMasked = false;
6944
6945 {
6946 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6947 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6948 SmallVector<llvm::Value*, 12> Operands;
6949
6950 // Please refer to comment under 'defvar NFList' in this file
6951 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
6952 (!IsMasked && PolicyAttrs & RVV_VTA))
6953 Operands.append(NF, llvm::PoisonValue::get(ResultType));
6954 else {
6955 if (IsMasked)
6956 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
6957 else // Unmasked
6958 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
6959 }
6960 unsigned PtrOperandIdx = IsMasked ?
6961 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
6962 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
6963 Value *PtrOperand = Ops[PtrOperandIdx];
6964 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
6965 Value *VLOperand = Ops[PtrOperandIdx + 2];
6966 Operands.push_back(PtrOperand);
6967 if (IsMasked)
6968 Operands.push_back(Ops[NF]);
6969 Operands.push_back(VLOperand);
6970 if (IsMasked)
6971 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
6972
6973 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
6974 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
6975 clang::CharUnits Align =
6976 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
6977 for (unsigned I = 0; I < NF; ++I) {
6978 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
6979 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
6980 }
6981 // Store new_vl.
6982 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
6983 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
6984 }
6985 break;
6986case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tuma:
6987case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tuma:
6988case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tuma:
6989case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tuma:
6990 ID = Intrinsic::riscv_vlseg3ff_mask;
6991 NF = 3;
6992 PolicyAttrs = 2;
6993IsMasked = true;
6994
6995 {
6996 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
6997 IntrinsicTypes = {ResultType, Ops.back()->getType()};
6998 SmallVector<llvm::Value*, 12> Operands;
6999
7000 // Please refer to comment under 'defvar NFList' in this file
7001 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7002 (!IsMasked && PolicyAttrs & RVV_VTA))
7003 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7004 else {
7005 if (IsMasked)
7006 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7007 else // Unmasked
7008 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7009 }
7010 unsigned PtrOperandIdx = IsMasked ?
7011 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7012 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7013 Value *PtrOperand = Ops[PtrOperandIdx];
7014 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7015 Value *VLOperand = Ops[PtrOperandIdx + 2];
7016 Operands.push_back(PtrOperand);
7017 if (IsMasked)
7018 Operands.push_back(Ops[NF]);
7019 Operands.push_back(VLOperand);
7020 if (IsMasked)
7021 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7022
7023 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7024 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7025 clang::CharUnits Align =
7026 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7027 for (unsigned I = 0; I < NF; ++I) {
7028 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7029 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7030 }
7031 // Store new_vl.
7032 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7033 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7034 }
7035 break;
7036case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tama:
7037case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tama:
7038case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tama:
7039case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tama:
7040 ID = Intrinsic::riscv_vlseg3ff_mask;
7041 NF = 3;
7042 PolicyAttrs = 3;
7043IsMasked = true;
7044
7045 {
7046 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7047 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7048 SmallVector<llvm::Value*, 12> Operands;
7049
7050 // Please refer to comment under 'defvar NFList' in this file
7051 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7052 (!IsMasked && PolicyAttrs & RVV_VTA))
7053 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7054 else {
7055 if (IsMasked)
7056 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7057 else // Unmasked
7058 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7059 }
7060 unsigned PtrOperandIdx = IsMasked ?
7061 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7062 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7063 Value *PtrOperand = Ops[PtrOperandIdx];
7064 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7065 Value *VLOperand = Ops[PtrOperandIdx + 2];
7066 Operands.push_back(PtrOperand);
7067 if (IsMasked)
7068 Operands.push_back(Ops[NF]);
7069 Operands.push_back(VLOperand);
7070 if (IsMasked)
7071 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7072
7073 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7074 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7075 clang::CharUnits Align =
7076 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7077 for (unsigned I = 0; I < NF; ++I) {
7078 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7079 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7080 }
7081 // Store new_vl.
7082 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7083 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7084 }
7085 break;
7086case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tumu:
7087case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tumu:
7088case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tumu:
7089case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tumu:
7090 ID = Intrinsic::riscv_vlseg3ff_mask;
7091 NF = 3;
7092 PolicyAttrs = 0;
7093IsMasked = true;
7094
7095 {
7096 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7097 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7098 SmallVector<llvm::Value*, 12> Operands;
7099
7100 // Please refer to comment under 'defvar NFList' in this file
7101 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7102 (!IsMasked && PolicyAttrs & RVV_VTA))
7103 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7104 else {
7105 if (IsMasked)
7106 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7107 else // Unmasked
7108 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7109 }
7110 unsigned PtrOperandIdx = IsMasked ?
7111 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7112 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7113 Value *PtrOperand = Ops[PtrOperandIdx];
7114 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7115 Value *VLOperand = Ops[PtrOperandIdx + 2];
7116 Operands.push_back(PtrOperand);
7117 if (IsMasked)
7118 Operands.push_back(Ops[NF]);
7119 Operands.push_back(VLOperand);
7120 if (IsMasked)
7121 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7122
7123 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7124 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7125 clang::CharUnits Align =
7126 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7127 for (unsigned I = 0; I < NF; ++I) {
7128 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7129 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7130 }
7131 // Store new_vl.
7132 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7133 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7134 }
7135 break;
7136case RISCVVector::BI__builtin_rvv_vlseg3e8ff_v_tamu:
7137case RISCVVector::BI__builtin_rvv_vlseg3e16ff_v_tamu:
7138case RISCVVector::BI__builtin_rvv_vlseg3e32ff_v_tamu:
7139case RISCVVector::BI__builtin_rvv_vlseg3e64ff_v_tamu:
7140 ID = Intrinsic::riscv_vlseg3ff_mask;
7141 NF = 3;
7142 PolicyAttrs = 1;
7143IsMasked = true;
7144
7145 {
7146 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7147 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7148 SmallVector<llvm::Value*, 12> Operands;
7149
7150 // Please refer to comment under 'defvar NFList' in this file
7151 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7152 (!IsMasked && PolicyAttrs & RVV_VTA))
7153 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7154 else {
7155 if (IsMasked)
7156 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7157 else // Unmasked
7158 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7159 }
7160 unsigned PtrOperandIdx = IsMasked ?
7161 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7162 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7163 Value *PtrOperand = Ops[PtrOperandIdx];
7164 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7165 Value *VLOperand = Ops[PtrOperandIdx + 2];
7166 Operands.push_back(PtrOperand);
7167 if (IsMasked)
7168 Operands.push_back(Ops[NF]);
7169 Operands.push_back(VLOperand);
7170 if (IsMasked)
7171 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7172
7173 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7174 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7175 clang::CharUnits Align =
7176 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7177 for (unsigned I = 0; I < NF; ++I) {
7178 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7179 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7180 }
7181 // Store new_vl.
7182 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7183 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7184 }
7185 break;
7186case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tu:
7187case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tu:
7188case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tu:
7189case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tu:
7190 ID = Intrinsic::riscv_vlseg4;
7191 NF = 4;
7192 PolicyAttrs = 2;
7193IsMasked = false;
7194
7195 {
7196 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7197 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7198 SmallVector<llvm::Value*, 12> Operands;
7199
7200 // Please refer to comment under 'defvar NFList' in this file
7201 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7202 (!IsMasked && PolicyAttrs & RVV_VTA))
7203 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7204 else {
7205 if (IsMasked)
7206 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7207 else // Unmasked
7208 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7209 }
7210 unsigned PtrOperandIdx = IsMasked ?
7211 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7212 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7213 Value *PtrOperand = Ops[PtrOperandIdx];
7214 Value *VLOperand = Ops[PtrOperandIdx + 1];
7215 Operands.push_back(PtrOperand);
7216 if (IsMasked)
7217 Operands.push_back(Ops[NF]);
7218 Operands.push_back(VLOperand);
7219 if (IsMasked)
7220 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7221
7222 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7223 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7224 clang::CharUnits Align =
7225 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7226 llvm::Value *V;
7227 for (unsigned I = 0; I < NF; ++I) {
7228 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7229 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7230 }
7231 return V;
7232 }
7233 break;
7234case RISCVVector::BI__builtin_rvv_vlseg4e8_v_ta:
7235case RISCVVector::BI__builtin_rvv_vlseg4e16_v_ta:
7236case RISCVVector::BI__builtin_rvv_vlseg4e32_v_ta:
7237case RISCVVector::BI__builtin_rvv_vlseg4e64_v_ta:
7238 ID = Intrinsic::riscv_vlseg4;
7239 NF = 4;
7240 PolicyAttrs = 3;
7241IsMasked = false;
7242
7243 {
7244 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7245 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7246 SmallVector<llvm::Value*, 12> Operands;
7247
7248 // Please refer to comment under 'defvar NFList' in this file
7249 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7250 (!IsMasked && PolicyAttrs & RVV_VTA))
7251 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7252 else {
7253 if (IsMasked)
7254 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7255 else // Unmasked
7256 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7257 }
7258 unsigned PtrOperandIdx = IsMasked ?
7259 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7260 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7261 Value *PtrOperand = Ops[PtrOperandIdx];
7262 Value *VLOperand = Ops[PtrOperandIdx + 1];
7263 Operands.push_back(PtrOperand);
7264 if (IsMasked)
7265 Operands.push_back(Ops[NF]);
7266 Operands.push_back(VLOperand);
7267 if (IsMasked)
7268 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7269
7270 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7271 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7272 clang::CharUnits Align =
7273 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7274 llvm::Value *V;
7275 for (unsigned I = 0; I < NF; ++I) {
7276 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7277 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7278 }
7279 return V;
7280 }
7281 break;
7282case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tuma:
7283case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tuma:
7284case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tuma:
7285case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tuma:
7286 ID = Intrinsic::riscv_vlseg4_mask;
7287 NF = 4;
7288 PolicyAttrs = 2;
7289IsMasked = true;
7290
7291 {
7292 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7293 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7294 SmallVector<llvm::Value*, 12> Operands;
7295
7296 // Please refer to comment under 'defvar NFList' in this file
7297 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7298 (!IsMasked && PolicyAttrs & RVV_VTA))
7299 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7300 else {
7301 if (IsMasked)
7302 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7303 else // Unmasked
7304 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7305 }
7306 unsigned PtrOperandIdx = IsMasked ?
7307 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7308 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7309 Value *PtrOperand = Ops[PtrOperandIdx];
7310 Value *VLOperand = Ops[PtrOperandIdx + 1];
7311 Operands.push_back(PtrOperand);
7312 if (IsMasked)
7313 Operands.push_back(Ops[NF]);
7314 Operands.push_back(VLOperand);
7315 if (IsMasked)
7316 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7317
7318 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7319 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7320 clang::CharUnits Align =
7321 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7322 llvm::Value *V;
7323 for (unsigned I = 0; I < NF; ++I) {
7324 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7325 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7326 }
7327 return V;
7328 }
7329 break;
7330case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tama:
7331case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tama:
7332case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tama:
7333case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tama:
7334 ID = Intrinsic::riscv_vlseg4_mask;
7335 NF = 4;
7336 PolicyAttrs = 3;
7337IsMasked = true;
7338
7339 {
7340 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7341 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7342 SmallVector<llvm::Value*, 12> Operands;
7343
7344 // Please refer to comment under 'defvar NFList' in this file
7345 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7346 (!IsMasked && PolicyAttrs & RVV_VTA))
7347 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7348 else {
7349 if (IsMasked)
7350 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7351 else // Unmasked
7352 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7353 }
7354 unsigned PtrOperandIdx = IsMasked ?
7355 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7356 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7357 Value *PtrOperand = Ops[PtrOperandIdx];
7358 Value *VLOperand = Ops[PtrOperandIdx + 1];
7359 Operands.push_back(PtrOperand);
7360 if (IsMasked)
7361 Operands.push_back(Ops[NF]);
7362 Operands.push_back(VLOperand);
7363 if (IsMasked)
7364 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7365
7366 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7367 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7368 clang::CharUnits Align =
7369 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7370 llvm::Value *V;
7371 for (unsigned I = 0; I < NF; ++I) {
7372 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7373 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7374 }
7375 return V;
7376 }
7377 break;
7378case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tumu:
7379case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tumu:
7380case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tumu:
7381case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tumu:
7382 ID = Intrinsic::riscv_vlseg4_mask;
7383 NF = 4;
7384 PolicyAttrs = 0;
7385IsMasked = true;
7386
7387 {
7388 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7389 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7390 SmallVector<llvm::Value*, 12> Operands;
7391
7392 // Please refer to comment under 'defvar NFList' in this file
7393 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7394 (!IsMasked && PolicyAttrs & RVV_VTA))
7395 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7396 else {
7397 if (IsMasked)
7398 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7399 else // Unmasked
7400 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7401 }
7402 unsigned PtrOperandIdx = IsMasked ?
7403 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7404 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7405 Value *PtrOperand = Ops[PtrOperandIdx];
7406 Value *VLOperand = Ops[PtrOperandIdx + 1];
7407 Operands.push_back(PtrOperand);
7408 if (IsMasked)
7409 Operands.push_back(Ops[NF]);
7410 Operands.push_back(VLOperand);
7411 if (IsMasked)
7412 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7413
7414 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7415 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7416 clang::CharUnits Align =
7417 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7418 llvm::Value *V;
7419 for (unsigned I = 0; I < NF; ++I) {
7420 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7421 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7422 }
7423 return V;
7424 }
7425 break;
7426case RISCVVector::BI__builtin_rvv_vlseg4e8_v_tamu:
7427case RISCVVector::BI__builtin_rvv_vlseg4e16_v_tamu:
7428case RISCVVector::BI__builtin_rvv_vlseg4e32_v_tamu:
7429case RISCVVector::BI__builtin_rvv_vlseg4e64_v_tamu:
7430 ID = Intrinsic::riscv_vlseg4_mask;
7431 NF = 4;
7432 PolicyAttrs = 1;
7433IsMasked = true;
7434
7435 {
7436 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7437 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7438 SmallVector<llvm::Value*, 12> Operands;
7439
7440 // Please refer to comment under 'defvar NFList' in this file
7441 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7442 (!IsMasked && PolicyAttrs & RVV_VTA))
7443 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7444 else {
7445 if (IsMasked)
7446 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7447 else // Unmasked
7448 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7449 }
7450 unsigned PtrOperandIdx = IsMasked ?
7451 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7452 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7453 Value *PtrOperand = Ops[PtrOperandIdx];
7454 Value *VLOperand = Ops[PtrOperandIdx + 1];
7455 Operands.push_back(PtrOperand);
7456 if (IsMasked)
7457 Operands.push_back(Ops[NF]);
7458 Operands.push_back(VLOperand);
7459 if (IsMasked)
7460 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7461
7462 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7463 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7464 clang::CharUnits Align =
7465 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7466 llvm::Value *V;
7467 for (unsigned I = 0; I < NF; ++I) {
7468 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7469 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7470 }
7471 return V;
7472 }
7473 break;
7474case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tu:
7475case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tu:
7476case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tu:
7477case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tu:
7478 ID = Intrinsic::riscv_vlseg4ff;
7479 NF = 4;
7480 PolicyAttrs = 2;
7481IsMasked = false;
7482
7483 {
7484 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7485 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7486 SmallVector<llvm::Value*, 12> Operands;
7487
7488 // Please refer to comment under 'defvar NFList' in this file
7489 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7490 (!IsMasked && PolicyAttrs & RVV_VTA))
7491 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7492 else {
7493 if (IsMasked)
7494 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7495 else // Unmasked
7496 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7497 }
7498 unsigned PtrOperandIdx = IsMasked ?
7499 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7500 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7501 Value *PtrOperand = Ops[PtrOperandIdx];
7502 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7503 Value *VLOperand = Ops[PtrOperandIdx + 2];
7504 Operands.push_back(PtrOperand);
7505 if (IsMasked)
7506 Operands.push_back(Ops[NF]);
7507 Operands.push_back(VLOperand);
7508 if (IsMasked)
7509 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7510
7511 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7512 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7513 clang::CharUnits Align =
7514 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7515 for (unsigned I = 0; I < NF; ++I) {
7516 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7517 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7518 }
7519 // Store new_vl.
7520 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7521 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7522 }
7523 break;
7524case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_ta:
7525case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_ta:
7526case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_ta:
7527case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_ta:
7528 ID = Intrinsic::riscv_vlseg4ff;
7529 NF = 4;
7530 PolicyAttrs = 3;
7531IsMasked = false;
7532
7533 {
7534 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7535 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7536 SmallVector<llvm::Value*, 12> Operands;
7537
7538 // Please refer to comment under 'defvar NFList' in this file
7539 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7540 (!IsMasked && PolicyAttrs & RVV_VTA))
7541 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7542 else {
7543 if (IsMasked)
7544 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7545 else // Unmasked
7546 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7547 }
7548 unsigned PtrOperandIdx = IsMasked ?
7549 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7550 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7551 Value *PtrOperand = Ops[PtrOperandIdx];
7552 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7553 Value *VLOperand = Ops[PtrOperandIdx + 2];
7554 Operands.push_back(PtrOperand);
7555 if (IsMasked)
7556 Operands.push_back(Ops[NF]);
7557 Operands.push_back(VLOperand);
7558 if (IsMasked)
7559 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7560
7561 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7562 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7563 clang::CharUnits Align =
7564 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7565 for (unsigned I = 0; I < NF; ++I) {
7566 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7567 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7568 }
7569 // Store new_vl.
7570 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7571 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7572 }
7573 break;
7574case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tuma:
7575case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tuma:
7576case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tuma:
7577case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tuma:
7578 ID = Intrinsic::riscv_vlseg4ff_mask;
7579 NF = 4;
7580 PolicyAttrs = 2;
7581IsMasked = true;
7582
7583 {
7584 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7585 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7586 SmallVector<llvm::Value*, 12> Operands;
7587
7588 // Please refer to comment under 'defvar NFList' in this file
7589 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7590 (!IsMasked && PolicyAttrs & RVV_VTA))
7591 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7592 else {
7593 if (IsMasked)
7594 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7595 else // Unmasked
7596 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7597 }
7598 unsigned PtrOperandIdx = IsMasked ?
7599 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7600 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7601 Value *PtrOperand = Ops[PtrOperandIdx];
7602 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7603 Value *VLOperand = Ops[PtrOperandIdx + 2];
7604 Operands.push_back(PtrOperand);
7605 if (IsMasked)
7606 Operands.push_back(Ops[NF]);
7607 Operands.push_back(VLOperand);
7608 if (IsMasked)
7609 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7610
7611 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7612 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7613 clang::CharUnits Align =
7614 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7615 for (unsigned I = 0; I < NF; ++I) {
7616 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7617 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7618 }
7619 // Store new_vl.
7620 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7621 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7622 }
7623 break;
7624case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tama:
7625case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tama:
7626case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tama:
7627case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tama:
7628 ID = Intrinsic::riscv_vlseg4ff_mask;
7629 NF = 4;
7630 PolicyAttrs = 3;
7631IsMasked = true;
7632
7633 {
7634 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7635 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7636 SmallVector<llvm::Value*, 12> Operands;
7637
7638 // Please refer to comment under 'defvar NFList' in this file
7639 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7640 (!IsMasked && PolicyAttrs & RVV_VTA))
7641 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7642 else {
7643 if (IsMasked)
7644 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7645 else // Unmasked
7646 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7647 }
7648 unsigned PtrOperandIdx = IsMasked ?
7649 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7650 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7651 Value *PtrOperand = Ops[PtrOperandIdx];
7652 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7653 Value *VLOperand = Ops[PtrOperandIdx + 2];
7654 Operands.push_back(PtrOperand);
7655 if (IsMasked)
7656 Operands.push_back(Ops[NF]);
7657 Operands.push_back(VLOperand);
7658 if (IsMasked)
7659 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7660
7661 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7662 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7663 clang::CharUnits Align =
7664 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7665 for (unsigned I = 0; I < NF; ++I) {
7666 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7667 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7668 }
7669 // Store new_vl.
7670 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7671 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7672 }
7673 break;
7674case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tumu:
7675case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tumu:
7676case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tumu:
7677case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tumu:
7678 ID = Intrinsic::riscv_vlseg4ff_mask;
7679 NF = 4;
7680 PolicyAttrs = 0;
7681IsMasked = true;
7682
7683 {
7684 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7685 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7686 SmallVector<llvm::Value*, 12> Operands;
7687
7688 // Please refer to comment under 'defvar NFList' in this file
7689 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7690 (!IsMasked && PolicyAttrs & RVV_VTA))
7691 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7692 else {
7693 if (IsMasked)
7694 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7695 else // Unmasked
7696 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7697 }
7698 unsigned PtrOperandIdx = IsMasked ?
7699 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7700 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7701 Value *PtrOperand = Ops[PtrOperandIdx];
7702 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7703 Value *VLOperand = Ops[PtrOperandIdx + 2];
7704 Operands.push_back(PtrOperand);
7705 if (IsMasked)
7706 Operands.push_back(Ops[NF]);
7707 Operands.push_back(VLOperand);
7708 if (IsMasked)
7709 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7710
7711 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7712 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7713 clang::CharUnits Align =
7714 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7715 for (unsigned I = 0; I < NF; ++I) {
7716 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7717 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7718 }
7719 // Store new_vl.
7720 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7721 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7722 }
7723 break;
7724case RISCVVector::BI__builtin_rvv_vlseg4e8ff_v_tamu:
7725case RISCVVector::BI__builtin_rvv_vlseg4e16ff_v_tamu:
7726case RISCVVector::BI__builtin_rvv_vlseg4e32ff_v_tamu:
7727case RISCVVector::BI__builtin_rvv_vlseg4e64ff_v_tamu:
7728 ID = Intrinsic::riscv_vlseg4ff_mask;
7729 NF = 4;
7730 PolicyAttrs = 1;
7731IsMasked = true;
7732
7733 {
7734 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7735 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7736 SmallVector<llvm::Value*, 12> Operands;
7737
7738 // Please refer to comment under 'defvar NFList' in this file
7739 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7740 (!IsMasked && PolicyAttrs & RVV_VTA))
7741 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7742 else {
7743 if (IsMasked)
7744 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7745 else // Unmasked
7746 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7747 }
7748 unsigned PtrOperandIdx = IsMasked ?
7749 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7750 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7751 Value *PtrOperand = Ops[PtrOperandIdx];
7752 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
7753 Value *VLOperand = Ops[PtrOperandIdx + 2];
7754 Operands.push_back(PtrOperand);
7755 if (IsMasked)
7756 Operands.push_back(Ops[NF]);
7757 Operands.push_back(VLOperand);
7758 if (IsMasked)
7759 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7760
7761 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7762 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7763 clang::CharUnits Align =
7764 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7765 for (unsigned I = 0; I < NF; ++I) {
7766 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7767 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7768 }
7769 // Store new_vl.
7770 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
7771 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
7772 }
7773 break;
7774case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tu:
7775case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tu:
7776case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tu:
7777case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tu:
7778 ID = Intrinsic::riscv_vlseg5;
7779 NF = 5;
7780 PolicyAttrs = 2;
7781IsMasked = false;
7782
7783 {
7784 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7785 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7786 SmallVector<llvm::Value*, 12> Operands;
7787
7788 // Please refer to comment under 'defvar NFList' in this file
7789 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7790 (!IsMasked && PolicyAttrs & RVV_VTA))
7791 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7792 else {
7793 if (IsMasked)
7794 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7795 else // Unmasked
7796 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7797 }
7798 unsigned PtrOperandIdx = IsMasked ?
7799 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7800 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7801 Value *PtrOperand = Ops[PtrOperandIdx];
7802 Value *VLOperand = Ops[PtrOperandIdx + 1];
7803 Operands.push_back(PtrOperand);
7804 if (IsMasked)
7805 Operands.push_back(Ops[NF]);
7806 Operands.push_back(VLOperand);
7807 if (IsMasked)
7808 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7809
7810 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7811 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7812 clang::CharUnits Align =
7813 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7814 llvm::Value *V;
7815 for (unsigned I = 0; I < NF; ++I) {
7816 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7817 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7818 }
7819 return V;
7820 }
7821 break;
7822case RISCVVector::BI__builtin_rvv_vlseg5e8_v_ta:
7823case RISCVVector::BI__builtin_rvv_vlseg5e16_v_ta:
7824case RISCVVector::BI__builtin_rvv_vlseg5e32_v_ta:
7825case RISCVVector::BI__builtin_rvv_vlseg5e64_v_ta:
7826 ID = Intrinsic::riscv_vlseg5;
7827 NF = 5;
7828 PolicyAttrs = 3;
7829IsMasked = false;
7830
7831 {
7832 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7833 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7834 SmallVector<llvm::Value*, 12> Operands;
7835
7836 // Please refer to comment under 'defvar NFList' in this file
7837 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7838 (!IsMasked && PolicyAttrs & RVV_VTA))
7839 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7840 else {
7841 if (IsMasked)
7842 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7843 else // Unmasked
7844 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7845 }
7846 unsigned PtrOperandIdx = IsMasked ?
7847 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7848 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7849 Value *PtrOperand = Ops[PtrOperandIdx];
7850 Value *VLOperand = Ops[PtrOperandIdx + 1];
7851 Operands.push_back(PtrOperand);
7852 if (IsMasked)
7853 Operands.push_back(Ops[NF]);
7854 Operands.push_back(VLOperand);
7855 if (IsMasked)
7856 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7857
7858 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7859 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7860 clang::CharUnits Align =
7861 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7862 llvm::Value *V;
7863 for (unsigned I = 0; I < NF; ++I) {
7864 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7865 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7866 }
7867 return V;
7868 }
7869 break;
7870case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tuma:
7871case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tuma:
7872case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tuma:
7873case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tuma:
7874 ID = Intrinsic::riscv_vlseg5_mask;
7875 NF = 5;
7876 PolicyAttrs = 2;
7877IsMasked = true;
7878
7879 {
7880 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7881 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7882 SmallVector<llvm::Value*, 12> Operands;
7883
7884 // Please refer to comment under 'defvar NFList' in this file
7885 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7886 (!IsMasked && PolicyAttrs & RVV_VTA))
7887 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7888 else {
7889 if (IsMasked)
7890 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7891 else // Unmasked
7892 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7893 }
7894 unsigned PtrOperandIdx = IsMasked ?
7895 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7896 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7897 Value *PtrOperand = Ops[PtrOperandIdx];
7898 Value *VLOperand = Ops[PtrOperandIdx + 1];
7899 Operands.push_back(PtrOperand);
7900 if (IsMasked)
7901 Operands.push_back(Ops[NF]);
7902 Operands.push_back(VLOperand);
7903 if (IsMasked)
7904 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7905
7906 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7907 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7908 clang::CharUnits Align =
7909 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7910 llvm::Value *V;
7911 for (unsigned I = 0; I < NF; ++I) {
7912 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7913 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7914 }
7915 return V;
7916 }
7917 break;
7918case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tama:
7919case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tama:
7920case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tama:
7921case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tama:
7922 ID = Intrinsic::riscv_vlseg5_mask;
7923 NF = 5;
7924 PolicyAttrs = 3;
7925IsMasked = true;
7926
7927 {
7928 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7929 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7930 SmallVector<llvm::Value*, 12> Operands;
7931
7932 // Please refer to comment under 'defvar NFList' in this file
7933 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7934 (!IsMasked && PolicyAttrs & RVV_VTA))
7935 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7936 else {
7937 if (IsMasked)
7938 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7939 else // Unmasked
7940 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7941 }
7942 unsigned PtrOperandIdx = IsMasked ?
7943 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7944 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7945 Value *PtrOperand = Ops[PtrOperandIdx];
7946 Value *VLOperand = Ops[PtrOperandIdx + 1];
7947 Operands.push_back(PtrOperand);
7948 if (IsMasked)
7949 Operands.push_back(Ops[NF]);
7950 Operands.push_back(VLOperand);
7951 if (IsMasked)
7952 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
7953
7954 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
7955 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
7956 clang::CharUnits Align =
7957 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
7958 llvm::Value *V;
7959 for (unsigned I = 0; I < NF; ++I) {
7960 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
7961 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
7962 }
7963 return V;
7964 }
7965 break;
7966case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tumu:
7967case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tumu:
7968case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tumu:
7969case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tumu:
7970 ID = Intrinsic::riscv_vlseg5_mask;
7971 NF = 5;
7972 PolicyAttrs = 0;
7973IsMasked = true;
7974
7975 {
7976 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
7977 IntrinsicTypes = {ResultType, Ops.back()->getType()};
7978 SmallVector<llvm::Value*, 12> Operands;
7979
7980 // Please refer to comment under 'defvar NFList' in this file
7981 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
7982 (!IsMasked && PolicyAttrs & RVV_VTA))
7983 Operands.append(NF, llvm::PoisonValue::get(ResultType));
7984 else {
7985 if (IsMasked)
7986 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
7987 else // Unmasked
7988 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
7989 }
7990 unsigned PtrOperandIdx = IsMasked ?
7991 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
7992 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
7993 Value *PtrOperand = Ops[PtrOperandIdx];
7994 Value *VLOperand = Ops[PtrOperandIdx + 1];
7995 Operands.push_back(PtrOperand);
7996 if (IsMasked)
7997 Operands.push_back(Ops[NF]);
7998 Operands.push_back(VLOperand);
7999 if (IsMasked)
8000 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8001
8002 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8003 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8004 clang::CharUnits Align =
8005 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8006 llvm::Value *V;
8007 for (unsigned I = 0; I < NF; ++I) {
8008 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8009 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8010 }
8011 return V;
8012 }
8013 break;
8014case RISCVVector::BI__builtin_rvv_vlseg5e8_v_tamu:
8015case RISCVVector::BI__builtin_rvv_vlseg5e16_v_tamu:
8016case RISCVVector::BI__builtin_rvv_vlseg5e32_v_tamu:
8017case RISCVVector::BI__builtin_rvv_vlseg5e64_v_tamu:
8018 ID = Intrinsic::riscv_vlseg5_mask;
8019 NF = 5;
8020 PolicyAttrs = 1;
8021IsMasked = true;
8022
8023 {
8024 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8025 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8026 SmallVector<llvm::Value*, 12> Operands;
8027
8028 // Please refer to comment under 'defvar NFList' in this file
8029 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8030 (!IsMasked && PolicyAttrs & RVV_VTA))
8031 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8032 else {
8033 if (IsMasked)
8034 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8035 else // Unmasked
8036 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8037 }
8038 unsigned PtrOperandIdx = IsMasked ?
8039 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8040 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8041 Value *PtrOperand = Ops[PtrOperandIdx];
8042 Value *VLOperand = Ops[PtrOperandIdx + 1];
8043 Operands.push_back(PtrOperand);
8044 if (IsMasked)
8045 Operands.push_back(Ops[NF]);
8046 Operands.push_back(VLOperand);
8047 if (IsMasked)
8048 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8049
8050 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8051 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8052 clang::CharUnits Align =
8053 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8054 llvm::Value *V;
8055 for (unsigned I = 0; I < NF; ++I) {
8056 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8057 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8058 }
8059 return V;
8060 }
8061 break;
8062case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tu:
8063case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tu:
8064case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tu:
8065case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tu:
8066 ID = Intrinsic::riscv_vlseg5ff;
8067 NF = 5;
8068 PolicyAttrs = 2;
8069IsMasked = false;
8070
8071 {
8072 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8073 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8074 SmallVector<llvm::Value*, 12> Operands;
8075
8076 // Please refer to comment under 'defvar NFList' in this file
8077 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8078 (!IsMasked && PolicyAttrs & RVV_VTA))
8079 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8080 else {
8081 if (IsMasked)
8082 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8083 else // Unmasked
8084 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8085 }
8086 unsigned PtrOperandIdx = IsMasked ?
8087 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8088 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8089 Value *PtrOperand = Ops[PtrOperandIdx];
8090 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8091 Value *VLOperand = Ops[PtrOperandIdx + 2];
8092 Operands.push_back(PtrOperand);
8093 if (IsMasked)
8094 Operands.push_back(Ops[NF]);
8095 Operands.push_back(VLOperand);
8096 if (IsMasked)
8097 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8098
8099 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8100 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8101 clang::CharUnits Align =
8102 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8103 for (unsigned I = 0; I < NF; ++I) {
8104 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8105 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8106 }
8107 // Store new_vl.
8108 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8109 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8110 }
8111 break;
8112case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_ta:
8113case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_ta:
8114case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_ta:
8115case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_ta:
8116 ID = Intrinsic::riscv_vlseg5ff;
8117 NF = 5;
8118 PolicyAttrs = 3;
8119IsMasked = false;
8120
8121 {
8122 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8123 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8124 SmallVector<llvm::Value*, 12> Operands;
8125
8126 // Please refer to comment under 'defvar NFList' in this file
8127 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8128 (!IsMasked && PolicyAttrs & RVV_VTA))
8129 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8130 else {
8131 if (IsMasked)
8132 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8133 else // Unmasked
8134 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8135 }
8136 unsigned PtrOperandIdx = IsMasked ?
8137 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8138 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8139 Value *PtrOperand = Ops[PtrOperandIdx];
8140 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8141 Value *VLOperand = Ops[PtrOperandIdx + 2];
8142 Operands.push_back(PtrOperand);
8143 if (IsMasked)
8144 Operands.push_back(Ops[NF]);
8145 Operands.push_back(VLOperand);
8146 if (IsMasked)
8147 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8148
8149 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8150 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8151 clang::CharUnits Align =
8152 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8153 for (unsigned I = 0; I < NF; ++I) {
8154 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8155 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8156 }
8157 // Store new_vl.
8158 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8159 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8160 }
8161 break;
8162case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tuma:
8163case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tuma:
8164case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tuma:
8165case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tuma:
8166 ID = Intrinsic::riscv_vlseg5ff_mask;
8167 NF = 5;
8168 PolicyAttrs = 2;
8169IsMasked = true;
8170
8171 {
8172 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8173 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8174 SmallVector<llvm::Value*, 12> Operands;
8175
8176 // Please refer to comment under 'defvar NFList' in this file
8177 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8178 (!IsMasked && PolicyAttrs & RVV_VTA))
8179 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8180 else {
8181 if (IsMasked)
8182 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8183 else // Unmasked
8184 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8185 }
8186 unsigned PtrOperandIdx = IsMasked ?
8187 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8188 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8189 Value *PtrOperand = Ops[PtrOperandIdx];
8190 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8191 Value *VLOperand = Ops[PtrOperandIdx + 2];
8192 Operands.push_back(PtrOperand);
8193 if (IsMasked)
8194 Operands.push_back(Ops[NF]);
8195 Operands.push_back(VLOperand);
8196 if (IsMasked)
8197 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8198
8199 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8200 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8201 clang::CharUnits Align =
8202 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8203 for (unsigned I = 0; I < NF; ++I) {
8204 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8205 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8206 }
8207 // Store new_vl.
8208 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8209 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8210 }
8211 break;
8212case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tama:
8213case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tama:
8214case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tama:
8215case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tama:
8216 ID = Intrinsic::riscv_vlseg5ff_mask;
8217 NF = 5;
8218 PolicyAttrs = 3;
8219IsMasked = true;
8220
8221 {
8222 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8223 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8224 SmallVector<llvm::Value*, 12> Operands;
8225
8226 // Please refer to comment under 'defvar NFList' in this file
8227 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8228 (!IsMasked && PolicyAttrs & RVV_VTA))
8229 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8230 else {
8231 if (IsMasked)
8232 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8233 else // Unmasked
8234 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8235 }
8236 unsigned PtrOperandIdx = IsMasked ?
8237 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8238 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8239 Value *PtrOperand = Ops[PtrOperandIdx];
8240 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8241 Value *VLOperand = Ops[PtrOperandIdx + 2];
8242 Operands.push_back(PtrOperand);
8243 if (IsMasked)
8244 Operands.push_back(Ops[NF]);
8245 Operands.push_back(VLOperand);
8246 if (IsMasked)
8247 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8248
8249 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8250 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8251 clang::CharUnits Align =
8252 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8253 for (unsigned I = 0; I < NF; ++I) {
8254 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8255 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8256 }
8257 // Store new_vl.
8258 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8259 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8260 }
8261 break;
8262case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tumu:
8263case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tumu:
8264case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tumu:
8265case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tumu:
8266 ID = Intrinsic::riscv_vlseg5ff_mask;
8267 NF = 5;
8268 PolicyAttrs = 0;
8269IsMasked = true;
8270
8271 {
8272 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8273 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8274 SmallVector<llvm::Value*, 12> Operands;
8275
8276 // Please refer to comment under 'defvar NFList' in this file
8277 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8278 (!IsMasked && PolicyAttrs & RVV_VTA))
8279 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8280 else {
8281 if (IsMasked)
8282 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8283 else // Unmasked
8284 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8285 }
8286 unsigned PtrOperandIdx = IsMasked ?
8287 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8288 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8289 Value *PtrOperand = Ops[PtrOperandIdx];
8290 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8291 Value *VLOperand = Ops[PtrOperandIdx + 2];
8292 Operands.push_back(PtrOperand);
8293 if (IsMasked)
8294 Operands.push_back(Ops[NF]);
8295 Operands.push_back(VLOperand);
8296 if (IsMasked)
8297 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8298
8299 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8300 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8301 clang::CharUnits Align =
8302 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8303 for (unsigned I = 0; I < NF; ++I) {
8304 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8305 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8306 }
8307 // Store new_vl.
8308 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8309 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8310 }
8311 break;
8312case RISCVVector::BI__builtin_rvv_vlseg5e8ff_v_tamu:
8313case RISCVVector::BI__builtin_rvv_vlseg5e16ff_v_tamu:
8314case RISCVVector::BI__builtin_rvv_vlseg5e32ff_v_tamu:
8315case RISCVVector::BI__builtin_rvv_vlseg5e64ff_v_tamu:
8316 ID = Intrinsic::riscv_vlseg5ff_mask;
8317 NF = 5;
8318 PolicyAttrs = 1;
8319IsMasked = true;
8320
8321 {
8322 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8323 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8324 SmallVector<llvm::Value*, 12> Operands;
8325
8326 // Please refer to comment under 'defvar NFList' in this file
8327 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8328 (!IsMasked && PolicyAttrs & RVV_VTA))
8329 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8330 else {
8331 if (IsMasked)
8332 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8333 else // Unmasked
8334 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8335 }
8336 unsigned PtrOperandIdx = IsMasked ?
8337 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8338 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8339 Value *PtrOperand = Ops[PtrOperandIdx];
8340 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8341 Value *VLOperand = Ops[PtrOperandIdx + 2];
8342 Operands.push_back(PtrOperand);
8343 if (IsMasked)
8344 Operands.push_back(Ops[NF]);
8345 Operands.push_back(VLOperand);
8346 if (IsMasked)
8347 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8348
8349 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8350 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8351 clang::CharUnits Align =
8352 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8353 for (unsigned I = 0; I < NF; ++I) {
8354 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8355 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8356 }
8357 // Store new_vl.
8358 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8359 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8360 }
8361 break;
8362case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tu:
8363case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tu:
8364case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tu:
8365case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tu:
8366 ID = Intrinsic::riscv_vlseg6;
8367 NF = 6;
8368 PolicyAttrs = 2;
8369IsMasked = false;
8370
8371 {
8372 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8373 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8374 SmallVector<llvm::Value*, 12> Operands;
8375
8376 // Please refer to comment under 'defvar NFList' in this file
8377 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8378 (!IsMasked && PolicyAttrs & RVV_VTA))
8379 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8380 else {
8381 if (IsMasked)
8382 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8383 else // Unmasked
8384 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8385 }
8386 unsigned PtrOperandIdx = IsMasked ?
8387 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8388 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8389 Value *PtrOperand = Ops[PtrOperandIdx];
8390 Value *VLOperand = Ops[PtrOperandIdx + 1];
8391 Operands.push_back(PtrOperand);
8392 if (IsMasked)
8393 Operands.push_back(Ops[NF]);
8394 Operands.push_back(VLOperand);
8395 if (IsMasked)
8396 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8397
8398 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8399 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8400 clang::CharUnits Align =
8401 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8402 llvm::Value *V;
8403 for (unsigned I = 0; I < NF; ++I) {
8404 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8405 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8406 }
8407 return V;
8408 }
8409 break;
8410case RISCVVector::BI__builtin_rvv_vlseg6e8_v_ta:
8411case RISCVVector::BI__builtin_rvv_vlseg6e16_v_ta:
8412case RISCVVector::BI__builtin_rvv_vlseg6e32_v_ta:
8413case RISCVVector::BI__builtin_rvv_vlseg6e64_v_ta:
8414 ID = Intrinsic::riscv_vlseg6;
8415 NF = 6;
8416 PolicyAttrs = 3;
8417IsMasked = false;
8418
8419 {
8420 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8421 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8422 SmallVector<llvm::Value*, 12> Operands;
8423
8424 // Please refer to comment under 'defvar NFList' in this file
8425 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8426 (!IsMasked && PolicyAttrs & RVV_VTA))
8427 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8428 else {
8429 if (IsMasked)
8430 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8431 else // Unmasked
8432 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8433 }
8434 unsigned PtrOperandIdx = IsMasked ?
8435 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8436 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8437 Value *PtrOperand = Ops[PtrOperandIdx];
8438 Value *VLOperand = Ops[PtrOperandIdx + 1];
8439 Operands.push_back(PtrOperand);
8440 if (IsMasked)
8441 Operands.push_back(Ops[NF]);
8442 Operands.push_back(VLOperand);
8443 if (IsMasked)
8444 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8445
8446 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8447 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8448 clang::CharUnits Align =
8449 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8450 llvm::Value *V;
8451 for (unsigned I = 0; I < NF; ++I) {
8452 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8453 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8454 }
8455 return V;
8456 }
8457 break;
8458case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tuma:
8459case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tuma:
8460case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tuma:
8461case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tuma:
8462 ID = Intrinsic::riscv_vlseg6_mask;
8463 NF = 6;
8464 PolicyAttrs = 2;
8465IsMasked = true;
8466
8467 {
8468 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8469 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8470 SmallVector<llvm::Value*, 12> Operands;
8471
8472 // Please refer to comment under 'defvar NFList' in this file
8473 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8474 (!IsMasked && PolicyAttrs & RVV_VTA))
8475 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8476 else {
8477 if (IsMasked)
8478 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8479 else // Unmasked
8480 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8481 }
8482 unsigned PtrOperandIdx = IsMasked ?
8483 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8484 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8485 Value *PtrOperand = Ops[PtrOperandIdx];
8486 Value *VLOperand = Ops[PtrOperandIdx + 1];
8487 Operands.push_back(PtrOperand);
8488 if (IsMasked)
8489 Operands.push_back(Ops[NF]);
8490 Operands.push_back(VLOperand);
8491 if (IsMasked)
8492 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8493
8494 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8495 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8496 clang::CharUnits Align =
8497 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8498 llvm::Value *V;
8499 for (unsigned I = 0; I < NF; ++I) {
8500 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8501 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8502 }
8503 return V;
8504 }
8505 break;
8506case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tama:
8507case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tama:
8508case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tama:
8509case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tama:
8510 ID = Intrinsic::riscv_vlseg6_mask;
8511 NF = 6;
8512 PolicyAttrs = 3;
8513IsMasked = true;
8514
8515 {
8516 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8517 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8518 SmallVector<llvm::Value*, 12> Operands;
8519
8520 // Please refer to comment under 'defvar NFList' in this file
8521 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8522 (!IsMasked && PolicyAttrs & RVV_VTA))
8523 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8524 else {
8525 if (IsMasked)
8526 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8527 else // Unmasked
8528 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8529 }
8530 unsigned PtrOperandIdx = IsMasked ?
8531 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8532 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8533 Value *PtrOperand = Ops[PtrOperandIdx];
8534 Value *VLOperand = Ops[PtrOperandIdx + 1];
8535 Operands.push_back(PtrOperand);
8536 if (IsMasked)
8537 Operands.push_back(Ops[NF]);
8538 Operands.push_back(VLOperand);
8539 if (IsMasked)
8540 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8541
8542 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8543 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8544 clang::CharUnits Align =
8545 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8546 llvm::Value *V;
8547 for (unsigned I = 0; I < NF; ++I) {
8548 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8549 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8550 }
8551 return V;
8552 }
8553 break;
8554case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tumu:
8555case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tumu:
8556case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tumu:
8557case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tumu:
8558 ID = Intrinsic::riscv_vlseg6_mask;
8559 NF = 6;
8560 PolicyAttrs = 0;
8561IsMasked = true;
8562
8563 {
8564 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8565 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8566 SmallVector<llvm::Value*, 12> Operands;
8567
8568 // Please refer to comment under 'defvar NFList' in this file
8569 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8570 (!IsMasked && PolicyAttrs & RVV_VTA))
8571 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8572 else {
8573 if (IsMasked)
8574 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8575 else // Unmasked
8576 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8577 }
8578 unsigned PtrOperandIdx = IsMasked ?
8579 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8580 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8581 Value *PtrOperand = Ops[PtrOperandIdx];
8582 Value *VLOperand = Ops[PtrOperandIdx + 1];
8583 Operands.push_back(PtrOperand);
8584 if (IsMasked)
8585 Operands.push_back(Ops[NF]);
8586 Operands.push_back(VLOperand);
8587 if (IsMasked)
8588 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8589
8590 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8591 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8592 clang::CharUnits Align =
8593 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8594 llvm::Value *V;
8595 for (unsigned I = 0; I < NF; ++I) {
8596 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8597 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8598 }
8599 return V;
8600 }
8601 break;
8602case RISCVVector::BI__builtin_rvv_vlseg6e8_v_tamu:
8603case RISCVVector::BI__builtin_rvv_vlseg6e16_v_tamu:
8604case RISCVVector::BI__builtin_rvv_vlseg6e32_v_tamu:
8605case RISCVVector::BI__builtin_rvv_vlseg6e64_v_tamu:
8606 ID = Intrinsic::riscv_vlseg6_mask;
8607 NF = 6;
8608 PolicyAttrs = 1;
8609IsMasked = true;
8610
8611 {
8612 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8613 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8614 SmallVector<llvm::Value*, 12> Operands;
8615
8616 // Please refer to comment under 'defvar NFList' in this file
8617 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8618 (!IsMasked && PolicyAttrs & RVV_VTA))
8619 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8620 else {
8621 if (IsMasked)
8622 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8623 else // Unmasked
8624 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8625 }
8626 unsigned PtrOperandIdx = IsMasked ?
8627 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8628 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8629 Value *PtrOperand = Ops[PtrOperandIdx];
8630 Value *VLOperand = Ops[PtrOperandIdx + 1];
8631 Operands.push_back(PtrOperand);
8632 if (IsMasked)
8633 Operands.push_back(Ops[NF]);
8634 Operands.push_back(VLOperand);
8635 if (IsMasked)
8636 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8637
8638 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8639 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8640 clang::CharUnits Align =
8641 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8642 llvm::Value *V;
8643 for (unsigned I = 0; I < NF; ++I) {
8644 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8645 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8646 }
8647 return V;
8648 }
8649 break;
8650case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tu:
8651case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tu:
8652case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tu:
8653case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tu:
8654 ID = Intrinsic::riscv_vlseg6ff;
8655 NF = 6;
8656 PolicyAttrs = 2;
8657IsMasked = false;
8658
8659 {
8660 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8661 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8662 SmallVector<llvm::Value*, 12> Operands;
8663
8664 // Please refer to comment under 'defvar NFList' in this file
8665 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8666 (!IsMasked && PolicyAttrs & RVV_VTA))
8667 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8668 else {
8669 if (IsMasked)
8670 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8671 else // Unmasked
8672 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8673 }
8674 unsigned PtrOperandIdx = IsMasked ?
8675 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8676 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8677 Value *PtrOperand = Ops[PtrOperandIdx];
8678 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8679 Value *VLOperand = Ops[PtrOperandIdx + 2];
8680 Operands.push_back(PtrOperand);
8681 if (IsMasked)
8682 Operands.push_back(Ops[NF]);
8683 Operands.push_back(VLOperand);
8684 if (IsMasked)
8685 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8686
8687 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8688 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8689 clang::CharUnits Align =
8690 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8691 for (unsigned I = 0; I < NF; ++I) {
8692 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8693 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8694 }
8695 // Store new_vl.
8696 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8697 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8698 }
8699 break;
8700case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_ta:
8701case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_ta:
8702case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_ta:
8703case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_ta:
8704 ID = Intrinsic::riscv_vlseg6ff;
8705 NF = 6;
8706 PolicyAttrs = 3;
8707IsMasked = false;
8708
8709 {
8710 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8711 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8712 SmallVector<llvm::Value*, 12> Operands;
8713
8714 // Please refer to comment under 'defvar NFList' in this file
8715 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8716 (!IsMasked && PolicyAttrs & RVV_VTA))
8717 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8718 else {
8719 if (IsMasked)
8720 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8721 else // Unmasked
8722 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8723 }
8724 unsigned PtrOperandIdx = IsMasked ?
8725 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8726 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8727 Value *PtrOperand = Ops[PtrOperandIdx];
8728 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8729 Value *VLOperand = Ops[PtrOperandIdx + 2];
8730 Operands.push_back(PtrOperand);
8731 if (IsMasked)
8732 Operands.push_back(Ops[NF]);
8733 Operands.push_back(VLOperand);
8734 if (IsMasked)
8735 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8736
8737 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8738 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8739 clang::CharUnits Align =
8740 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8741 for (unsigned I = 0; I < NF; ++I) {
8742 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8743 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8744 }
8745 // Store new_vl.
8746 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8747 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8748 }
8749 break;
8750case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tuma:
8751case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tuma:
8752case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tuma:
8753case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tuma:
8754 ID = Intrinsic::riscv_vlseg6ff_mask;
8755 NF = 6;
8756 PolicyAttrs = 2;
8757IsMasked = true;
8758
8759 {
8760 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8761 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8762 SmallVector<llvm::Value*, 12> Operands;
8763
8764 // Please refer to comment under 'defvar NFList' in this file
8765 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8766 (!IsMasked && PolicyAttrs & RVV_VTA))
8767 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8768 else {
8769 if (IsMasked)
8770 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8771 else // Unmasked
8772 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8773 }
8774 unsigned PtrOperandIdx = IsMasked ?
8775 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8776 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8777 Value *PtrOperand = Ops[PtrOperandIdx];
8778 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8779 Value *VLOperand = Ops[PtrOperandIdx + 2];
8780 Operands.push_back(PtrOperand);
8781 if (IsMasked)
8782 Operands.push_back(Ops[NF]);
8783 Operands.push_back(VLOperand);
8784 if (IsMasked)
8785 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8786
8787 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8788 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8789 clang::CharUnits Align =
8790 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8791 for (unsigned I = 0; I < NF; ++I) {
8792 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8793 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8794 }
8795 // Store new_vl.
8796 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8797 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8798 }
8799 break;
8800case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tama:
8801case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tama:
8802case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tama:
8803case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tama:
8804 ID = Intrinsic::riscv_vlseg6ff_mask;
8805 NF = 6;
8806 PolicyAttrs = 3;
8807IsMasked = true;
8808
8809 {
8810 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8811 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8812 SmallVector<llvm::Value*, 12> Operands;
8813
8814 // Please refer to comment under 'defvar NFList' in this file
8815 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8816 (!IsMasked && PolicyAttrs & RVV_VTA))
8817 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8818 else {
8819 if (IsMasked)
8820 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8821 else // Unmasked
8822 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8823 }
8824 unsigned PtrOperandIdx = IsMasked ?
8825 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8826 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8827 Value *PtrOperand = Ops[PtrOperandIdx];
8828 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8829 Value *VLOperand = Ops[PtrOperandIdx + 2];
8830 Operands.push_back(PtrOperand);
8831 if (IsMasked)
8832 Operands.push_back(Ops[NF]);
8833 Operands.push_back(VLOperand);
8834 if (IsMasked)
8835 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8836
8837 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8838 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8839 clang::CharUnits Align =
8840 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8841 for (unsigned I = 0; I < NF; ++I) {
8842 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8843 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8844 }
8845 // Store new_vl.
8846 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8847 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8848 }
8849 break;
8850case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tumu:
8851case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tumu:
8852case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tumu:
8853case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tumu:
8854 ID = Intrinsic::riscv_vlseg6ff_mask;
8855 NF = 6;
8856 PolicyAttrs = 0;
8857IsMasked = true;
8858
8859 {
8860 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8861 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8862 SmallVector<llvm::Value*, 12> Operands;
8863
8864 // Please refer to comment under 'defvar NFList' in this file
8865 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8866 (!IsMasked && PolicyAttrs & RVV_VTA))
8867 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8868 else {
8869 if (IsMasked)
8870 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8871 else // Unmasked
8872 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8873 }
8874 unsigned PtrOperandIdx = IsMasked ?
8875 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8876 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8877 Value *PtrOperand = Ops[PtrOperandIdx];
8878 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8879 Value *VLOperand = Ops[PtrOperandIdx + 2];
8880 Operands.push_back(PtrOperand);
8881 if (IsMasked)
8882 Operands.push_back(Ops[NF]);
8883 Operands.push_back(VLOperand);
8884 if (IsMasked)
8885 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8886
8887 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8888 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8889 clang::CharUnits Align =
8890 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8891 for (unsigned I = 0; I < NF; ++I) {
8892 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8893 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8894 }
8895 // Store new_vl.
8896 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8897 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8898 }
8899 break;
8900case RISCVVector::BI__builtin_rvv_vlseg6e8ff_v_tamu:
8901case RISCVVector::BI__builtin_rvv_vlseg6e16ff_v_tamu:
8902case RISCVVector::BI__builtin_rvv_vlseg6e32ff_v_tamu:
8903case RISCVVector::BI__builtin_rvv_vlseg6e64ff_v_tamu:
8904 ID = Intrinsic::riscv_vlseg6ff_mask;
8905 NF = 6;
8906 PolicyAttrs = 1;
8907IsMasked = true;
8908
8909 {
8910 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8911 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8912 SmallVector<llvm::Value*, 12> Operands;
8913
8914 // Please refer to comment under 'defvar NFList' in this file
8915 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8916 (!IsMasked && PolicyAttrs & RVV_VTA))
8917 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8918 else {
8919 if (IsMasked)
8920 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8921 else // Unmasked
8922 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8923 }
8924 unsigned PtrOperandIdx = IsMasked ?
8925 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8926 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8927 Value *PtrOperand = Ops[PtrOperandIdx];
8928 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
8929 Value *VLOperand = Ops[PtrOperandIdx + 2];
8930 Operands.push_back(PtrOperand);
8931 if (IsMasked)
8932 Operands.push_back(Ops[NF]);
8933 Operands.push_back(VLOperand);
8934 if (IsMasked)
8935 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8936
8937 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8938 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8939 clang::CharUnits Align =
8940 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8941 for (unsigned I = 0; I < NF; ++I) {
8942 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8943 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8944 }
8945 // Store new_vl.
8946 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
8947 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
8948 }
8949 break;
8950case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tu:
8951case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tu:
8952case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tu:
8953case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tu:
8954 ID = Intrinsic::riscv_vlseg7;
8955 NF = 7;
8956 PolicyAttrs = 2;
8957IsMasked = false;
8958
8959 {
8960 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
8961 IntrinsicTypes = {ResultType, Ops.back()->getType()};
8962 SmallVector<llvm::Value*, 12> Operands;
8963
8964 // Please refer to comment under 'defvar NFList' in this file
8965 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
8966 (!IsMasked && PolicyAttrs & RVV_VTA))
8967 Operands.append(NF, llvm::PoisonValue::get(ResultType));
8968 else {
8969 if (IsMasked)
8970 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
8971 else // Unmasked
8972 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
8973 }
8974 unsigned PtrOperandIdx = IsMasked ?
8975 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
8976 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
8977 Value *PtrOperand = Ops[PtrOperandIdx];
8978 Value *VLOperand = Ops[PtrOperandIdx + 1];
8979 Operands.push_back(PtrOperand);
8980 if (IsMasked)
8981 Operands.push_back(Ops[NF]);
8982 Operands.push_back(VLOperand);
8983 if (IsMasked)
8984 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
8985
8986 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
8987 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
8988 clang::CharUnits Align =
8989 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
8990 llvm::Value *V;
8991 for (unsigned I = 0; I < NF; ++I) {
8992 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
8993 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
8994 }
8995 return V;
8996 }
8997 break;
8998case RISCVVector::BI__builtin_rvv_vlseg7e8_v_ta:
8999case RISCVVector::BI__builtin_rvv_vlseg7e16_v_ta:
9000case RISCVVector::BI__builtin_rvv_vlseg7e32_v_ta:
9001case RISCVVector::BI__builtin_rvv_vlseg7e64_v_ta:
9002 ID = Intrinsic::riscv_vlseg7;
9003 NF = 7;
9004 PolicyAttrs = 3;
9005IsMasked = false;
9006
9007 {
9008 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9009 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9010 SmallVector<llvm::Value*, 12> Operands;
9011
9012 // Please refer to comment under 'defvar NFList' in this file
9013 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9014 (!IsMasked && PolicyAttrs & RVV_VTA))
9015 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9016 else {
9017 if (IsMasked)
9018 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9019 else // Unmasked
9020 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9021 }
9022 unsigned PtrOperandIdx = IsMasked ?
9023 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9024 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9025 Value *PtrOperand = Ops[PtrOperandIdx];
9026 Value *VLOperand = Ops[PtrOperandIdx + 1];
9027 Operands.push_back(PtrOperand);
9028 if (IsMasked)
9029 Operands.push_back(Ops[NF]);
9030 Operands.push_back(VLOperand);
9031 if (IsMasked)
9032 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9033
9034 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9035 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9036 clang::CharUnits Align =
9037 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9038 llvm::Value *V;
9039 for (unsigned I = 0; I < NF; ++I) {
9040 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9041 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9042 }
9043 return V;
9044 }
9045 break;
9046case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tuma:
9047case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tuma:
9048case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tuma:
9049case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tuma:
9050 ID = Intrinsic::riscv_vlseg7_mask;
9051 NF = 7;
9052 PolicyAttrs = 2;
9053IsMasked = true;
9054
9055 {
9056 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9057 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9058 SmallVector<llvm::Value*, 12> Operands;
9059
9060 // Please refer to comment under 'defvar NFList' in this file
9061 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9062 (!IsMasked && PolicyAttrs & RVV_VTA))
9063 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9064 else {
9065 if (IsMasked)
9066 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9067 else // Unmasked
9068 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9069 }
9070 unsigned PtrOperandIdx = IsMasked ?
9071 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9072 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9073 Value *PtrOperand = Ops[PtrOperandIdx];
9074 Value *VLOperand = Ops[PtrOperandIdx + 1];
9075 Operands.push_back(PtrOperand);
9076 if (IsMasked)
9077 Operands.push_back(Ops[NF]);
9078 Operands.push_back(VLOperand);
9079 if (IsMasked)
9080 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9081
9082 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9083 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9084 clang::CharUnits Align =
9085 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9086 llvm::Value *V;
9087 for (unsigned I = 0; I < NF; ++I) {
9088 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9089 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9090 }
9091 return V;
9092 }
9093 break;
9094case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tama:
9095case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tama:
9096case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tama:
9097case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tama:
9098 ID = Intrinsic::riscv_vlseg7_mask;
9099 NF = 7;
9100 PolicyAttrs = 3;
9101IsMasked = true;
9102
9103 {
9104 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9105 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9106 SmallVector<llvm::Value*, 12> Operands;
9107
9108 // Please refer to comment under 'defvar NFList' in this file
9109 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9110 (!IsMasked && PolicyAttrs & RVV_VTA))
9111 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9112 else {
9113 if (IsMasked)
9114 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9115 else // Unmasked
9116 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9117 }
9118 unsigned PtrOperandIdx = IsMasked ?
9119 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9120 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9121 Value *PtrOperand = Ops[PtrOperandIdx];
9122 Value *VLOperand = Ops[PtrOperandIdx + 1];
9123 Operands.push_back(PtrOperand);
9124 if (IsMasked)
9125 Operands.push_back(Ops[NF]);
9126 Operands.push_back(VLOperand);
9127 if (IsMasked)
9128 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9129
9130 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9131 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9132 clang::CharUnits Align =
9133 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9134 llvm::Value *V;
9135 for (unsigned I = 0; I < NF; ++I) {
9136 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9137 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9138 }
9139 return V;
9140 }
9141 break;
9142case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tumu:
9143case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tumu:
9144case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tumu:
9145case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tumu:
9146 ID = Intrinsic::riscv_vlseg7_mask;
9147 NF = 7;
9148 PolicyAttrs = 0;
9149IsMasked = true;
9150
9151 {
9152 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9153 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9154 SmallVector<llvm::Value*, 12> Operands;
9155
9156 // Please refer to comment under 'defvar NFList' in this file
9157 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9158 (!IsMasked && PolicyAttrs & RVV_VTA))
9159 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9160 else {
9161 if (IsMasked)
9162 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9163 else // Unmasked
9164 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9165 }
9166 unsigned PtrOperandIdx = IsMasked ?
9167 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9168 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9169 Value *PtrOperand = Ops[PtrOperandIdx];
9170 Value *VLOperand = Ops[PtrOperandIdx + 1];
9171 Operands.push_back(PtrOperand);
9172 if (IsMasked)
9173 Operands.push_back(Ops[NF]);
9174 Operands.push_back(VLOperand);
9175 if (IsMasked)
9176 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9177
9178 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9179 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9180 clang::CharUnits Align =
9181 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9182 llvm::Value *V;
9183 for (unsigned I = 0; I < NF; ++I) {
9184 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9185 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9186 }
9187 return V;
9188 }
9189 break;
9190case RISCVVector::BI__builtin_rvv_vlseg7e8_v_tamu:
9191case RISCVVector::BI__builtin_rvv_vlseg7e16_v_tamu:
9192case RISCVVector::BI__builtin_rvv_vlseg7e32_v_tamu:
9193case RISCVVector::BI__builtin_rvv_vlseg7e64_v_tamu:
9194 ID = Intrinsic::riscv_vlseg7_mask;
9195 NF = 7;
9196 PolicyAttrs = 1;
9197IsMasked = true;
9198
9199 {
9200 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9201 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9202 SmallVector<llvm::Value*, 12> Operands;
9203
9204 // Please refer to comment under 'defvar NFList' in this file
9205 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9206 (!IsMasked && PolicyAttrs & RVV_VTA))
9207 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9208 else {
9209 if (IsMasked)
9210 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9211 else // Unmasked
9212 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9213 }
9214 unsigned PtrOperandIdx = IsMasked ?
9215 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9216 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9217 Value *PtrOperand = Ops[PtrOperandIdx];
9218 Value *VLOperand = Ops[PtrOperandIdx + 1];
9219 Operands.push_back(PtrOperand);
9220 if (IsMasked)
9221 Operands.push_back(Ops[NF]);
9222 Operands.push_back(VLOperand);
9223 if (IsMasked)
9224 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9225
9226 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9227 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9228 clang::CharUnits Align =
9229 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9230 llvm::Value *V;
9231 for (unsigned I = 0; I < NF; ++I) {
9232 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9233 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9234 }
9235 return V;
9236 }
9237 break;
9238case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tu:
9239case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tu:
9240case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tu:
9241case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tu:
9242 ID = Intrinsic::riscv_vlseg7ff;
9243 NF = 7;
9244 PolicyAttrs = 2;
9245IsMasked = false;
9246
9247 {
9248 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9249 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9250 SmallVector<llvm::Value*, 12> Operands;
9251
9252 // Please refer to comment under 'defvar NFList' in this file
9253 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9254 (!IsMasked && PolicyAttrs & RVV_VTA))
9255 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9256 else {
9257 if (IsMasked)
9258 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9259 else // Unmasked
9260 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9261 }
9262 unsigned PtrOperandIdx = IsMasked ?
9263 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9264 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9265 Value *PtrOperand = Ops[PtrOperandIdx];
9266 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9267 Value *VLOperand = Ops[PtrOperandIdx + 2];
9268 Operands.push_back(PtrOperand);
9269 if (IsMasked)
9270 Operands.push_back(Ops[NF]);
9271 Operands.push_back(VLOperand);
9272 if (IsMasked)
9273 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9274
9275 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9276 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9277 clang::CharUnits Align =
9278 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9279 for (unsigned I = 0; I < NF; ++I) {
9280 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9281 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9282 }
9283 // Store new_vl.
9284 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9285 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9286 }
9287 break;
9288case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_ta:
9289case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_ta:
9290case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_ta:
9291case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_ta:
9292 ID = Intrinsic::riscv_vlseg7ff;
9293 NF = 7;
9294 PolicyAttrs = 3;
9295IsMasked = false;
9296
9297 {
9298 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9299 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9300 SmallVector<llvm::Value*, 12> Operands;
9301
9302 // Please refer to comment under 'defvar NFList' in this file
9303 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9304 (!IsMasked && PolicyAttrs & RVV_VTA))
9305 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9306 else {
9307 if (IsMasked)
9308 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9309 else // Unmasked
9310 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9311 }
9312 unsigned PtrOperandIdx = IsMasked ?
9313 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9314 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9315 Value *PtrOperand = Ops[PtrOperandIdx];
9316 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9317 Value *VLOperand = Ops[PtrOperandIdx + 2];
9318 Operands.push_back(PtrOperand);
9319 if (IsMasked)
9320 Operands.push_back(Ops[NF]);
9321 Operands.push_back(VLOperand);
9322 if (IsMasked)
9323 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9324
9325 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9326 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9327 clang::CharUnits Align =
9328 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9329 for (unsigned I = 0; I < NF; ++I) {
9330 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9331 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9332 }
9333 // Store new_vl.
9334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9335 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9336 }
9337 break;
9338case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tuma:
9339case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tuma:
9340case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tuma:
9341case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tuma:
9342 ID = Intrinsic::riscv_vlseg7ff_mask;
9343 NF = 7;
9344 PolicyAttrs = 2;
9345IsMasked = true;
9346
9347 {
9348 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9349 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9350 SmallVector<llvm::Value*, 12> Operands;
9351
9352 // Please refer to comment under 'defvar NFList' in this file
9353 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9354 (!IsMasked && PolicyAttrs & RVV_VTA))
9355 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9356 else {
9357 if (IsMasked)
9358 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9359 else // Unmasked
9360 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9361 }
9362 unsigned PtrOperandIdx = IsMasked ?
9363 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9364 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9365 Value *PtrOperand = Ops[PtrOperandIdx];
9366 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9367 Value *VLOperand = Ops[PtrOperandIdx + 2];
9368 Operands.push_back(PtrOperand);
9369 if (IsMasked)
9370 Operands.push_back(Ops[NF]);
9371 Operands.push_back(VLOperand);
9372 if (IsMasked)
9373 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9374
9375 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9376 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9377 clang::CharUnits Align =
9378 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9379 for (unsigned I = 0; I < NF; ++I) {
9380 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9381 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9382 }
9383 // Store new_vl.
9384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9385 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9386 }
9387 break;
9388case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tama:
9389case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tama:
9390case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tama:
9391case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tama:
9392 ID = Intrinsic::riscv_vlseg7ff_mask;
9393 NF = 7;
9394 PolicyAttrs = 3;
9395IsMasked = true;
9396
9397 {
9398 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9399 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9400 SmallVector<llvm::Value*, 12> Operands;
9401
9402 // Please refer to comment under 'defvar NFList' in this file
9403 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9404 (!IsMasked && PolicyAttrs & RVV_VTA))
9405 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9406 else {
9407 if (IsMasked)
9408 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9409 else // Unmasked
9410 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9411 }
9412 unsigned PtrOperandIdx = IsMasked ?
9413 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9414 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9415 Value *PtrOperand = Ops[PtrOperandIdx];
9416 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9417 Value *VLOperand = Ops[PtrOperandIdx + 2];
9418 Operands.push_back(PtrOperand);
9419 if (IsMasked)
9420 Operands.push_back(Ops[NF]);
9421 Operands.push_back(VLOperand);
9422 if (IsMasked)
9423 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9424
9425 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9426 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9427 clang::CharUnits Align =
9428 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9429 for (unsigned I = 0; I < NF; ++I) {
9430 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9431 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9432 }
9433 // Store new_vl.
9434 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9435 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9436 }
9437 break;
9438case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tumu:
9439case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tumu:
9440case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tumu:
9441case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tumu:
9442 ID = Intrinsic::riscv_vlseg7ff_mask;
9443 NF = 7;
9444 PolicyAttrs = 0;
9445IsMasked = true;
9446
9447 {
9448 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9449 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9450 SmallVector<llvm::Value*, 12> Operands;
9451
9452 // Please refer to comment under 'defvar NFList' in this file
9453 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9454 (!IsMasked && PolicyAttrs & RVV_VTA))
9455 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9456 else {
9457 if (IsMasked)
9458 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9459 else // Unmasked
9460 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9461 }
9462 unsigned PtrOperandIdx = IsMasked ?
9463 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9464 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9465 Value *PtrOperand = Ops[PtrOperandIdx];
9466 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9467 Value *VLOperand = Ops[PtrOperandIdx + 2];
9468 Operands.push_back(PtrOperand);
9469 if (IsMasked)
9470 Operands.push_back(Ops[NF]);
9471 Operands.push_back(VLOperand);
9472 if (IsMasked)
9473 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9474
9475 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9476 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9477 clang::CharUnits Align =
9478 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9479 for (unsigned I = 0; I < NF; ++I) {
9480 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9481 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9482 }
9483 // Store new_vl.
9484 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9485 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9486 }
9487 break;
9488case RISCVVector::BI__builtin_rvv_vlseg7e8ff_v_tamu:
9489case RISCVVector::BI__builtin_rvv_vlseg7e16ff_v_tamu:
9490case RISCVVector::BI__builtin_rvv_vlseg7e32ff_v_tamu:
9491case RISCVVector::BI__builtin_rvv_vlseg7e64ff_v_tamu:
9492 ID = Intrinsic::riscv_vlseg7ff_mask;
9493 NF = 7;
9494 PolicyAttrs = 1;
9495IsMasked = true;
9496
9497 {
9498 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9499 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9500 SmallVector<llvm::Value*, 12> Operands;
9501
9502 // Please refer to comment under 'defvar NFList' in this file
9503 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9504 (!IsMasked && PolicyAttrs & RVV_VTA))
9505 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9506 else {
9507 if (IsMasked)
9508 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9509 else // Unmasked
9510 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9511 }
9512 unsigned PtrOperandIdx = IsMasked ?
9513 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9514 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9515 Value *PtrOperand = Ops[PtrOperandIdx];
9516 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9517 Value *VLOperand = Ops[PtrOperandIdx + 2];
9518 Operands.push_back(PtrOperand);
9519 if (IsMasked)
9520 Operands.push_back(Ops[NF]);
9521 Operands.push_back(VLOperand);
9522 if (IsMasked)
9523 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9524
9525 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9526 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9527 clang::CharUnits Align =
9528 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9529 for (unsigned I = 0; I < NF; ++I) {
9530 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9531 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9532 }
9533 // Store new_vl.
9534 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9535 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9536 }
9537 break;
9538case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tu:
9539case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tu:
9540case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tu:
9541case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tu:
9542 ID = Intrinsic::riscv_vlseg8;
9543 NF = 8;
9544 PolicyAttrs = 2;
9545IsMasked = false;
9546
9547 {
9548 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9549 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9550 SmallVector<llvm::Value*, 12> Operands;
9551
9552 // Please refer to comment under 'defvar NFList' in this file
9553 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9554 (!IsMasked && PolicyAttrs & RVV_VTA))
9555 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9556 else {
9557 if (IsMasked)
9558 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9559 else // Unmasked
9560 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9561 }
9562 unsigned PtrOperandIdx = IsMasked ?
9563 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9564 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9565 Value *PtrOperand = Ops[PtrOperandIdx];
9566 Value *VLOperand = Ops[PtrOperandIdx + 1];
9567 Operands.push_back(PtrOperand);
9568 if (IsMasked)
9569 Operands.push_back(Ops[NF]);
9570 Operands.push_back(VLOperand);
9571 if (IsMasked)
9572 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9573
9574 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9575 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9576 clang::CharUnits Align =
9577 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9578 llvm::Value *V;
9579 for (unsigned I = 0; I < NF; ++I) {
9580 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9581 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9582 }
9583 return V;
9584 }
9585 break;
9586case RISCVVector::BI__builtin_rvv_vlseg8e8_v_ta:
9587case RISCVVector::BI__builtin_rvv_vlseg8e16_v_ta:
9588case RISCVVector::BI__builtin_rvv_vlseg8e32_v_ta:
9589case RISCVVector::BI__builtin_rvv_vlseg8e64_v_ta:
9590 ID = Intrinsic::riscv_vlseg8;
9591 NF = 8;
9592 PolicyAttrs = 3;
9593IsMasked = false;
9594
9595 {
9596 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9597 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9598 SmallVector<llvm::Value*, 12> Operands;
9599
9600 // Please refer to comment under 'defvar NFList' in this file
9601 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9602 (!IsMasked && PolicyAttrs & RVV_VTA))
9603 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9604 else {
9605 if (IsMasked)
9606 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9607 else // Unmasked
9608 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9609 }
9610 unsigned PtrOperandIdx = IsMasked ?
9611 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9612 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9613 Value *PtrOperand = Ops[PtrOperandIdx];
9614 Value *VLOperand = Ops[PtrOperandIdx + 1];
9615 Operands.push_back(PtrOperand);
9616 if (IsMasked)
9617 Operands.push_back(Ops[NF]);
9618 Operands.push_back(VLOperand);
9619 if (IsMasked)
9620 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9621
9622 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9623 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9624 clang::CharUnits Align =
9625 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9626 llvm::Value *V;
9627 for (unsigned I = 0; I < NF; ++I) {
9628 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9629 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9630 }
9631 return V;
9632 }
9633 break;
9634case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tuma:
9635case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tuma:
9636case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tuma:
9637case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tuma:
9638 ID = Intrinsic::riscv_vlseg8_mask;
9639 NF = 8;
9640 PolicyAttrs = 2;
9641IsMasked = true;
9642
9643 {
9644 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9645 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9646 SmallVector<llvm::Value*, 12> Operands;
9647
9648 // Please refer to comment under 'defvar NFList' in this file
9649 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9650 (!IsMasked && PolicyAttrs & RVV_VTA))
9651 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9652 else {
9653 if (IsMasked)
9654 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9655 else // Unmasked
9656 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9657 }
9658 unsigned PtrOperandIdx = IsMasked ?
9659 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9660 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9661 Value *PtrOperand = Ops[PtrOperandIdx];
9662 Value *VLOperand = Ops[PtrOperandIdx + 1];
9663 Operands.push_back(PtrOperand);
9664 if (IsMasked)
9665 Operands.push_back(Ops[NF]);
9666 Operands.push_back(VLOperand);
9667 if (IsMasked)
9668 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9669
9670 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9671 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9672 clang::CharUnits Align =
9673 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9674 llvm::Value *V;
9675 for (unsigned I = 0; I < NF; ++I) {
9676 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9677 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9678 }
9679 return V;
9680 }
9681 break;
9682case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tama:
9683case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tama:
9684case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tama:
9685case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tama:
9686 ID = Intrinsic::riscv_vlseg8_mask;
9687 NF = 8;
9688 PolicyAttrs = 3;
9689IsMasked = true;
9690
9691 {
9692 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9693 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9694 SmallVector<llvm::Value*, 12> Operands;
9695
9696 // Please refer to comment under 'defvar NFList' in this file
9697 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9698 (!IsMasked && PolicyAttrs & RVV_VTA))
9699 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9700 else {
9701 if (IsMasked)
9702 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9703 else // Unmasked
9704 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9705 }
9706 unsigned PtrOperandIdx = IsMasked ?
9707 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9708 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9709 Value *PtrOperand = Ops[PtrOperandIdx];
9710 Value *VLOperand = Ops[PtrOperandIdx + 1];
9711 Operands.push_back(PtrOperand);
9712 if (IsMasked)
9713 Operands.push_back(Ops[NF]);
9714 Operands.push_back(VLOperand);
9715 if (IsMasked)
9716 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9717
9718 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9719 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9720 clang::CharUnits Align =
9721 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9722 llvm::Value *V;
9723 for (unsigned I = 0; I < NF; ++I) {
9724 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9725 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9726 }
9727 return V;
9728 }
9729 break;
9730case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tumu:
9731case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tumu:
9732case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tumu:
9733case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tumu:
9734 ID = Intrinsic::riscv_vlseg8_mask;
9735 NF = 8;
9736 PolicyAttrs = 0;
9737IsMasked = true;
9738
9739 {
9740 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9741 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9742 SmallVector<llvm::Value*, 12> Operands;
9743
9744 // Please refer to comment under 'defvar NFList' in this file
9745 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9746 (!IsMasked && PolicyAttrs & RVV_VTA))
9747 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9748 else {
9749 if (IsMasked)
9750 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9751 else // Unmasked
9752 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9753 }
9754 unsigned PtrOperandIdx = IsMasked ?
9755 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9756 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9757 Value *PtrOperand = Ops[PtrOperandIdx];
9758 Value *VLOperand = Ops[PtrOperandIdx + 1];
9759 Operands.push_back(PtrOperand);
9760 if (IsMasked)
9761 Operands.push_back(Ops[NF]);
9762 Operands.push_back(VLOperand);
9763 if (IsMasked)
9764 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9765
9766 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9767 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9768 clang::CharUnits Align =
9769 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9770 llvm::Value *V;
9771 for (unsigned I = 0; I < NF; ++I) {
9772 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9773 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9774 }
9775 return V;
9776 }
9777 break;
9778case RISCVVector::BI__builtin_rvv_vlseg8e8_v_tamu:
9779case RISCVVector::BI__builtin_rvv_vlseg8e16_v_tamu:
9780case RISCVVector::BI__builtin_rvv_vlseg8e32_v_tamu:
9781case RISCVVector::BI__builtin_rvv_vlseg8e64_v_tamu:
9782 ID = Intrinsic::riscv_vlseg8_mask;
9783 NF = 8;
9784 PolicyAttrs = 1;
9785IsMasked = true;
9786
9787 {
9788 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9789 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9790 SmallVector<llvm::Value*, 12> Operands;
9791
9792 // Please refer to comment under 'defvar NFList' in this file
9793 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9794 (!IsMasked && PolicyAttrs & RVV_VTA))
9795 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9796 else {
9797 if (IsMasked)
9798 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9799 else // Unmasked
9800 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9801 }
9802 unsigned PtrOperandIdx = IsMasked ?
9803 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9804 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9805 Value *PtrOperand = Ops[PtrOperandIdx];
9806 Value *VLOperand = Ops[PtrOperandIdx + 1];
9807 Operands.push_back(PtrOperand);
9808 if (IsMasked)
9809 Operands.push_back(Ops[NF]);
9810 Operands.push_back(VLOperand);
9811 if (IsMasked)
9812 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9813
9814 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9815 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9816 clang::CharUnits Align =
9817 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9818 llvm::Value *V;
9819 for (unsigned I = 0; I < NF; ++I) {
9820 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9821 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9822 }
9823 return V;
9824 }
9825 break;
9826case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tu:
9827case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tu:
9828case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tu:
9829case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tu:
9830 ID = Intrinsic::riscv_vlseg8ff;
9831 NF = 8;
9832 PolicyAttrs = 2;
9833IsMasked = false;
9834
9835 {
9836 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9837 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9838 SmallVector<llvm::Value*, 12> Operands;
9839
9840 // Please refer to comment under 'defvar NFList' in this file
9841 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9842 (!IsMasked && PolicyAttrs & RVV_VTA))
9843 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9844 else {
9845 if (IsMasked)
9846 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9847 else // Unmasked
9848 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9849 }
9850 unsigned PtrOperandIdx = IsMasked ?
9851 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9852 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9853 Value *PtrOperand = Ops[PtrOperandIdx];
9854 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9855 Value *VLOperand = Ops[PtrOperandIdx + 2];
9856 Operands.push_back(PtrOperand);
9857 if (IsMasked)
9858 Operands.push_back(Ops[NF]);
9859 Operands.push_back(VLOperand);
9860 if (IsMasked)
9861 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9862
9863 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9864 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9865 clang::CharUnits Align =
9866 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9867 for (unsigned I = 0; I < NF; ++I) {
9868 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9869 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9870 }
9871 // Store new_vl.
9872 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9873 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9874 }
9875 break;
9876case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_ta:
9877case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_ta:
9878case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_ta:
9879case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_ta:
9880 ID = Intrinsic::riscv_vlseg8ff;
9881 NF = 8;
9882 PolicyAttrs = 3;
9883IsMasked = false;
9884
9885 {
9886 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9887 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9888 SmallVector<llvm::Value*, 12> Operands;
9889
9890 // Please refer to comment under 'defvar NFList' in this file
9891 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9892 (!IsMasked && PolicyAttrs & RVV_VTA))
9893 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9894 else {
9895 if (IsMasked)
9896 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9897 else // Unmasked
9898 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9899 }
9900 unsigned PtrOperandIdx = IsMasked ?
9901 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9902 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9903 Value *PtrOperand = Ops[PtrOperandIdx];
9904 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9905 Value *VLOperand = Ops[PtrOperandIdx + 2];
9906 Operands.push_back(PtrOperand);
9907 if (IsMasked)
9908 Operands.push_back(Ops[NF]);
9909 Operands.push_back(VLOperand);
9910 if (IsMasked)
9911 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9912
9913 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9914 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9915 clang::CharUnits Align =
9916 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9917 for (unsigned I = 0; I < NF; ++I) {
9918 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9919 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9920 }
9921 // Store new_vl.
9922 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9923 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9924 }
9925 break;
9926case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tuma:
9927case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tuma:
9928case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tuma:
9929case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tuma:
9930 ID = Intrinsic::riscv_vlseg8ff_mask;
9931 NF = 8;
9932 PolicyAttrs = 2;
9933IsMasked = true;
9934
9935 {
9936 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9937 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9938 SmallVector<llvm::Value*, 12> Operands;
9939
9940 // Please refer to comment under 'defvar NFList' in this file
9941 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9942 (!IsMasked && PolicyAttrs & RVV_VTA))
9943 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9944 else {
9945 if (IsMasked)
9946 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9947 else // Unmasked
9948 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9949 }
9950 unsigned PtrOperandIdx = IsMasked ?
9951 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
9952 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
9953 Value *PtrOperand = Ops[PtrOperandIdx];
9954 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
9955 Value *VLOperand = Ops[PtrOperandIdx + 2];
9956 Operands.push_back(PtrOperand);
9957 if (IsMasked)
9958 Operands.push_back(Ops[NF]);
9959 Operands.push_back(VLOperand);
9960 if (IsMasked)
9961 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
9962
9963 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
9964 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
9965 clang::CharUnits Align =
9966 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
9967 for (unsigned I = 0; I < NF; ++I) {
9968 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
9969 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
9970 }
9971 // Store new_vl.
9972 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
9973 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
9974 }
9975 break;
9976case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tama:
9977case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tama:
9978case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tama:
9979case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tama:
9980 ID = Intrinsic::riscv_vlseg8ff_mask;
9981 NF = 8;
9982 PolicyAttrs = 3;
9983IsMasked = true;
9984
9985 {
9986 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
9987 IntrinsicTypes = {ResultType, Ops.back()->getType()};
9988 SmallVector<llvm::Value*, 12> Operands;
9989
9990 // Please refer to comment under 'defvar NFList' in this file
9991 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
9992 (!IsMasked && PolicyAttrs & RVV_VTA))
9993 Operands.append(NF, llvm::PoisonValue::get(ResultType));
9994 else {
9995 if (IsMasked)
9996 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
9997 else // Unmasked
9998 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
9999 }
10000 unsigned PtrOperandIdx = IsMasked ?
10001 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10002 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10003 Value *PtrOperand = Ops[PtrOperandIdx];
10004 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
10005 Value *VLOperand = Ops[PtrOperandIdx + 2];
10006 Operands.push_back(PtrOperand);
10007 if (IsMasked)
10008 Operands.push_back(Ops[NF]);
10009 Operands.push_back(VLOperand);
10010 if (IsMasked)
10011 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10012
10013 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10014 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10015 clang::CharUnits Align =
10016 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10017 for (unsigned I = 0; I < NF; ++I) {
10018 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10019 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10020 }
10021 // Store new_vl.
10022 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
10023 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
10024 }
10025 break;
10026case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tumu:
10027case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tumu:
10028case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tumu:
10029case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tumu:
10030 ID = Intrinsic::riscv_vlseg8ff_mask;
10031 NF = 8;
10032 PolicyAttrs = 0;
10033IsMasked = true;
10034
10035 {
10036 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10037 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10038 SmallVector<llvm::Value*, 12> Operands;
10039
10040 // Please refer to comment under 'defvar NFList' in this file
10041 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10042 (!IsMasked && PolicyAttrs & RVV_VTA))
10043 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10044 else {
10045 if (IsMasked)
10046 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10047 else // Unmasked
10048 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10049 }
10050 unsigned PtrOperandIdx = IsMasked ?
10051 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10052 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10053 Value *PtrOperand = Ops[PtrOperandIdx];
10054 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
10055 Value *VLOperand = Ops[PtrOperandIdx + 2];
10056 Operands.push_back(PtrOperand);
10057 if (IsMasked)
10058 Operands.push_back(Ops[NF]);
10059 Operands.push_back(VLOperand);
10060 if (IsMasked)
10061 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10062
10063 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10064 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10065 clang::CharUnits Align =
10066 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10067 for (unsigned I = 0; I < NF; ++I) {
10068 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10069 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10070 }
10071 // Store new_vl.
10072 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
10073 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
10074 }
10075 break;
10076case RISCVVector::BI__builtin_rvv_vlseg8e8ff_v_tamu:
10077case RISCVVector::BI__builtin_rvv_vlseg8e16ff_v_tamu:
10078case RISCVVector::BI__builtin_rvv_vlseg8e32ff_v_tamu:
10079case RISCVVector::BI__builtin_rvv_vlseg8e64ff_v_tamu:
10080 ID = Intrinsic::riscv_vlseg8ff_mask;
10081 NF = 8;
10082 PolicyAttrs = 1;
10083IsMasked = true;
10084
10085 {
10086 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10087 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10088 SmallVector<llvm::Value*, 12> Operands;
10089
10090 // Please refer to comment under 'defvar NFList' in this file
10091 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10092 (!IsMasked && PolicyAttrs & RVV_VTA))
10093 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10094 else {
10095 if (IsMasked)
10096 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10097 else // Unmasked
10098 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10099 }
10100 unsigned PtrOperandIdx = IsMasked ?
10101 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10102 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10103 Value *PtrOperand = Ops[PtrOperandIdx];
10104 Value *NewVLOperand = Ops[PtrOperandIdx + 1];
10105 Value *VLOperand = Ops[PtrOperandIdx + 2];
10106 Operands.push_back(PtrOperand);
10107 if (IsMasked)
10108 Operands.push_back(Ops[NF]);
10109 Operands.push_back(VLOperand);
10110 if (IsMasked)
10111 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10112
10113 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10114 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10115 clang::CharUnits Align =
10116 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10117 for (unsigned I = 0; I < NF; ++I) {
10118 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10119 Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10120 }
10121 // Store new_vl.
10122 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {NF});
10123 return Builder.CreateStore(Val, Address(NewVLOperand, Val->getType(), Align));
10124 }
10125 break;
10126case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tu:
10127case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tu:
10128case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tu:
10129case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tu:
10130 ID = Intrinsic::riscv_vlsseg2;
10131 NF = 2;
10132 PolicyAttrs = 2;
10133IsMasked = false;
10134
10135 {
10136 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10137 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10138 SmallVector<llvm::Value*, 12> Operands;
10139
10140 // Please refer to comment under 'defvar NFList' in this file
10141 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10142 (!IsMasked && PolicyAttrs & RVV_VTA))
10143 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10144 else {
10145 if (IsMasked)
10146 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10147 else // Unmasked
10148 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10149 }
10150 unsigned PtrOperandIdx = IsMasked ?
10151 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10152 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10153 Value *PtrOperand = Ops[PtrOperandIdx];
10154 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10155 Value *VLOperand = Ops[PtrOperandIdx + 2];
10156 Operands.push_back(PtrOperand);
10157 Operands.push_back(StrideOperand);
10158 if (IsMasked)
10159 Operands.push_back(Ops[NF]);
10160 Operands.push_back(VLOperand);
10161 if (IsMasked)
10162 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10163
10164 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10165 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10166 clang::CharUnits Align =
10167 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10168 llvm::Value *V;
10169 for (unsigned I = 0; I < NF; ++I) {
10170 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10171 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10172 }
10173 return V;
10174 }
10175 break;
10176case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_ta:
10177case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_ta:
10178case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_ta:
10179case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_ta:
10180 ID = Intrinsic::riscv_vlsseg2;
10181 NF = 2;
10182 PolicyAttrs = 3;
10183IsMasked = false;
10184
10185 {
10186 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10187 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10188 SmallVector<llvm::Value*, 12> Operands;
10189
10190 // Please refer to comment under 'defvar NFList' in this file
10191 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10192 (!IsMasked && PolicyAttrs & RVV_VTA))
10193 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10194 else {
10195 if (IsMasked)
10196 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10197 else // Unmasked
10198 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10199 }
10200 unsigned PtrOperandIdx = IsMasked ?
10201 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10202 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10203 Value *PtrOperand = Ops[PtrOperandIdx];
10204 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10205 Value *VLOperand = Ops[PtrOperandIdx + 2];
10206 Operands.push_back(PtrOperand);
10207 Operands.push_back(StrideOperand);
10208 if (IsMasked)
10209 Operands.push_back(Ops[NF]);
10210 Operands.push_back(VLOperand);
10211 if (IsMasked)
10212 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10213
10214 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10215 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10216 clang::CharUnits Align =
10217 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10218 llvm::Value *V;
10219 for (unsigned I = 0; I < NF; ++I) {
10220 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10221 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10222 }
10223 return V;
10224 }
10225 break;
10226case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tuma:
10227case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tuma:
10228case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tuma:
10229case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tuma:
10230 ID = Intrinsic::riscv_vlsseg2_mask;
10231 NF = 2;
10232 PolicyAttrs = 2;
10233IsMasked = true;
10234
10235 {
10236 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10237 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10238 SmallVector<llvm::Value*, 12> Operands;
10239
10240 // Please refer to comment under 'defvar NFList' in this file
10241 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10242 (!IsMasked && PolicyAttrs & RVV_VTA))
10243 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10244 else {
10245 if (IsMasked)
10246 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10247 else // Unmasked
10248 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10249 }
10250 unsigned PtrOperandIdx = IsMasked ?
10251 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10252 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10253 Value *PtrOperand = Ops[PtrOperandIdx];
10254 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10255 Value *VLOperand = Ops[PtrOperandIdx + 2];
10256 Operands.push_back(PtrOperand);
10257 Operands.push_back(StrideOperand);
10258 if (IsMasked)
10259 Operands.push_back(Ops[NF]);
10260 Operands.push_back(VLOperand);
10261 if (IsMasked)
10262 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10263
10264 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10265 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10266 clang::CharUnits Align =
10267 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10268 llvm::Value *V;
10269 for (unsigned I = 0; I < NF; ++I) {
10270 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10271 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10272 }
10273 return V;
10274 }
10275 break;
10276case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tama:
10277case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tama:
10278case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tama:
10279case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tama:
10280 ID = Intrinsic::riscv_vlsseg2_mask;
10281 NF = 2;
10282 PolicyAttrs = 3;
10283IsMasked = true;
10284
10285 {
10286 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10287 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10288 SmallVector<llvm::Value*, 12> Operands;
10289
10290 // Please refer to comment under 'defvar NFList' in this file
10291 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10292 (!IsMasked && PolicyAttrs & RVV_VTA))
10293 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10294 else {
10295 if (IsMasked)
10296 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10297 else // Unmasked
10298 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10299 }
10300 unsigned PtrOperandIdx = IsMasked ?
10301 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10302 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10303 Value *PtrOperand = Ops[PtrOperandIdx];
10304 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10305 Value *VLOperand = Ops[PtrOperandIdx + 2];
10306 Operands.push_back(PtrOperand);
10307 Operands.push_back(StrideOperand);
10308 if (IsMasked)
10309 Operands.push_back(Ops[NF]);
10310 Operands.push_back(VLOperand);
10311 if (IsMasked)
10312 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10313
10314 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10315 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10316 clang::CharUnits Align =
10317 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10318 llvm::Value *V;
10319 for (unsigned I = 0; I < NF; ++I) {
10320 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10321 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10322 }
10323 return V;
10324 }
10325 break;
10326case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tumu:
10327case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tumu:
10328case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tumu:
10329case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tumu:
10330 ID = Intrinsic::riscv_vlsseg2_mask;
10331 NF = 2;
10332 PolicyAttrs = 0;
10333IsMasked = true;
10334
10335 {
10336 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10337 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10338 SmallVector<llvm::Value*, 12> Operands;
10339
10340 // Please refer to comment under 'defvar NFList' in this file
10341 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10342 (!IsMasked && PolicyAttrs & RVV_VTA))
10343 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10344 else {
10345 if (IsMasked)
10346 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10347 else // Unmasked
10348 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10349 }
10350 unsigned PtrOperandIdx = IsMasked ?
10351 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10352 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10353 Value *PtrOperand = Ops[PtrOperandIdx];
10354 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10355 Value *VLOperand = Ops[PtrOperandIdx + 2];
10356 Operands.push_back(PtrOperand);
10357 Operands.push_back(StrideOperand);
10358 if (IsMasked)
10359 Operands.push_back(Ops[NF]);
10360 Operands.push_back(VLOperand);
10361 if (IsMasked)
10362 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10363
10364 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10365 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10366 clang::CharUnits Align =
10367 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10368 llvm::Value *V;
10369 for (unsigned I = 0; I < NF; ++I) {
10370 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10371 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10372 }
10373 return V;
10374 }
10375 break;
10376case RISCVVector::BI__builtin_rvv_vlsseg2e16_v_tamu:
10377case RISCVVector::BI__builtin_rvv_vlsseg2e8_v_tamu:
10378case RISCVVector::BI__builtin_rvv_vlsseg2e32_v_tamu:
10379case RISCVVector::BI__builtin_rvv_vlsseg2e64_v_tamu:
10380 ID = Intrinsic::riscv_vlsseg2_mask;
10381 NF = 2;
10382 PolicyAttrs = 1;
10383IsMasked = true;
10384
10385 {
10386 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10387 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10388 SmallVector<llvm::Value*, 12> Operands;
10389
10390 // Please refer to comment under 'defvar NFList' in this file
10391 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10392 (!IsMasked && PolicyAttrs & RVV_VTA))
10393 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10394 else {
10395 if (IsMasked)
10396 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10397 else // Unmasked
10398 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10399 }
10400 unsigned PtrOperandIdx = IsMasked ?
10401 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10402 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10403 Value *PtrOperand = Ops[PtrOperandIdx];
10404 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10405 Value *VLOperand = Ops[PtrOperandIdx + 2];
10406 Operands.push_back(PtrOperand);
10407 Operands.push_back(StrideOperand);
10408 if (IsMasked)
10409 Operands.push_back(Ops[NF]);
10410 Operands.push_back(VLOperand);
10411 if (IsMasked)
10412 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10413
10414 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10415 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10416 clang::CharUnits Align =
10417 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10418 llvm::Value *V;
10419 for (unsigned I = 0; I < NF; ++I) {
10420 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10421 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10422 }
10423 return V;
10424 }
10425 break;
10426case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tu:
10427case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tu:
10428case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tu:
10429case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tu:
10430 ID = Intrinsic::riscv_vlsseg3;
10431 NF = 3;
10432 PolicyAttrs = 2;
10433IsMasked = false;
10434
10435 {
10436 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10437 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10438 SmallVector<llvm::Value*, 12> Operands;
10439
10440 // Please refer to comment under 'defvar NFList' in this file
10441 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10442 (!IsMasked && PolicyAttrs & RVV_VTA))
10443 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10444 else {
10445 if (IsMasked)
10446 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10447 else // Unmasked
10448 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10449 }
10450 unsigned PtrOperandIdx = IsMasked ?
10451 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10452 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10453 Value *PtrOperand = Ops[PtrOperandIdx];
10454 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10455 Value *VLOperand = Ops[PtrOperandIdx + 2];
10456 Operands.push_back(PtrOperand);
10457 Operands.push_back(StrideOperand);
10458 if (IsMasked)
10459 Operands.push_back(Ops[NF]);
10460 Operands.push_back(VLOperand);
10461 if (IsMasked)
10462 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10463
10464 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10465 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10466 clang::CharUnits Align =
10467 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10468 llvm::Value *V;
10469 for (unsigned I = 0; I < NF; ++I) {
10470 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10471 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10472 }
10473 return V;
10474 }
10475 break;
10476case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_ta:
10477case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_ta:
10478case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_ta:
10479case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_ta:
10480 ID = Intrinsic::riscv_vlsseg3;
10481 NF = 3;
10482 PolicyAttrs = 3;
10483IsMasked = false;
10484
10485 {
10486 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10487 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10488 SmallVector<llvm::Value*, 12> Operands;
10489
10490 // Please refer to comment under 'defvar NFList' in this file
10491 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10492 (!IsMasked && PolicyAttrs & RVV_VTA))
10493 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10494 else {
10495 if (IsMasked)
10496 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10497 else // Unmasked
10498 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10499 }
10500 unsigned PtrOperandIdx = IsMasked ?
10501 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10502 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10503 Value *PtrOperand = Ops[PtrOperandIdx];
10504 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10505 Value *VLOperand = Ops[PtrOperandIdx + 2];
10506 Operands.push_back(PtrOperand);
10507 Operands.push_back(StrideOperand);
10508 if (IsMasked)
10509 Operands.push_back(Ops[NF]);
10510 Operands.push_back(VLOperand);
10511 if (IsMasked)
10512 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10513
10514 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10515 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10516 clang::CharUnits Align =
10517 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10518 llvm::Value *V;
10519 for (unsigned I = 0; I < NF; ++I) {
10520 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10521 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10522 }
10523 return V;
10524 }
10525 break;
10526case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tuma:
10527case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tuma:
10528case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tuma:
10529case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tuma:
10530 ID = Intrinsic::riscv_vlsseg3_mask;
10531 NF = 3;
10532 PolicyAttrs = 2;
10533IsMasked = true;
10534
10535 {
10536 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10537 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10538 SmallVector<llvm::Value*, 12> Operands;
10539
10540 // Please refer to comment under 'defvar NFList' in this file
10541 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10542 (!IsMasked && PolicyAttrs & RVV_VTA))
10543 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10544 else {
10545 if (IsMasked)
10546 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10547 else // Unmasked
10548 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10549 }
10550 unsigned PtrOperandIdx = IsMasked ?
10551 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10552 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10553 Value *PtrOperand = Ops[PtrOperandIdx];
10554 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10555 Value *VLOperand = Ops[PtrOperandIdx + 2];
10556 Operands.push_back(PtrOperand);
10557 Operands.push_back(StrideOperand);
10558 if (IsMasked)
10559 Operands.push_back(Ops[NF]);
10560 Operands.push_back(VLOperand);
10561 if (IsMasked)
10562 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10563
10564 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10565 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10566 clang::CharUnits Align =
10567 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10568 llvm::Value *V;
10569 for (unsigned I = 0; I < NF; ++I) {
10570 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10571 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10572 }
10573 return V;
10574 }
10575 break;
10576case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tama:
10577case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tama:
10578case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tama:
10579case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tama:
10580 ID = Intrinsic::riscv_vlsseg3_mask;
10581 NF = 3;
10582 PolicyAttrs = 3;
10583IsMasked = true;
10584
10585 {
10586 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10587 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10588 SmallVector<llvm::Value*, 12> Operands;
10589
10590 // Please refer to comment under 'defvar NFList' in this file
10591 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10592 (!IsMasked && PolicyAttrs & RVV_VTA))
10593 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10594 else {
10595 if (IsMasked)
10596 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10597 else // Unmasked
10598 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10599 }
10600 unsigned PtrOperandIdx = IsMasked ?
10601 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10602 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10603 Value *PtrOperand = Ops[PtrOperandIdx];
10604 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10605 Value *VLOperand = Ops[PtrOperandIdx + 2];
10606 Operands.push_back(PtrOperand);
10607 Operands.push_back(StrideOperand);
10608 if (IsMasked)
10609 Operands.push_back(Ops[NF]);
10610 Operands.push_back(VLOperand);
10611 if (IsMasked)
10612 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10613
10614 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10615 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10616 clang::CharUnits Align =
10617 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10618 llvm::Value *V;
10619 for (unsigned I = 0; I < NF; ++I) {
10620 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10621 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10622 }
10623 return V;
10624 }
10625 break;
10626case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tumu:
10627case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tumu:
10628case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tumu:
10629case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tumu:
10630 ID = Intrinsic::riscv_vlsseg3_mask;
10631 NF = 3;
10632 PolicyAttrs = 0;
10633IsMasked = true;
10634
10635 {
10636 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10637 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10638 SmallVector<llvm::Value*, 12> Operands;
10639
10640 // Please refer to comment under 'defvar NFList' in this file
10641 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10642 (!IsMasked && PolicyAttrs & RVV_VTA))
10643 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10644 else {
10645 if (IsMasked)
10646 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10647 else // Unmasked
10648 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10649 }
10650 unsigned PtrOperandIdx = IsMasked ?
10651 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10652 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10653 Value *PtrOperand = Ops[PtrOperandIdx];
10654 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10655 Value *VLOperand = Ops[PtrOperandIdx + 2];
10656 Operands.push_back(PtrOperand);
10657 Operands.push_back(StrideOperand);
10658 if (IsMasked)
10659 Operands.push_back(Ops[NF]);
10660 Operands.push_back(VLOperand);
10661 if (IsMasked)
10662 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10663
10664 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10665 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10666 clang::CharUnits Align =
10667 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10668 llvm::Value *V;
10669 for (unsigned I = 0; I < NF; ++I) {
10670 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10671 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10672 }
10673 return V;
10674 }
10675 break;
10676case RISCVVector::BI__builtin_rvv_vlsseg3e8_v_tamu:
10677case RISCVVector::BI__builtin_rvv_vlsseg3e16_v_tamu:
10678case RISCVVector::BI__builtin_rvv_vlsseg3e32_v_tamu:
10679case RISCVVector::BI__builtin_rvv_vlsseg3e64_v_tamu:
10680 ID = Intrinsic::riscv_vlsseg3_mask;
10681 NF = 3;
10682 PolicyAttrs = 1;
10683IsMasked = true;
10684
10685 {
10686 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10687 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10688 SmallVector<llvm::Value*, 12> Operands;
10689
10690 // Please refer to comment under 'defvar NFList' in this file
10691 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10692 (!IsMasked && PolicyAttrs & RVV_VTA))
10693 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10694 else {
10695 if (IsMasked)
10696 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10697 else // Unmasked
10698 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10699 }
10700 unsigned PtrOperandIdx = IsMasked ?
10701 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10702 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10703 Value *PtrOperand = Ops[PtrOperandIdx];
10704 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10705 Value *VLOperand = Ops[PtrOperandIdx + 2];
10706 Operands.push_back(PtrOperand);
10707 Operands.push_back(StrideOperand);
10708 if (IsMasked)
10709 Operands.push_back(Ops[NF]);
10710 Operands.push_back(VLOperand);
10711 if (IsMasked)
10712 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10713
10714 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10715 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10716 clang::CharUnits Align =
10717 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10718 llvm::Value *V;
10719 for (unsigned I = 0; I < NF; ++I) {
10720 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10721 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10722 }
10723 return V;
10724 }
10725 break;
10726case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tu:
10727case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tu:
10728case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tu:
10729case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tu:
10730 ID = Intrinsic::riscv_vlsseg4;
10731 NF = 4;
10732 PolicyAttrs = 2;
10733IsMasked = false;
10734
10735 {
10736 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10737 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10738 SmallVector<llvm::Value*, 12> Operands;
10739
10740 // Please refer to comment under 'defvar NFList' in this file
10741 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10742 (!IsMasked && PolicyAttrs & RVV_VTA))
10743 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10744 else {
10745 if (IsMasked)
10746 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10747 else // Unmasked
10748 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10749 }
10750 unsigned PtrOperandIdx = IsMasked ?
10751 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10752 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10753 Value *PtrOperand = Ops[PtrOperandIdx];
10754 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10755 Value *VLOperand = Ops[PtrOperandIdx + 2];
10756 Operands.push_back(PtrOperand);
10757 Operands.push_back(StrideOperand);
10758 if (IsMasked)
10759 Operands.push_back(Ops[NF]);
10760 Operands.push_back(VLOperand);
10761 if (IsMasked)
10762 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10763
10764 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10765 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10766 clang::CharUnits Align =
10767 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10768 llvm::Value *V;
10769 for (unsigned I = 0; I < NF; ++I) {
10770 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10771 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10772 }
10773 return V;
10774 }
10775 break;
10776case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_ta:
10777case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_ta:
10778case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_ta:
10779case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_ta:
10780 ID = Intrinsic::riscv_vlsseg4;
10781 NF = 4;
10782 PolicyAttrs = 3;
10783IsMasked = false;
10784
10785 {
10786 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10787 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10788 SmallVector<llvm::Value*, 12> Operands;
10789
10790 // Please refer to comment under 'defvar NFList' in this file
10791 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10792 (!IsMasked && PolicyAttrs & RVV_VTA))
10793 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10794 else {
10795 if (IsMasked)
10796 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10797 else // Unmasked
10798 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10799 }
10800 unsigned PtrOperandIdx = IsMasked ?
10801 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10802 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10803 Value *PtrOperand = Ops[PtrOperandIdx];
10804 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10805 Value *VLOperand = Ops[PtrOperandIdx + 2];
10806 Operands.push_back(PtrOperand);
10807 Operands.push_back(StrideOperand);
10808 if (IsMasked)
10809 Operands.push_back(Ops[NF]);
10810 Operands.push_back(VLOperand);
10811 if (IsMasked)
10812 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10813
10814 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10815 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10816 clang::CharUnits Align =
10817 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10818 llvm::Value *V;
10819 for (unsigned I = 0; I < NF; ++I) {
10820 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10821 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10822 }
10823 return V;
10824 }
10825 break;
10826case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tuma:
10827case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tuma:
10828case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tuma:
10829case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tuma:
10830 ID = Intrinsic::riscv_vlsseg4_mask;
10831 NF = 4;
10832 PolicyAttrs = 2;
10833IsMasked = true;
10834
10835 {
10836 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10837 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10838 SmallVector<llvm::Value*, 12> Operands;
10839
10840 // Please refer to comment under 'defvar NFList' in this file
10841 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10842 (!IsMasked && PolicyAttrs & RVV_VTA))
10843 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10844 else {
10845 if (IsMasked)
10846 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10847 else // Unmasked
10848 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10849 }
10850 unsigned PtrOperandIdx = IsMasked ?
10851 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10852 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10853 Value *PtrOperand = Ops[PtrOperandIdx];
10854 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10855 Value *VLOperand = Ops[PtrOperandIdx + 2];
10856 Operands.push_back(PtrOperand);
10857 Operands.push_back(StrideOperand);
10858 if (IsMasked)
10859 Operands.push_back(Ops[NF]);
10860 Operands.push_back(VLOperand);
10861 if (IsMasked)
10862 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10863
10864 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10865 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10866 clang::CharUnits Align =
10867 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10868 llvm::Value *V;
10869 for (unsigned I = 0; I < NF; ++I) {
10870 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10871 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10872 }
10873 return V;
10874 }
10875 break;
10876case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tama:
10877case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tama:
10878case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tama:
10879case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tama:
10880 ID = Intrinsic::riscv_vlsseg4_mask;
10881 NF = 4;
10882 PolicyAttrs = 3;
10883IsMasked = true;
10884
10885 {
10886 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10887 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10888 SmallVector<llvm::Value*, 12> Operands;
10889
10890 // Please refer to comment under 'defvar NFList' in this file
10891 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10892 (!IsMasked && PolicyAttrs & RVV_VTA))
10893 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10894 else {
10895 if (IsMasked)
10896 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10897 else // Unmasked
10898 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10899 }
10900 unsigned PtrOperandIdx = IsMasked ?
10901 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10902 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10903 Value *PtrOperand = Ops[PtrOperandIdx];
10904 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10905 Value *VLOperand = Ops[PtrOperandIdx + 2];
10906 Operands.push_back(PtrOperand);
10907 Operands.push_back(StrideOperand);
10908 if (IsMasked)
10909 Operands.push_back(Ops[NF]);
10910 Operands.push_back(VLOperand);
10911 if (IsMasked)
10912 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10913
10914 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10915 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10916 clang::CharUnits Align =
10917 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10918 llvm::Value *V;
10919 for (unsigned I = 0; I < NF; ++I) {
10920 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10921 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10922 }
10923 return V;
10924 }
10925 break;
10926case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tumu:
10927case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tumu:
10928case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tumu:
10929case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tumu:
10930 ID = Intrinsic::riscv_vlsseg4_mask;
10931 NF = 4;
10932 PolicyAttrs = 0;
10933IsMasked = true;
10934
10935 {
10936 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10937 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10938 SmallVector<llvm::Value*, 12> Operands;
10939
10940 // Please refer to comment under 'defvar NFList' in this file
10941 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10942 (!IsMasked && PolicyAttrs & RVV_VTA))
10943 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10944 else {
10945 if (IsMasked)
10946 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10947 else // Unmasked
10948 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10949 }
10950 unsigned PtrOperandIdx = IsMasked ?
10951 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
10952 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
10953 Value *PtrOperand = Ops[PtrOperandIdx];
10954 Value *StrideOperand = Ops[PtrOperandIdx + 1];
10955 Value *VLOperand = Ops[PtrOperandIdx + 2];
10956 Operands.push_back(PtrOperand);
10957 Operands.push_back(StrideOperand);
10958 if (IsMasked)
10959 Operands.push_back(Ops[NF]);
10960 Operands.push_back(VLOperand);
10961 if (IsMasked)
10962 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
10963
10964 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
10965 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
10966 clang::CharUnits Align =
10967 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
10968 llvm::Value *V;
10969 for (unsigned I = 0; I < NF; ++I) {
10970 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
10971 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
10972 }
10973 return V;
10974 }
10975 break;
10976case RISCVVector::BI__builtin_rvv_vlsseg4e8_v_tamu:
10977case RISCVVector::BI__builtin_rvv_vlsseg4e16_v_tamu:
10978case RISCVVector::BI__builtin_rvv_vlsseg4e32_v_tamu:
10979case RISCVVector::BI__builtin_rvv_vlsseg4e64_v_tamu:
10980 ID = Intrinsic::riscv_vlsseg4_mask;
10981 NF = 4;
10982 PolicyAttrs = 1;
10983IsMasked = true;
10984
10985 {
10986 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
10987 IntrinsicTypes = {ResultType, Ops.back()->getType()};
10988 SmallVector<llvm::Value*, 12> Operands;
10989
10990 // Please refer to comment under 'defvar NFList' in this file
10991 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
10992 (!IsMasked && PolicyAttrs & RVV_VTA))
10993 Operands.append(NF, llvm::PoisonValue::get(ResultType));
10994 else {
10995 if (IsMasked)
10996 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
10997 else // Unmasked
10998 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
10999 }
11000 unsigned PtrOperandIdx = IsMasked ?
11001 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11002 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11003 Value *PtrOperand = Ops[PtrOperandIdx];
11004 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11005 Value *VLOperand = Ops[PtrOperandIdx + 2];
11006 Operands.push_back(PtrOperand);
11007 Operands.push_back(StrideOperand);
11008 if (IsMasked)
11009 Operands.push_back(Ops[NF]);
11010 Operands.push_back(VLOperand);
11011 if (IsMasked)
11012 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11013
11014 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11015 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11016 clang::CharUnits Align =
11017 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11018 llvm::Value *V;
11019 for (unsigned I = 0; I < NF; ++I) {
11020 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11021 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11022 }
11023 return V;
11024 }
11025 break;
11026case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tu:
11027case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tu:
11028case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tu:
11029case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tu:
11030 ID = Intrinsic::riscv_vlsseg5;
11031 NF = 5;
11032 PolicyAttrs = 2;
11033IsMasked = false;
11034
11035 {
11036 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11037 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11038 SmallVector<llvm::Value*, 12> Operands;
11039
11040 // Please refer to comment under 'defvar NFList' in this file
11041 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11042 (!IsMasked && PolicyAttrs & RVV_VTA))
11043 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11044 else {
11045 if (IsMasked)
11046 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11047 else // Unmasked
11048 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11049 }
11050 unsigned PtrOperandIdx = IsMasked ?
11051 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11052 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11053 Value *PtrOperand = Ops[PtrOperandIdx];
11054 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11055 Value *VLOperand = Ops[PtrOperandIdx + 2];
11056 Operands.push_back(PtrOperand);
11057 Operands.push_back(StrideOperand);
11058 if (IsMasked)
11059 Operands.push_back(Ops[NF]);
11060 Operands.push_back(VLOperand);
11061 if (IsMasked)
11062 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11063
11064 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11065 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11066 clang::CharUnits Align =
11067 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11068 llvm::Value *V;
11069 for (unsigned I = 0; I < NF; ++I) {
11070 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11071 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11072 }
11073 return V;
11074 }
11075 break;
11076case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_ta:
11077case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_ta:
11078case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_ta:
11079case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_ta:
11080 ID = Intrinsic::riscv_vlsseg5;
11081 NF = 5;
11082 PolicyAttrs = 3;
11083IsMasked = false;
11084
11085 {
11086 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11087 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11088 SmallVector<llvm::Value*, 12> Operands;
11089
11090 // Please refer to comment under 'defvar NFList' in this file
11091 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11092 (!IsMasked && PolicyAttrs & RVV_VTA))
11093 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11094 else {
11095 if (IsMasked)
11096 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11097 else // Unmasked
11098 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11099 }
11100 unsigned PtrOperandIdx = IsMasked ?
11101 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11102 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11103 Value *PtrOperand = Ops[PtrOperandIdx];
11104 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11105 Value *VLOperand = Ops[PtrOperandIdx + 2];
11106 Operands.push_back(PtrOperand);
11107 Operands.push_back(StrideOperand);
11108 if (IsMasked)
11109 Operands.push_back(Ops[NF]);
11110 Operands.push_back(VLOperand);
11111 if (IsMasked)
11112 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11113
11114 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11115 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11116 clang::CharUnits Align =
11117 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11118 llvm::Value *V;
11119 for (unsigned I = 0; I < NF; ++I) {
11120 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11121 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11122 }
11123 return V;
11124 }
11125 break;
11126case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tuma:
11127case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tuma:
11128case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tuma:
11129case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tuma:
11130 ID = Intrinsic::riscv_vlsseg5_mask;
11131 NF = 5;
11132 PolicyAttrs = 2;
11133IsMasked = true;
11134
11135 {
11136 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11137 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11138 SmallVector<llvm::Value*, 12> Operands;
11139
11140 // Please refer to comment under 'defvar NFList' in this file
11141 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11142 (!IsMasked && PolicyAttrs & RVV_VTA))
11143 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11144 else {
11145 if (IsMasked)
11146 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11147 else // Unmasked
11148 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11149 }
11150 unsigned PtrOperandIdx = IsMasked ?
11151 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11152 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11153 Value *PtrOperand = Ops[PtrOperandIdx];
11154 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11155 Value *VLOperand = Ops[PtrOperandIdx + 2];
11156 Operands.push_back(PtrOperand);
11157 Operands.push_back(StrideOperand);
11158 if (IsMasked)
11159 Operands.push_back(Ops[NF]);
11160 Operands.push_back(VLOperand);
11161 if (IsMasked)
11162 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11163
11164 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11165 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11166 clang::CharUnits Align =
11167 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11168 llvm::Value *V;
11169 for (unsigned I = 0; I < NF; ++I) {
11170 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11171 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11172 }
11173 return V;
11174 }
11175 break;
11176case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tama:
11177case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tama:
11178case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tama:
11179case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tama:
11180 ID = Intrinsic::riscv_vlsseg5_mask;
11181 NF = 5;
11182 PolicyAttrs = 3;
11183IsMasked = true;
11184
11185 {
11186 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11187 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11188 SmallVector<llvm::Value*, 12> Operands;
11189
11190 // Please refer to comment under 'defvar NFList' in this file
11191 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11192 (!IsMasked && PolicyAttrs & RVV_VTA))
11193 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11194 else {
11195 if (IsMasked)
11196 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11197 else // Unmasked
11198 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11199 }
11200 unsigned PtrOperandIdx = IsMasked ?
11201 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11202 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11203 Value *PtrOperand = Ops[PtrOperandIdx];
11204 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11205 Value *VLOperand = Ops[PtrOperandIdx + 2];
11206 Operands.push_back(PtrOperand);
11207 Operands.push_back(StrideOperand);
11208 if (IsMasked)
11209 Operands.push_back(Ops[NF]);
11210 Operands.push_back(VLOperand);
11211 if (IsMasked)
11212 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11213
11214 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11215 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11216 clang::CharUnits Align =
11217 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11218 llvm::Value *V;
11219 for (unsigned I = 0; I < NF; ++I) {
11220 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11221 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11222 }
11223 return V;
11224 }
11225 break;
11226case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tumu:
11227case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tumu:
11228case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tumu:
11229case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tumu:
11230 ID = Intrinsic::riscv_vlsseg5_mask;
11231 NF = 5;
11232 PolicyAttrs = 0;
11233IsMasked = true;
11234
11235 {
11236 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11237 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11238 SmallVector<llvm::Value*, 12> Operands;
11239
11240 // Please refer to comment under 'defvar NFList' in this file
11241 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11242 (!IsMasked && PolicyAttrs & RVV_VTA))
11243 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11244 else {
11245 if (IsMasked)
11246 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11247 else // Unmasked
11248 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11249 }
11250 unsigned PtrOperandIdx = IsMasked ?
11251 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11252 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11253 Value *PtrOperand = Ops[PtrOperandIdx];
11254 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11255 Value *VLOperand = Ops[PtrOperandIdx + 2];
11256 Operands.push_back(PtrOperand);
11257 Operands.push_back(StrideOperand);
11258 if (IsMasked)
11259 Operands.push_back(Ops[NF]);
11260 Operands.push_back(VLOperand);
11261 if (IsMasked)
11262 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11263
11264 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11265 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11266 clang::CharUnits Align =
11267 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11268 llvm::Value *V;
11269 for (unsigned I = 0; I < NF; ++I) {
11270 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11271 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11272 }
11273 return V;
11274 }
11275 break;
11276case RISCVVector::BI__builtin_rvv_vlsseg5e8_v_tamu:
11277case RISCVVector::BI__builtin_rvv_vlsseg5e16_v_tamu:
11278case RISCVVector::BI__builtin_rvv_vlsseg5e32_v_tamu:
11279case RISCVVector::BI__builtin_rvv_vlsseg5e64_v_tamu:
11280 ID = Intrinsic::riscv_vlsseg5_mask;
11281 NF = 5;
11282 PolicyAttrs = 1;
11283IsMasked = true;
11284
11285 {
11286 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11287 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11288 SmallVector<llvm::Value*, 12> Operands;
11289
11290 // Please refer to comment under 'defvar NFList' in this file
11291 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11292 (!IsMasked && PolicyAttrs & RVV_VTA))
11293 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11294 else {
11295 if (IsMasked)
11296 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11297 else // Unmasked
11298 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11299 }
11300 unsigned PtrOperandIdx = IsMasked ?
11301 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11302 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11303 Value *PtrOperand = Ops[PtrOperandIdx];
11304 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11305 Value *VLOperand = Ops[PtrOperandIdx + 2];
11306 Operands.push_back(PtrOperand);
11307 Operands.push_back(StrideOperand);
11308 if (IsMasked)
11309 Operands.push_back(Ops[NF]);
11310 Operands.push_back(VLOperand);
11311 if (IsMasked)
11312 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11313
11314 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11315 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11316 clang::CharUnits Align =
11317 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11318 llvm::Value *V;
11319 for (unsigned I = 0; I < NF; ++I) {
11320 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11321 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11322 }
11323 return V;
11324 }
11325 break;
11326case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tu:
11327case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tu:
11328case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tu:
11329case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tu:
11330 ID = Intrinsic::riscv_vlsseg6;
11331 NF = 6;
11332 PolicyAttrs = 2;
11333IsMasked = false;
11334
11335 {
11336 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11337 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11338 SmallVector<llvm::Value*, 12> Operands;
11339
11340 // Please refer to comment under 'defvar NFList' in this file
11341 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11342 (!IsMasked && PolicyAttrs & RVV_VTA))
11343 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11344 else {
11345 if (IsMasked)
11346 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11347 else // Unmasked
11348 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11349 }
11350 unsigned PtrOperandIdx = IsMasked ?
11351 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11352 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11353 Value *PtrOperand = Ops[PtrOperandIdx];
11354 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11355 Value *VLOperand = Ops[PtrOperandIdx + 2];
11356 Operands.push_back(PtrOperand);
11357 Operands.push_back(StrideOperand);
11358 if (IsMasked)
11359 Operands.push_back(Ops[NF]);
11360 Operands.push_back(VLOperand);
11361 if (IsMasked)
11362 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11363
11364 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11365 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11366 clang::CharUnits Align =
11367 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11368 llvm::Value *V;
11369 for (unsigned I = 0; I < NF; ++I) {
11370 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11371 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11372 }
11373 return V;
11374 }
11375 break;
11376case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_ta:
11377case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_ta:
11378case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_ta:
11379case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_ta:
11380 ID = Intrinsic::riscv_vlsseg6;
11381 NF = 6;
11382 PolicyAttrs = 3;
11383IsMasked = false;
11384
11385 {
11386 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11387 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11388 SmallVector<llvm::Value*, 12> Operands;
11389
11390 // Please refer to comment under 'defvar NFList' in this file
11391 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11392 (!IsMasked && PolicyAttrs & RVV_VTA))
11393 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11394 else {
11395 if (IsMasked)
11396 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11397 else // Unmasked
11398 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11399 }
11400 unsigned PtrOperandIdx = IsMasked ?
11401 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11402 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11403 Value *PtrOperand = Ops[PtrOperandIdx];
11404 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11405 Value *VLOperand = Ops[PtrOperandIdx + 2];
11406 Operands.push_back(PtrOperand);
11407 Operands.push_back(StrideOperand);
11408 if (IsMasked)
11409 Operands.push_back(Ops[NF]);
11410 Operands.push_back(VLOperand);
11411 if (IsMasked)
11412 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11413
11414 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11415 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11416 clang::CharUnits Align =
11417 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11418 llvm::Value *V;
11419 for (unsigned I = 0; I < NF; ++I) {
11420 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11421 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11422 }
11423 return V;
11424 }
11425 break;
11426case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tuma:
11427case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tuma:
11428case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tuma:
11429case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tuma:
11430 ID = Intrinsic::riscv_vlsseg6_mask;
11431 NF = 6;
11432 PolicyAttrs = 2;
11433IsMasked = true;
11434
11435 {
11436 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11437 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11438 SmallVector<llvm::Value*, 12> Operands;
11439
11440 // Please refer to comment under 'defvar NFList' in this file
11441 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11442 (!IsMasked && PolicyAttrs & RVV_VTA))
11443 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11444 else {
11445 if (IsMasked)
11446 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11447 else // Unmasked
11448 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11449 }
11450 unsigned PtrOperandIdx = IsMasked ?
11451 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11452 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11453 Value *PtrOperand = Ops[PtrOperandIdx];
11454 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11455 Value *VLOperand = Ops[PtrOperandIdx + 2];
11456 Operands.push_back(PtrOperand);
11457 Operands.push_back(StrideOperand);
11458 if (IsMasked)
11459 Operands.push_back(Ops[NF]);
11460 Operands.push_back(VLOperand);
11461 if (IsMasked)
11462 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11463
11464 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11465 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11466 clang::CharUnits Align =
11467 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11468 llvm::Value *V;
11469 for (unsigned I = 0; I < NF; ++I) {
11470 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11471 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11472 }
11473 return V;
11474 }
11475 break;
11476case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tama:
11477case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tama:
11478case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tama:
11479case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tama:
11480 ID = Intrinsic::riscv_vlsseg6_mask;
11481 NF = 6;
11482 PolicyAttrs = 3;
11483IsMasked = true;
11484
11485 {
11486 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11487 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11488 SmallVector<llvm::Value*, 12> Operands;
11489
11490 // Please refer to comment under 'defvar NFList' in this file
11491 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11492 (!IsMasked && PolicyAttrs & RVV_VTA))
11493 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11494 else {
11495 if (IsMasked)
11496 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11497 else // Unmasked
11498 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11499 }
11500 unsigned PtrOperandIdx = IsMasked ?
11501 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11502 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11503 Value *PtrOperand = Ops[PtrOperandIdx];
11504 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11505 Value *VLOperand = Ops[PtrOperandIdx + 2];
11506 Operands.push_back(PtrOperand);
11507 Operands.push_back(StrideOperand);
11508 if (IsMasked)
11509 Operands.push_back(Ops[NF]);
11510 Operands.push_back(VLOperand);
11511 if (IsMasked)
11512 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11513
11514 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11515 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11516 clang::CharUnits Align =
11517 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11518 llvm::Value *V;
11519 for (unsigned I = 0; I < NF; ++I) {
11520 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11521 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11522 }
11523 return V;
11524 }
11525 break;
11526case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tumu:
11527case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tumu:
11528case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tumu:
11529case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tumu:
11530 ID = Intrinsic::riscv_vlsseg6_mask;
11531 NF = 6;
11532 PolicyAttrs = 0;
11533IsMasked = true;
11534
11535 {
11536 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11537 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11538 SmallVector<llvm::Value*, 12> Operands;
11539
11540 // Please refer to comment under 'defvar NFList' in this file
11541 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11542 (!IsMasked && PolicyAttrs & RVV_VTA))
11543 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11544 else {
11545 if (IsMasked)
11546 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11547 else // Unmasked
11548 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11549 }
11550 unsigned PtrOperandIdx = IsMasked ?
11551 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11552 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11553 Value *PtrOperand = Ops[PtrOperandIdx];
11554 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11555 Value *VLOperand = Ops[PtrOperandIdx + 2];
11556 Operands.push_back(PtrOperand);
11557 Operands.push_back(StrideOperand);
11558 if (IsMasked)
11559 Operands.push_back(Ops[NF]);
11560 Operands.push_back(VLOperand);
11561 if (IsMasked)
11562 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11563
11564 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11565 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11566 clang::CharUnits Align =
11567 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11568 llvm::Value *V;
11569 for (unsigned I = 0; I < NF; ++I) {
11570 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11571 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11572 }
11573 return V;
11574 }
11575 break;
11576case RISCVVector::BI__builtin_rvv_vlsseg6e8_v_tamu:
11577case RISCVVector::BI__builtin_rvv_vlsseg6e16_v_tamu:
11578case RISCVVector::BI__builtin_rvv_vlsseg6e32_v_tamu:
11579case RISCVVector::BI__builtin_rvv_vlsseg6e64_v_tamu:
11580 ID = Intrinsic::riscv_vlsseg6_mask;
11581 NF = 6;
11582 PolicyAttrs = 1;
11583IsMasked = true;
11584
11585 {
11586 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11587 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11588 SmallVector<llvm::Value*, 12> Operands;
11589
11590 // Please refer to comment under 'defvar NFList' in this file
11591 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11592 (!IsMasked && PolicyAttrs & RVV_VTA))
11593 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11594 else {
11595 if (IsMasked)
11596 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11597 else // Unmasked
11598 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11599 }
11600 unsigned PtrOperandIdx = IsMasked ?
11601 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11602 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11603 Value *PtrOperand = Ops[PtrOperandIdx];
11604 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11605 Value *VLOperand = Ops[PtrOperandIdx + 2];
11606 Operands.push_back(PtrOperand);
11607 Operands.push_back(StrideOperand);
11608 if (IsMasked)
11609 Operands.push_back(Ops[NF]);
11610 Operands.push_back(VLOperand);
11611 if (IsMasked)
11612 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11613
11614 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11615 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11616 clang::CharUnits Align =
11617 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11618 llvm::Value *V;
11619 for (unsigned I = 0; I < NF; ++I) {
11620 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11621 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11622 }
11623 return V;
11624 }
11625 break;
11626case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tu:
11627case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tu:
11628case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tu:
11629case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tu:
11630 ID = Intrinsic::riscv_vlsseg7;
11631 NF = 7;
11632 PolicyAttrs = 2;
11633IsMasked = false;
11634
11635 {
11636 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11637 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11638 SmallVector<llvm::Value*, 12> Operands;
11639
11640 // Please refer to comment under 'defvar NFList' in this file
11641 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11642 (!IsMasked && PolicyAttrs & RVV_VTA))
11643 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11644 else {
11645 if (IsMasked)
11646 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11647 else // Unmasked
11648 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11649 }
11650 unsigned PtrOperandIdx = IsMasked ?
11651 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11652 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11653 Value *PtrOperand = Ops[PtrOperandIdx];
11654 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11655 Value *VLOperand = Ops[PtrOperandIdx + 2];
11656 Operands.push_back(PtrOperand);
11657 Operands.push_back(StrideOperand);
11658 if (IsMasked)
11659 Operands.push_back(Ops[NF]);
11660 Operands.push_back(VLOperand);
11661 if (IsMasked)
11662 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11663
11664 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11665 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11666 clang::CharUnits Align =
11667 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11668 llvm::Value *V;
11669 for (unsigned I = 0; I < NF; ++I) {
11670 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11671 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11672 }
11673 return V;
11674 }
11675 break;
11676case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_ta:
11677case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_ta:
11678case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_ta:
11679case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_ta:
11680 ID = Intrinsic::riscv_vlsseg7;
11681 NF = 7;
11682 PolicyAttrs = 3;
11683IsMasked = false;
11684
11685 {
11686 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11687 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11688 SmallVector<llvm::Value*, 12> Operands;
11689
11690 // Please refer to comment under 'defvar NFList' in this file
11691 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11692 (!IsMasked && PolicyAttrs & RVV_VTA))
11693 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11694 else {
11695 if (IsMasked)
11696 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11697 else // Unmasked
11698 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11699 }
11700 unsigned PtrOperandIdx = IsMasked ?
11701 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11702 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11703 Value *PtrOperand = Ops[PtrOperandIdx];
11704 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11705 Value *VLOperand = Ops[PtrOperandIdx + 2];
11706 Operands.push_back(PtrOperand);
11707 Operands.push_back(StrideOperand);
11708 if (IsMasked)
11709 Operands.push_back(Ops[NF]);
11710 Operands.push_back(VLOperand);
11711 if (IsMasked)
11712 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11713
11714 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11715 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11716 clang::CharUnits Align =
11717 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11718 llvm::Value *V;
11719 for (unsigned I = 0; I < NF; ++I) {
11720 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11721 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11722 }
11723 return V;
11724 }
11725 break;
11726case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tuma:
11727case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tuma:
11728case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tuma:
11729case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tuma:
11730 ID = Intrinsic::riscv_vlsseg7_mask;
11731 NF = 7;
11732 PolicyAttrs = 2;
11733IsMasked = true;
11734
11735 {
11736 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11737 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11738 SmallVector<llvm::Value*, 12> Operands;
11739
11740 // Please refer to comment under 'defvar NFList' in this file
11741 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11742 (!IsMasked && PolicyAttrs & RVV_VTA))
11743 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11744 else {
11745 if (IsMasked)
11746 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11747 else // Unmasked
11748 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11749 }
11750 unsigned PtrOperandIdx = IsMasked ?
11751 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11752 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11753 Value *PtrOperand = Ops[PtrOperandIdx];
11754 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11755 Value *VLOperand = Ops[PtrOperandIdx + 2];
11756 Operands.push_back(PtrOperand);
11757 Operands.push_back(StrideOperand);
11758 if (IsMasked)
11759 Operands.push_back(Ops[NF]);
11760 Operands.push_back(VLOperand);
11761 if (IsMasked)
11762 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11763
11764 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11765 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11766 clang::CharUnits Align =
11767 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11768 llvm::Value *V;
11769 for (unsigned I = 0; I < NF; ++I) {
11770 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11771 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11772 }
11773 return V;
11774 }
11775 break;
11776case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tama:
11777case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tama:
11778case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tama:
11779case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tama:
11780 ID = Intrinsic::riscv_vlsseg7_mask;
11781 NF = 7;
11782 PolicyAttrs = 3;
11783IsMasked = true;
11784
11785 {
11786 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11787 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11788 SmallVector<llvm::Value*, 12> Operands;
11789
11790 // Please refer to comment under 'defvar NFList' in this file
11791 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11792 (!IsMasked && PolicyAttrs & RVV_VTA))
11793 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11794 else {
11795 if (IsMasked)
11796 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11797 else // Unmasked
11798 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11799 }
11800 unsigned PtrOperandIdx = IsMasked ?
11801 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11802 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11803 Value *PtrOperand = Ops[PtrOperandIdx];
11804 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11805 Value *VLOperand = Ops[PtrOperandIdx + 2];
11806 Operands.push_back(PtrOperand);
11807 Operands.push_back(StrideOperand);
11808 if (IsMasked)
11809 Operands.push_back(Ops[NF]);
11810 Operands.push_back(VLOperand);
11811 if (IsMasked)
11812 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11813
11814 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11815 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11816 clang::CharUnits Align =
11817 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11818 llvm::Value *V;
11819 for (unsigned I = 0; I < NF; ++I) {
11820 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11821 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11822 }
11823 return V;
11824 }
11825 break;
11826case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tumu:
11827case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tumu:
11828case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tumu:
11829case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tumu:
11830 ID = Intrinsic::riscv_vlsseg7_mask;
11831 NF = 7;
11832 PolicyAttrs = 0;
11833IsMasked = true;
11834
11835 {
11836 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11837 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11838 SmallVector<llvm::Value*, 12> Operands;
11839
11840 // Please refer to comment under 'defvar NFList' in this file
11841 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11842 (!IsMasked && PolicyAttrs & RVV_VTA))
11843 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11844 else {
11845 if (IsMasked)
11846 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11847 else // Unmasked
11848 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11849 }
11850 unsigned PtrOperandIdx = IsMasked ?
11851 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11852 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11853 Value *PtrOperand = Ops[PtrOperandIdx];
11854 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11855 Value *VLOperand = Ops[PtrOperandIdx + 2];
11856 Operands.push_back(PtrOperand);
11857 Operands.push_back(StrideOperand);
11858 if (IsMasked)
11859 Operands.push_back(Ops[NF]);
11860 Operands.push_back(VLOperand);
11861 if (IsMasked)
11862 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11863
11864 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11865 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11866 clang::CharUnits Align =
11867 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11868 llvm::Value *V;
11869 for (unsigned I = 0; I < NF; ++I) {
11870 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11871 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11872 }
11873 return V;
11874 }
11875 break;
11876case RISCVVector::BI__builtin_rvv_vlsseg7e8_v_tamu:
11877case RISCVVector::BI__builtin_rvv_vlsseg7e16_v_tamu:
11878case RISCVVector::BI__builtin_rvv_vlsseg7e32_v_tamu:
11879case RISCVVector::BI__builtin_rvv_vlsseg7e64_v_tamu:
11880 ID = Intrinsic::riscv_vlsseg7_mask;
11881 NF = 7;
11882 PolicyAttrs = 1;
11883IsMasked = true;
11884
11885 {
11886 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11887 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11888 SmallVector<llvm::Value*, 12> Operands;
11889
11890 // Please refer to comment under 'defvar NFList' in this file
11891 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11892 (!IsMasked && PolicyAttrs & RVV_VTA))
11893 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11894 else {
11895 if (IsMasked)
11896 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11897 else // Unmasked
11898 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11899 }
11900 unsigned PtrOperandIdx = IsMasked ?
11901 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11902 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11903 Value *PtrOperand = Ops[PtrOperandIdx];
11904 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11905 Value *VLOperand = Ops[PtrOperandIdx + 2];
11906 Operands.push_back(PtrOperand);
11907 Operands.push_back(StrideOperand);
11908 if (IsMasked)
11909 Operands.push_back(Ops[NF]);
11910 Operands.push_back(VLOperand);
11911 if (IsMasked)
11912 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11913
11914 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11915 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11916 clang::CharUnits Align =
11917 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11918 llvm::Value *V;
11919 for (unsigned I = 0; I < NF; ++I) {
11920 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11921 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11922 }
11923 return V;
11924 }
11925 break;
11926case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tu:
11927case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tu:
11928case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tu:
11929case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tu:
11930 ID = Intrinsic::riscv_vlsseg8;
11931 NF = 8;
11932 PolicyAttrs = 2;
11933IsMasked = false;
11934
11935 {
11936 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11937 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11938 SmallVector<llvm::Value*, 12> Operands;
11939
11940 // Please refer to comment under 'defvar NFList' in this file
11941 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11942 (!IsMasked && PolicyAttrs & RVV_VTA))
11943 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11944 else {
11945 if (IsMasked)
11946 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11947 else // Unmasked
11948 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11949 }
11950 unsigned PtrOperandIdx = IsMasked ?
11951 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
11952 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
11953 Value *PtrOperand = Ops[PtrOperandIdx];
11954 Value *StrideOperand = Ops[PtrOperandIdx + 1];
11955 Value *VLOperand = Ops[PtrOperandIdx + 2];
11956 Operands.push_back(PtrOperand);
11957 Operands.push_back(StrideOperand);
11958 if (IsMasked)
11959 Operands.push_back(Ops[NF]);
11960 Operands.push_back(VLOperand);
11961 if (IsMasked)
11962 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
11963
11964 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
11965 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
11966 clang::CharUnits Align =
11967 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
11968 llvm::Value *V;
11969 for (unsigned I = 0; I < NF; ++I) {
11970 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
11971 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
11972 }
11973 return V;
11974 }
11975 break;
11976case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_ta:
11977case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_ta:
11978case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_ta:
11979case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_ta:
11980 ID = Intrinsic::riscv_vlsseg8;
11981 NF = 8;
11982 PolicyAttrs = 3;
11983IsMasked = false;
11984
11985 {
11986 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
11987 IntrinsicTypes = {ResultType, Ops.back()->getType()};
11988 SmallVector<llvm::Value*, 12> Operands;
11989
11990 // Please refer to comment under 'defvar NFList' in this file
11991 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
11992 (!IsMasked && PolicyAttrs & RVV_VTA))
11993 Operands.append(NF, llvm::PoisonValue::get(ResultType));
11994 else {
11995 if (IsMasked)
11996 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
11997 else // Unmasked
11998 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
11999 }
12000 unsigned PtrOperandIdx = IsMasked ?
12001 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12002 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12003 Value *PtrOperand = Ops[PtrOperandIdx];
12004 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12005 Value *VLOperand = Ops[PtrOperandIdx + 2];
12006 Operands.push_back(PtrOperand);
12007 Operands.push_back(StrideOperand);
12008 if (IsMasked)
12009 Operands.push_back(Ops[NF]);
12010 Operands.push_back(VLOperand);
12011 if (IsMasked)
12012 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12013
12014 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12015 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12016 clang::CharUnits Align =
12017 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12018 llvm::Value *V;
12019 for (unsigned I = 0; I < NF; ++I) {
12020 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12021 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12022 }
12023 return V;
12024 }
12025 break;
12026case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tuma:
12027case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tuma:
12028case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tuma:
12029case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tuma:
12030 ID = Intrinsic::riscv_vlsseg8_mask;
12031 NF = 8;
12032 PolicyAttrs = 2;
12033IsMasked = true;
12034
12035 {
12036 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12037 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12038 SmallVector<llvm::Value*, 12> Operands;
12039
12040 // Please refer to comment under 'defvar NFList' in this file
12041 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12042 (!IsMasked && PolicyAttrs & RVV_VTA))
12043 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12044 else {
12045 if (IsMasked)
12046 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12047 else // Unmasked
12048 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12049 }
12050 unsigned PtrOperandIdx = IsMasked ?
12051 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12052 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12053 Value *PtrOperand = Ops[PtrOperandIdx];
12054 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12055 Value *VLOperand = Ops[PtrOperandIdx + 2];
12056 Operands.push_back(PtrOperand);
12057 Operands.push_back(StrideOperand);
12058 if (IsMasked)
12059 Operands.push_back(Ops[NF]);
12060 Operands.push_back(VLOperand);
12061 if (IsMasked)
12062 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12063
12064 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12065 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12066 clang::CharUnits Align =
12067 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12068 llvm::Value *V;
12069 for (unsigned I = 0; I < NF; ++I) {
12070 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12071 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12072 }
12073 return V;
12074 }
12075 break;
12076case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tama:
12077case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tama:
12078case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tama:
12079case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tama:
12080 ID = Intrinsic::riscv_vlsseg8_mask;
12081 NF = 8;
12082 PolicyAttrs = 3;
12083IsMasked = true;
12084
12085 {
12086 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12087 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12088 SmallVector<llvm::Value*, 12> Operands;
12089
12090 // Please refer to comment under 'defvar NFList' in this file
12091 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12092 (!IsMasked && PolicyAttrs & RVV_VTA))
12093 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12094 else {
12095 if (IsMasked)
12096 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12097 else // Unmasked
12098 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12099 }
12100 unsigned PtrOperandIdx = IsMasked ?
12101 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12102 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12103 Value *PtrOperand = Ops[PtrOperandIdx];
12104 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12105 Value *VLOperand = Ops[PtrOperandIdx + 2];
12106 Operands.push_back(PtrOperand);
12107 Operands.push_back(StrideOperand);
12108 if (IsMasked)
12109 Operands.push_back(Ops[NF]);
12110 Operands.push_back(VLOperand);
12111 if (IsMasked)
12112 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12113
12114 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12115 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12116 clang::CharUnits Align =
12117 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12118 llvm::Value *V;
12119 for (unsigned I = 0; I < NF; ++I) {
12120 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12121 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12122 }
12123 return V;
12124 }
12125 break;
12126case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tumu:
12127case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tumu:
12128case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tumu:
12129case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tumu:
12130 ID = Intrinsic::riscv_vlsseg8_mask;
12131 NF = 8;
12132 PolicyAttrs = 0;
12133IsMasked = true;
12134
12135 {
12136 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12137 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12138 SmallVector<llvm::Value*, 12> Operands;
12139
12140 // Please refer to comment under 'defvar NFList' in this file
12141 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12142 (!IsMasked && PolicyAttrs & RVV_VTA))
12143 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12144 else {
12145 if (IsMasked)
12146 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12147 else // Unmasked
12148 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12149 }
12150 unsigned PtrOperandIdx = IsMasked ?
12151 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12152 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12153 Value *PtrOperand = Ops[PtrOperandIdx];
12154 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12155 Value *VLOperand = Ops[PtrOperandIdx + 2];
12156 Operands.push_back(PtrOperand);
12157 Operands.push_back(StrideOperand);
12158 if (IsMasked)
12159 Operands.push_back(Ops[NF]);
12160 Operands.push_back(VLOperand);
12161 if (IsMasked)
12162 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12163
12164 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12165 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12166 clang::CharUnits Align =
12167 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12168 llvm::Value *V;
12169 for (unsigned I = 0; I < NF; ++I) {
12170 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12171 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12172 }
12173 return V;
12174 }
12175 break;
12176case RISCVVector::BI__builtin_rvv_vlsseg8e8_v_tamu:
12177case RISCVVector::BI__builtin_rvv_vlsseg8e16_v_tamu:
12178case RISCVVector::BI__builtin_rvv_vlsseg8e32_v_tamu:
12179case RISCVVector::BI__builtin_rvv_vlsseg8e64_v_tamu:
12180 ID = Intrinsic::riscv_vlsseg8_mask;
12181 NF = 8;
12182 PolicyAttrs = 1;
12183IsMasked = true;
12184
12185 {
12186 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12187 IntrinsicTypes = {ResultType, Ops.back()->getType()};
12188 SmallVector<llvm::Value*, 12> Operands;
12189
12190 // Please refer to comment under 'defvar NFList' in this file
12191 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12192 (!IsMasked && PolicyAttrs & RVV_VTA))
12193 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12194 else {
12195 if (IsMasked)
12196 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12197 else // Unmasked
12198 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12199 }
12200 unsigned PtrOperandIdx = IsMasked ?
12201 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12202 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12203 Value *PtrOperand = Ops[PtrOperandIdx];
12204 Value *StrideOperand = Ops[PtrOperandIdx + 1];
12205 Value *VLOperand = Ops[PtrOperandIdx + 2];
12206 Operands.push_back(PtrOperand);
12207 Operands.push_back(StrideOperand);
12208 if (IsMasked)
12209 Operands.push_back(Ops[NF]);
12210 Operands.push_back(VLOperand);
12211 if (IsMasked)
12212 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12213
12214 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12215 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12216 clang::CharUnits Align =
12217 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12218 llvm::Value *V;
12219 for (unsigned I = 0; I < NF; ++I) {
12220 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12221 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12222 }
12223 return V;
12224 }
12225 break;
12226case RISCVVector::BI__builtin_rvv_vluxei8_v_tu:
12227case RISCVVector::BI__builtin_rvv_vluxei64_v_tu:
12228case RISCVVector::BI__builtin_rvv_vluxei16_v_tu:
12229case RISCVVector::BI__builtin_rvv_vluxei32_v_tu:
12230 ID = Intrinsic::riscv_vluxei;
12231 PolicyAttrs = 2;
12232 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
12233 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12234 break;
12235case RISCVVector::BI__builtin_rvv_vluxei8_v_ta:
12236case RISCVVector::BI__builtin_rvv_vluxei64_v_ta:
12237case RISCVVector::BI__builtin_rvv_vluxei16_v_ta:
12238case RISCVVector::BI__builtin_rvv_vluxei32_v_ta:
12239 ID = Intrinsic::riscv_vluxei;
12240 PolicyAttrs = 3;
12241 Ops[0] = Builder.CreateBitCast(Ops[0], ResultType->getPointerTo());
12242 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
12243 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12244 break;
12245case RISCVVector::BI__builtin_rvv_vluxei8_v_tuma:
12246case RISCVVector::BI__builtin_rvv_vluxei64_v_tuma:
12247case RISCVVector::BI__builtin_rvv_vluxei16_v_tuma:
12248case RISCVVector::BI__builtin_rvv_vluxei32_v_tuma:
12249 ID = Intrinsic::riscv_vluxei_mask;
12250 PolicyAttrs = 2;
12251 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
12252 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12253 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12254 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12255 break;
12256case RISCVVector::BI__builtin_rvv_vluxei8_v_tama:
12257case RISCVVector::BI__builtin_rvv_vluxei64_v_tama:
12258case RISCVVector::BI__builtin_rvv_vluxei16_v_tama:
12259case RISCVVector::BI__builtin_rvv_vluxei32_v_tama:
12260 ID = Intrinsic::riscv_vluxei_mask;
12261 PolicyAttrs = 3;
12262 Ops[1] = Builder.CreateBitCast(Ops[1], ResultType->getPointerTo());
12263 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12264 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12265 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
12266 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12267 break;
12268case RISCVVector::BI__builtin_rvv_vluxei8_v_tumu:
12269case RISCVVector::BI__builtin_rvv_vluxei64_v_tumu:
12270case RISCVVector::BI__builtin_rvv_vluxei16_v_tumu:
12271case RISCVVector::BI__builtin_rvv_vluxei32_v_tumu:
12272 ID = Intrinsic::riscv_vluxei_mask;
12273 PolicyAttrs = 0;
12274 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
12275 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12276 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12277 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12278 break;
12279case RISCVVector::BI__builtin_rvv_vluxei8_v_tamu:
12280case RISCVVector::BI__builtin_rvv_vluxei64_v_tamu:
12281case RISCVVector::BI__builtin_rvv_vluxei16_v_tamu:
12282case RISCVVector::BI__builtin_rvv_vluxei32_v_tamu:
12283 ID = Intrinsic::riscv_vluxei_mask;
12284 PolicyAttrs = 1;
12285 Ops[2] = Builder.CreateBitCast(Ops[2], ResultType->getPointerTo());
12286 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
12287 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12288 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
12289 break;
12290case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tu:
12291case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tu:
12292case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tu:
12293case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tu:
12294 ID = Intrinsic::riscv_vluxseg2;
12295 NF = 2;
12296 PolicyAttrs = 2;
12297IsMasked = false;
12298
12299 {
12300 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12301 SmallVector<llvm::Value*, 12> Operands;
12302
12303 // Please refer to comment under 'defvar NFList' in this file
12304 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12305 (!IsMasked && PolicyAttrs & RVV_VTA))
12306 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12307 else {
12308 if (IsMasked)
12309 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12310 else // Unmasked
12311 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12312 }
12313 unsigned PtrOperandIdx = IsMasked ?
12314 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12315 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12316 Value *PtrOperand = Ops[PtrOperandIdx];
12317 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12318 Value *VLOperand = Ops[PtrOperandIdx + 2];
12319 Operands.push_back(PtrOperand);
12320 Operands.push_back(IndexOperand);
12321 if (IsMasked)
12322 Operands.push_back(Ops[NF]);
12323 Operands.push_back(VLOperand);
12324 if (IsMasked)
12325 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12326 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12327
12328 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12329 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12330 clang::CharUnits Align =
12331 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12332 llvm::Value *V;
12333 for (unsigned I = 0; I < NF; ++I) {
12334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12335 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12336 }
12337 return V;
12338 }
12339 break;
12340case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_ta:
12341case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_ta:
12342case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_ta:
12343case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_ta:
12344 ID = Intrinsic::riscv_vluxseg2;
12345 NF = 2;
12346 PolicyAttrs = 3;
12347IsMasked = false;
12348
12349 {
12350 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12351 SmallVector<llvm::Value*, 12> Operands;
12352
12353 // Please refer to comment under 'defvar NFList' in this file
12354 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12355 (!IsMasked && PolicyAttrs & RVV_VTA))
12356 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12357 else {
12358 if (IsMasked)
12359 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12360 else // Unmasked
12361 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12362 }
12363 unsigned PtrOperandIdx = IsMasked ?
12364 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12365 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12366 Value *PtrOperand = Ops[PtrOperandIdx];
12367 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12368 Value *VLOperand = Ops[PtrOperandIdx + 2];
12369 Operands.push_back(PtrOperand);
12370 Operands.push_back(IndexOperand);
12371 if (IsMasked)
12372 Operands.push_back(Ops[NF]);
12373 Operands.push_back(VLOperand);
12374 if (IsMasked)
12375 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12376 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12377
12378 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12379 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12380 clang::CharUnits Align =
12381 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12382 llvm::Value *V;
12383 for (unsigned I = 0; I < NF; ++I) {
12384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12385 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12386 }
12387 return V;
12388 }
12389 break;
12390case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tuma:
12391case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tuma:
12392case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tuma:
12393case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tuma:
12394 ID = Intrinsic::riscv_vluxseg2_mask;
12395 NF = 2;
12396 PolicyAttrs = 2;
12397IsMasked = true;
12398
12399 {
12400 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12401 SmallVector<llvm::Value*, 12> Operands;
12402
12403 // Please refer to comment under 'defvar NFList' in this file
12404 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12405 (!IsMasked && PolicyAttrs & RVV_VTA))
12406 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12407 else {
12408 if (IsMasked)
12409 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12410 else // Unmasked
12411 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12412 }
12413 unsigned PtrOperandIdx = IsMasked ?
12414 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12415 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12416 Value *PtrOperand = Ops[PtrOperandIdx];
12417 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12418 Value *VLOperand = Ops[PtrOperandIdx + 2];
12419 Operands.push_back(PtrOperand);
12420 Operands.push_back(IndexOperand);
12421 if (IsMasked)
12422 Operands.push_back(Ops[NF]);
12423 Operands.push_back(VLOperand);
12424 if (IsMasked)
12425 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12426 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12427
12428 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12429 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12430 clang::CharUnits Align =
12431 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12432 llvm::Value *V;
12433 for (unsigned I = 0; I < NF; ++I) {
12434 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12435 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12436 }
12437 return V;
12438 }
12439 break;
12440case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tama:
12441case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tama:
12442case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tama:
12443case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tama:
12444 ID = Intrinsic::riscv_vluxseg2_mask;
12445 NF = 2;
12446 PolicyAttrs = 3;
12447IsMasked = true;
12448
12449 {
12450 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12451 SmallVector<llvm::Value*, 12> Operands;
12452
12453 // Please refer to comment under 'defvar NFList' in this file
12454 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12455 (!IsMasked && PolicyAttrs & RVV_VTA))
12456 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12457 else {
12458 if (IsMasked)
12459 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12460 else // Unmasked
12461 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12462 }
12463 unsigned PtrOperandIdx = IsMasked ?
12464 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12465 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12466 Value *PtrOperand = Ops[PtrOperandIdx];
12467 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12468 Value *VLOperand = Ops[PtrOperandIdx + 2];
12469 Operands.push_back(PtrOperand);
12470 Operands.push_back(IndexOperand);
12471 if (IsMasked)
12472 Operands.push_back(Ops[NF]);
12473 Operands.push_back(VLOperand);
12474 if (IsMasked)
12475 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12476 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12477
12478 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12479 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12480 clang::CharUnits Align =
12481 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12482 llvm::Value *V;
12483 for (unsigned I = 0; I < NF; ++I) {
12484 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12485 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12486 }
12487 return V;
12488 }
12489 break;
12490case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tumu:
12491case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tumu:
12492case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tumu:
12493case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tumu:
12494 ID = Intrinsic::riscv_vluxseg2_mask;
12495 NF = 2;
12496 PolicyAttrs = 0;
12497IsMasked = true;
12498
12499 {
12500 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12501 SmallVector<llvm::Value*, 12> Operands;
12502
12503 // Please refer to comment under 'defvar NFList' in this file
12504 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12505 (!IsMasked && PolicyAttrs & RVV_VTA))
12506 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12507 else {
12508 if (IsMasked)
12509 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12510 else // Unmasked
12511 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12512 }
12513 unsigned PtrOperandIdx = IsMasked ?
12514 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12515 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12516 Value *PtrOperand = Ops[PtrOperandIdx];
12517 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12518 Value *VLOperand = Ops[PtrOperandIdx + 2];
12519 Operands.push_back(PtrOperand);
12520 Operands.push_back(IndexOperand);
12521 if (IsMasked)
12522 Operands.push_back(Ops[NF]);
12523 Operands.push_back(VLOperand);
12524 if (IsMasked)
12525 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12526 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12527
12528 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12529 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12530 clang::CharUnits Align =
12531 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12532 llvm::Value *V;
12533 for (unsigned I = 0; I < NF; ++I) {
12534 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12535 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12536 }
12537 return V;
12538 }
12539 break;
12540case RISCVVector::BI__builtin_rvv_vluxseg2ei8_v_tamu:
12541case RISCVVector::BI__builtin_rvv_vluxseg2ei16_v_tamu:
12542case RISCVVector::BI__builtin_rvv_vluxseg2ei32_v_tamu:
12543case RISCVVector::BI__builtin_rvv_vluxseg2ei64_v_tamu:
12544 ID = Intrinsic::riscv_vluxseg2_mask;
12545 NF = 2;
12546 PolicyAttrs = 1;
12547IsMasked = true;
12548
12549 {
12550 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12551 SmallVector<llvm::Value*, 12> Operands;
12552
12553 // Please refer to comment under 'defvar NFList' in this file
12554 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12555 (!IsMasked && PolicyAttrs & RVV_VTA))
12556 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12557 else {
12558 if (IsMasked)
12559 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12560 else // Unmasked
12561 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12562 }
12563 unsigned PtrOperandIdx = IsMasked ?
12564 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12565 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12566 Value *PtrOperand = Ops[PtrOperandIdx];
12567 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12568 Value *VLOperand = Ops[PtrOperandIdx + 2];
12569 Operands.push_back(PtrOperand);
12570 Operands.push_back(IndexOperand);
12571 if (IsMasked)
12572 Operands.push_back(Ops[NF]);
12573 Operands.push_back(VLOperand);
12574 if (IsMasked)
12575 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12576 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12577
12578 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12579 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12580 clang::CharUnits Align =
12581 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12582 llvm::Value *V;
12583 for (unsigned I = 0; I < NF; ++I) {
12584 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12585 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12586 }
12587 return V;
12588 }
12589 break;
12590case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tu:
12591case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tu:
12592case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tu:
12593case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tu:
12594 ID = Intrinsic::riscv_vluxseg3;
12595 NF = 3;
12596 PolicyAttrs = 2;
12597IsMasked = false;
12598
12599 {
12600 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12601 SmallVector<llvm::Value*, 12> Operands;
12602
12603 // Please refer to comment under 'defvar NFList' in this file
12604 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12605 (!IsMasked && PolicyAttrs & RVV_VTA))
12606 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12607 else {
12608 if (IsMasked)
12609 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12610 else // Unmasked
12611 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12612 }
12613 unsigned PtrOperandIdx = IsMasked ?
12614 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12615 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12616 Value *PtrOperand = Ops[PtrOperandIdx];
12617 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12618 Value *VLOperand = Ops[PtrOperandIdx + 2];
12619 Operands.push_back(PtrOperand);
12620 Operands.push_back(IndexOperand);
12621 if (IsMasked)
12622 Operands.push_back(Ops[NF]);
12623 Operands.push_back(VLOperand);
12624 if (IsMasked)
12625 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12626 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12627
12628 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12629 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12630 clang::CharUnits Align =
12631 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12632 llvm::Value *V;
12633 for (unsigned I = 0; I < NF; ++I) {
12634 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12635 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12636 }
12637 return V;
12638 }
12639 break;
12640case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_ta:
12641case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_ta:
12642case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_ta:
12643case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_ta:
12644 ID = Intrinsic::riscv_vluxseg3;
12645 NF = 3;
12646 PolicyAttrs = 3;
12647IsMasked = false;
12648
12649 {
12650 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12651 SmallVector<llvm::Value*, 12> Operands;
12652
12653 // Please refer to comment under 'defvar NFList' in this file
12654 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12655 (!IsMasked && PolicyAttrs & RVV_VTA))
12656 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12657 else {
12658 if (IsMasked)
12659 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12660 else // Unmasked
12661 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12662 }
12663 unsigned PtrOperandIdx = IsMasked ?
12664 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12665 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12666 Value *PtrOperand = Ops[PtrOperandIdx];
12667 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12668 Value *VLOperand = Ops[PtrOperandIdx + 2];
12669 Operands.push_back(PtrOperand);
12670 Operands.push_back(IndexOperand);
12671 if (IsMasked)
12672 Operands.push_back(Ops[NF]);
12673 Operands.push_back(VLOperand);
12674 if (IsMasked)
12675 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12676 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12677
12678 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12679 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12680 clang::CharUnits Align =
12681 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12682 llvm::Value *V;
12683 for (unsigned I = 0; I < NF; ++I) {
12684 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12685 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12686 }
12687 return V;
12688 }
12689 break;
12690case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tuma:
12691case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tuma:
12692case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tuma:
12693case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tuma:
12694 ID = Intrinsic::riscv_vluxseg3_mask;
12695 NF = 3;
12696 PolicyAttrs = 2;
12697IsMasked = true;
12698
12699 {
12700 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12701 SmallVector<llvm::Value*, 12> Operands;
12702
12703 // Please refer to comment under 'defvar NFList' in this file
12704 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12705 (!IsMasked && PolicyAttrs & RVV_VTA))
12706 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12707 else {
12708 if (IsMasked)
12709 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12710 else // Unmasked
12711 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12712 }
12713 unsigned PtrOperandIdx = IsMasked ?
12714 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12715 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12716 Value *PtrOperand = Ops[PtrOperandIdx];
12717 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12718 Value *VLOperand = Ops[PtrOperandIdx + 2];
12719 Operands.push_back(PtrOperand);
12720 Operands.push_back(IndexOperand);
12721 if (IsMasked)
12722 Operands.push_back(Ops[NF]);
12723 Operands.push_back(VLOperand);
12724 if (IsMasked)
12725 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12726 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12727
12728 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12729 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12730 clang::CharUnits Align =
12731 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12732 llvm::Value *V;
12733 for (unsigned I = 0; I < NF; ++I) {
12734 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12735 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12736 }
12737 return V;
12738 }
12739 break;
12740case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tama:
12741case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tama:
12742case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tama:
12743case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tama:
12744 ID = Intrinsic::riscv_vluxseg3_mask;
12745 NF = 3;
12746 PolicyAttrs = 3;
12747IsMasked = true;
12748
12749 {
12750 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12751 SmallVector<llvm::Value*, 12> Operands;
12752
12753 // Please refer to comment under 'defvar NFList' in this file
12754 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12755 (!IsMasked && PolicyAttrs & RVV_VTA))
12756 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12757 else {
12758 if (IsMasked)
12759 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12760 else // Unmasked
12761 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12762 }
12763 unsigned PtrOperandIdx = IsMasked ?
12764 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12765 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12766 Value *PtrOperand = Ops[PtrOperandIdx];
12767 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12768 Value *VLOperand = Ops[PtrOperandIdx + 2];
12769 Operands.push_back(PtrOperand);
12770 Operands.push_back(IndexOperand);
12771 if (IsMasked)
12772 Operands.push_back(Ops[NF]);
12773 Operands.push_back(VLOperand);
12774 if (IsMasked)
12775 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12776 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12777
12778 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12779 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12780 clang::CharUnits Align =
12781 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12782 llvm::Value *V;
12783 for (unsigned I = 0; I < NF; ++I) {
12784 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12785 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12786 }
12787 return V;
12788 }
12789 break;
12790case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tumu:
12791case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tumu:
12792case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tumu:
12793case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tumu:
12794 ID = Intrinsic::riscv_vluxseg3_mask;
12795 NF = 3;
12796 PolicyAttrs = 0;
12797IsMasked = true;
12798
12799 {
12800 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12801 SmallVector<llvm::Value*, 12> Operands;
12802
12803 // Please refer to comment under 'defvar NFList' in this file
12804 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12805 (!IsMasked && PolicyAttrs & RVV_VTA))
12806 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12807 else {
12808 if (IsMasked)
12809 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12810 else // Unmasked
12811 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12812 }
12813 unsigned PtrOperandIdx = IsMasked ?
12814 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12815 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12816 Value *PtrOperand = Ops[PtrOperandIdx];
12817 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12818 Value *VLOperand = Ops[PtrOperandIdx + 2];
12819 Operands.push_back(PtrOperand);
12820 Operands.push_back(IndexOperand);
12821 if (IsMasked)
12822 Operands.push_back(Ops[NF]);
12823 Operands.push_back(VLOperand);
12824 if (IsMasked)
12825 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12826 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12827
12828 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12829 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12830 clang::CharUnits Align =
12831 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12832 llvm::Value *V;
12833 for (unsigned I = 0; I < NF; ++I) {
12834 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12835 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12836 }
12837 return V;
12838 }
12839 break;
12840case RISCVVector::BI__builtin_rvv_vluxseg3ei8_v_tamu:
12841case RISCVVector::BI__builtin_rvv_vluxseg3ei16_v_tamu:
12842case RISCVVector::BI__builtin_rvv_vluxseg3ei32_v_tamu:
12843case RISCVVector::BI__builtin_rvv_vluxseg3ei64_v_tamu:
12844 ID = Intrinsic::riscv_vluxseg3_mask;
12845 NF = 3;
12846 PolicyAttrs = 1;
12847IsMasked = true;
12848
12849 {
12850 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12851 SmallVector<llvm::Value*, 12> Operands;
12852
12853 // Please refer to comment under 'defvar NFList' in this file
12854 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12855 (!IsMasked && PolicyAttrs & RVV_VTA))
12856 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12857 else {
12858 if (IsMasked)
12859 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12860 else // Unmasked
12861 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12862 }
12863 unsigned PtrOperandIdx = IsMasked ?
12864 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12865 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12866 Value *PtrOperand = Ops[PtrOperandIdx];
12867 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12868 Value *VLOperand = Ops[PtrOperandIdx + 2];
12869 Operands.push_back(PtrOperand);
12870 Operands.push_back(IndexOperand);
12871 if (IsMasked)
12872 Operands.push_back(Ops[NF]);
12873 Operands.push_back(VLOperand);
12874 if (IsMasked)
12875 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12876 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12877
12878 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12879 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12880 clang::CharUnits Align =
12881 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12882 llvm::Value *V;
12883 for (unsigned I = 0; I < NF; ++I) {
12884 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12885 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12886 }
12887 return V;
12888 }
12889 break;
12890case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tu:
12891case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tu:
12892case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tu:
12893case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tu:
12894 ID = Intrinsic::riscv_vluxseg4;
12895 NF = 4;
12896 PolicyAttrs = 2;
12897IsMasked = false;
12898
12899 {
12900 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12901 SmallVector<llvm::Value*, 12> Operands;
12902
12903 // Please refer to comment under 'defvar NFList' in this file
12904 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12905 (!IsMasked && PolicyAttrs & RVV_VTA))
12906 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12907 else {
12908 if (IsMasked)
12909 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12910 else // Unmasked
12911 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12912 }
12913 unsigned PtrOperandIdx = IsMasked ?
12914 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12915 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12916 Value *PtrOperand = Ops[PtrOperandIdx];
12917 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12918 Value *VLOperand = Ops[PtrOperandIdx + 2];
12919 Operands.push_back(PtrOperand);
12920 Operands.push_back(IndexOperand);
12921 if (IsMasked)
12922 Operands.push_back(Ops[NF]);
12923 Operands.push_back(VLOperand);
12924 if (IsMasked)
12925 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12926 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12927
12928 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12929 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12930 clang::CharUnits Align =
12931 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12932 llvm::Value *V;
12933 for (unsigned I = 0; I < NF; ++I) {
12934 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12935 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12936 }
12937 return V;
12938 }
12939 break;
12940case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_ta:
12941case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_ta:
12942case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_ta:
12943case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_ta:
12944 ID = Intrinsic::riscv_vluxseg4;
12945 NF = 4;
12946 PolicyAttrs = 3;
12947IsMasked = false;
12948
12949 {
12950 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
12951 SmallVector<llvm::Value*, 12> Operands;
12952
12953 // Please refer to comment under 'defvar NFList' in this file
12954 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
12955 (!IsMasked && PolicyAttrs & RVV_VTA))
12956 Operands.append(NF, llvm::PoisonValue::get(ResultType));
12957 else {
12958 if (IsMasked)
12959 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
12960 else // Unmasked
12961 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
12962 }
12963 unsigned PtrOperandIdx = IsMasked ?
12964 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
12965 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
12966 Value *PtrOperand = Ops[PtrOperandIdx];
12967 Value *IndexOperand = Ops[PtrOperandIdx + 1];
12968 Value *VLOperand = Ops[PtrOperandIdx + 2];
12969 Operands.push_back(PtrOperand);
12970 Operands.push_back(IndexOperand);
12971 if (IsMasked)
12972 Operands.push_back(Ops[NF]);
12973 Operands.push_back(VLOperand);
12974 if (IsMasked)
12975 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
12976 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
12977
12978 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
12979 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
12980 clang::CharUnits Align =
12981 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
12982 llvm::Value *V;
12983 for (unsigned I = 0; I < NF; ++I) {
12984 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
12985 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
12986 }
12987 return V;
12988 }
12989 break;
12990case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tuma:
12991case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tuma:
12992case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tuma:
12993case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tuma:
12994 ID = Intrinsic::riscv_vluxseg4_mask;
12995 NF = 4;
12996 PolicyAttrs = 2;
12997IsMasked = true;
12998
12999 {
13000 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13001 SmallVector<llvm::Value*, 12> Operands;
13002
13003 // Please refer to comment under 'defvar NFList' in this file
13004 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13005 (!IsMasked && PolicyAttrs & RVV_VTA))
13006 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13007 else {
13008 if (IsMasked)
13009 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13010 else // Unmasked
13011 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13012 }
13013 unsigned PtrOperandIdx = IsMasked ?
13014 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13015 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13016 Value *PtrOperand = Ops[PtrOperandIdx];
13017 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13018 Value *VLOperand = Ops[PtrOperandIdx + 2];
13019 Operands.push_back(PtrOperand);
13020 Operands.push_back(IndexOperand);
13021 if (IsMasked)
13022 Operands.push_back(Ops[NF]);
13023 Operands.push_back(VLOperand);
13024 if (IsMasked)
13025 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13026 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13027
13028 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13029 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13030 clang::CharUnits Align =
13031 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13032 llvm::Value *V;
13033 for (unsigned I = 0; I < NF; ++I) {
13034 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13035 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13036 }
13037 return V;
13038 }
13039 break;
13040case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tama:
13041case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tama:
13042case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tama:
13043case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tama:
13044 ID = Intrinsic::riscv_vluxseg4_mask;
13045 NF = 4;
13046 PolicyAttrs = 3;
13047IsMasked = true;
13048
13049 {
13050 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13051 SmallVector<llvm::Value*, 12> Operands;
13052
13053 // Please refer to comment under 'defvar NFList' in this file
13054 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13055 (!IsMasked && PolicyAttrs & RVV_VTA))
13056 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13057 else {
13058 if (IsMasked)
13059 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13060 else // Unmasked
13061 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13062 }
13063 unsigned PtrOperandIdx = IsMasked ?
13064 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13065 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13066 Value *PtrOperand = Ops[PtrOperandIdx];
13067 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13068 Value *VLOperand = Ops[PtrOperandIdx + 2];
13069 Operands.push_back(PtrOperand);
13070 Operands.push_back(IndexOperand);
13071 if (IsMasked)
13072 Operands.push_back(Ops[NF]);
13073 Operands.push_back(VLOperand);
13074 if (IsMasked)
13075 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13076 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13077
13078 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13079 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13080 clang::CharUnits Align =
13081 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13082 llvm::Value *V;
13083 for (unsigned I = 0; I < NF; ++I) {
13084 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13085 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13086 }
13087 return V;
13088 }
13089 break;
13090case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tumu:
13091case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tumu:
13092case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tumu:
13093case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tumu:
13094 ID = Intrinsic::riscv_vluxseg4_mask;
13095 NF = 4;
13096 PolicyAttrs = 0;
13097IsMasked = true;
13098
13099 {
13100 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13101 SmallVector<llvm::Value*, 12> Operands;
13102
13103 // Please refer to comment under 'defvar NFList' in this file
13104 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13105 (!IsMasked && PolicyAttrs & RVV_VTA))
13106 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13107 else {
13108 if (IsMasked)
13109 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13110 else // Unmasked
13111 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13112 }
13113 unsigned PtrOperandIdx = IsMasked ?
13114 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13115 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13116 Value *PtrOperand = Ops[PtrOperandIdx];
13117 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13118 Value *VLOperand = Ops[PtrOperandIdx + 2];
13119 Operands.push_back(PtrOperand);
13120 Operands.push_back(IndexOperand);
13121 if (IsMasked)
13122 Operands.push_back(Ops[NF]);
13123 Operands.push_back(VLOperand);
13124 if (IsMasked)
13125 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13126 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13127
13128 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13129 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13130 clang::CharUnits Align =
13131 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13132 llvm::Value *V;
13133 for (unsigned I = 0; I < NF; ++I) {
13134 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13135 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13136 }
13137 return V;
13138 }
13139 break;
13140case RISCVVector::BI__builtin_rvv_vluxseg4ei8_v_tamu:
13141case RISCVVector::BI__builtin_rvv_vluxseg4ei16_v_tamu:
13142case RISCVVector::BI__builtin_rvv_vluxseg4ei32_v_tamu:
13143case RISCVVector::BI__builtin_rvv_vluxseg4ei64_v_tamu:
13144 ID = Intrinsic::riscv_vluxseg4_mask;
13145 NF = 4;
13146 PolicyAttrs = 1;
13147IsMasked = true;
13148
13149 {
13150 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13151 SmallVector<llvm::Value*, 12> Operands;
13152
13153 // Please refer to comment under 'defvar NFList' in this file
13154 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13155 (!IsMasked && PolicyAttrs & RVV_VTA))
13156 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13157 else {
13158 if (IsMasked)
13159 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13160 else // Unmasked
13161 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13162 }
13163 unsigned PtrOperandIdx = IsMasked ?
13164 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13165 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13166 Value *PtrOperand = Ops[PtrOperandIdx];
13167 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13168 Value *VLOperand = Ops[PtrOperandIdx + 2];
13169 Operands.push_back(PtrOperand);
13170 Operands.push_back(IndexOperand);
13171 if (IsMasked)
13172 Operands.push_back(Ops[NF]);
13173 Operands.push_back(VLOperand);
13174 if (IsMasked)
13175 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13176 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13177
13178 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13179 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13180 clang::CharUnits Align =
13181 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13182 llvm::Value *V;
13183 for (unsigned I = 0; I < NF; ++I) {
13184 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13185 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13186 }
13187 return V;
13188 }
13189 break;
13190case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tu:
13191case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tu:
13192case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tu:
13193case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tu:
13194 ID = Intrinsic::riscv_vluxseg5;
13195 NF = 5;
13196 PolicyAttrs = 2;
13197IsMasked = false;
13198
13199 {
13200 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13201 SmallVector<llvm::Value*, 12> Operands;
13202
13203 // Please refer to comment under 'defvar NFList' in this file
13204 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13205 (!IsMasked && PolicyAttrs & RVV_VTA))
13206 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13207 else {
13208 if (IsMasked)
13209 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13210 else // Unmasked
13211 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13212 }
13213 unsigned PtrOperandIdx = IsMasked ?
13214 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13215 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13216 Value *PtrOperand = Ops[PtrOperandIdx];
13217 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13218 Value *VLOperand = Ops[PtrOperandIdx + 2];
13219 Operands.push_back(PtrOperand);
13220 Operands.push_back(IndexOperand);
13221 if (IsMasked)
13222 Operands.push_back(Ops[NF]);
13223 Operands.push_back(VLOperand);
13224 if (IsMasked)
13225 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13226 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13227
13228 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13229 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13230 clang::CharUnits Align =
13231 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13232 llvm::Value *V;
13233 for (unsigned I = 0; I < NF; ++I) {
13234 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13235 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13236 }
13237 return V;
13238 }
13239 break;
13240case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_ta:
13241case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_ta:
13242case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_ta:
13243case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_ta:
13244 ID = Intrinsic::riscv_vluxseg5;
13245 NF = 5;
13246 PolicyAttrs = 3;
13247IsMasked = false;
13248
13249 {
13250 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13251 SmallVector<llvm::Value*, 12> Operands;
13252
13253 // Please refer to comment under 'defvar NFList' in this file
13254 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13255 (!IsMasked && PolicyAttrs & RVV_VTA))
13256 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13257 else {
13258 if (IsMasked)
13259 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13260 else // Unmasked
13261 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13262 }
13263 unsigned PtrOperandIdx = IsMasked ?
13264 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13265 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13266 Value *PtrOperand = Ops[PtrOperandIdx];
13267 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13268 Value *VLOperand = Ops[PtrOperandIdx + 2];
13269 Operands.push_back(PtrOperand);
13270 Operands.push_back(IndexOperand);
13271 if (IsMasked)
13272 Operands.push_back(Ops[NF]);
13273 Operands.push_back(VLOperand);
13274 if (IsMasked)
13275 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13276 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13277
13278 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13279 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13280 clang::CharUnits Align =
13281 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13282 llvm::Value *V;
13283 for (unsigned I = 0; I < NF; ++I) {
13284 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13285 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13286 }
13287 return V;
13288 }
13289 break;
13290case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tuma:
13291case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tuma:
13292case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tuma:
13293case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tuma:
13294 ID = Intrinsic::riscv_vluxseg5_mask;
13295 NF = 5;
13296 PolicyAttrs = 2;
13297IsMasked = true;
13298
13299 {
13300 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13301 SmallVector<llvm::Value*, 12> Operands;
13302
13303 // Please refer to comment under 'defvar NFList' in this file
13304 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13305 (!IsMasked && PolicyAttrs & RVV_VTA))
13306 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13307 else {
13308 if (IsMasked)
13309 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13310 else // Unmasked
13311 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13312 }
13313 unsigned PtrOperandIdx = IsMasked ?
13314 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13315 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13316 Value *PtrOperand = Ops[PtrOperandIdx];
13317 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13318 Value *VLOperand = Ops[PtrOperandIdx + 2];
13319 Operands.push_back(PtrOperand);
13320 Operands.push_back(IndexOperand);
13321 if (IsMasked)
13322 Operands.push_back(Ops[NF]);
13323 Operands.push_back(VLOperand);
13324 if (IsMasked)
13325 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13326 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13327
13328 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13329 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13330 clang::CharUnits Align =
13331 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13332 llvm::Value *V;
13333 for (unsigned I = 0; I < NF; ++I) {
13334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13335 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13336 }
13337 return V;
13338 }
13339 break;
13340case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tama:
13341case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tama:
13342case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tama:
13343case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tama:
13344 ID = Intrinsic::riscv_vluxseg5_mask;
13345 NF = 5;
13346 PolicyAttrs = 3;
13347IsMasked = true;
13348
13349 {
13350 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13351 SmallVector<llvm::Value*, 12> Operands;
13352
13353 // Please refer to comment under 'defvar NFList' in this file
13354 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13355 (!IsMasked && PolicyAttrs & RVV_VTA))
13356 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13357 else {
13358 if (IsMasked)
13359 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13360 else // Unmasked
13361 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13362 }
13363 unsigned PtrOperandIdx = IsMasked ?
13364 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13365 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13366 Value *PtrOperand = Ops[PtrOperandIdx];
13367 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13368 Value *VLOperand = Ops[PtrOperandIdx + 2];
13369 Operands.push_back(PtrOperand);
13370 Operands.push_back(IndexOperand);
13371 if (IsMasked)
13372 Operands.push_back(Ops[NF]);
13373 Operands.push_back(VLOperand);
13374 if (IsMasked)
13375 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13376 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13377
13378 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13379 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13380 clang::CharUnits Align =
13381 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13382 llvm::Value *V;
13383 for (unsigned I = 0; I < NF; ++I) {
13384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13385 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13386 }
13387 return V;
13388 }
13389 break;
13390case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tumu:
13391case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tumu:
13392case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tumu:
13393case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tumu:
13394 ID = Intrinsic::riscv_vluxseg5_mask;
13395 NF = 5;
13396 PolicyAttrs = 0;
13397IsMasked = true;
13398
13399 {
13400 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13401 SmallVector<llvm::Value*, 12> Operands;
13402
13403 // Please refer to comment under 'defvar NFList' in this file
13404 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13405 (!IsMasked && PolicyAttrs & RVV_VTA))
13406 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13407 else {
13408 if (IsMasked)
13409 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13410 else // Unmasked
13411 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13412 }
13413 unsigned PtrOperandIdx = IsMasked ?
13414 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13415 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13416 Value *PtrOperand = Ops[PtrOperandIdx];
13417 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13418 Value *VLOperand = Ops[PtrOperandIdx + 2];
13419 Operands.push_back(PtrOperand);
13420 Operands.push_back(IndexOperand);
13421 if (IsMasked)
13422 Operands.push_back(Ops[NF]);
13423 Operands.push_back(VLOperand);
13424 if (IsMasked)
13425 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13426 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13427
13428 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13429 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13430 clang::CharUnits Align =
13431 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13432 llvm::Value *V;
13433 for (unsigned I = 0; I < NF; ++I) {
13434 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13435 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13436 }
13437 return V;
13438 }
13439 break;
13440case RISCVVector::BI__builtin_rvv_vluxseg5ei8_v_tamu:
13441case RISCVVector::BI__builtin_rvv_vluxseg5ei16_v_tamu:
13442case RISCVVector::BI__builtin_rvv_vluxseg5ei32_v_tamu:
13443case RISCVVector::BI__builtin_rvv_vluxseg5ei64_v_tamu:
13444 ID = Intrinsic::riscv_vluxseg5_mask;
13445 NF = 5;
13446 PolicyAttrs = 1;
13447IsMasked = true;
13448
13449 {
13450 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13451 SmallVector<llvm::Value*, 12> Operands;
13452
13453 // Please refer to comment under 'defvar NFList' in this file
13454 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13455 (!IsMasked && PolicyAttrs & RVV_VTA))
13456 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13457 else {
13458 if (IsMasked)
13459 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13460 else // Unmasked
13461 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13462 }
13463 unsigned PtrOperandIdx = IsMasked ?
13464 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13465 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13466 Value *PtrOperand = Ops[PtrOperandIdx];
13467 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13468 Value *VLOperand = Ops[PtrOperandIdx + 2];
13469 Operands.push_back(PtrOperand);
13470 Operands.push_back(IndexOperand);
13471 if (IsMasked)
13472 Operands.push_back(Ops[NF]);
13473 Operands.push_back(VLOperand);
13474 if (IsMasked)
13475 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13476 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13477
13478 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13479 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13480 clang::CharUnits Align =
13481 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13482 llvm::Value *V;
13483 for (unsigned I = 0; I < NF; ++I) {
13484 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13485 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13486 }
13487 return V;
13488 }
13489 break;
13490case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tu:
13491case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tu:
13492case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tu:
13493case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tu:
13494 ID = Intrinsic::riscv_vluxseg6;
13495 NF = 6;
13496 PolicyAttrs = 2;
13497IsMasked = false;
13498
13499 {
13500 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13501 SmallVector<llvm::Value*, 12> Operands;
13502
13503 // Please refer to comment under 'defvar NFList' in this file
13504 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13505 (!IsMasked && PolicyAttrs & RVV_VTA))
13506 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13507 else {
13508 if (IsMasked)
13509 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13510 else // Unmasked
13511 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13512 }
13513 unsigned PtrOperandIdx = IsMasked ?
13514 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13515 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13516 Value *PtrOperand = Ops[PtrOperandIdx];
13517 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13518 Value *VLOperand = Ops[PtrOperandIdx + 2];
13519 Operands.push_back(PtrOperand);
13520 Operands.push_back(IndexOperand);
13521 if (IsMasked)
13522 Operands.push_back(Ops[NF]);
13523 Operands.push_back(VLOperand);
13524 if (IsMasked)
13525 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13526 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13527
13528 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13529 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13530 clang::CharUnits Align =
13531 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13532 llvm::Value *V;
13533 for (unsigned I = 0; I < NF; ++I) {
13534 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13535 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13536 }
13537 return V;
13538 }
13539 break;
13540case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_ta:
13541case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_ta:
13542case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_ta:
13543case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_ta:
13544 ID = Intrinsic::riscv_vluxseg6;
13545 NF = 6;
13546 PolicyAttrs = 3;
13547IsMasked = false;
13548
13549 {
13550 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13551 SmallVector<llvm::Value*, 12> Operands;
13552
13553 // Please refer to comment under 'defvar NFList' in this file
13554 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13555 (!IsMasked && PolicyAttrs & RVV_VTA))
13556 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13557 else {
13558 if (IsMasked)
13559 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13560 else // Unmasked
13561 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13562 }
13563 unsigned PtrOperandIdx = IsMasked ?
13564 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13565 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13566 Value *PtrOperand = Ops[PtrOperandIdx];
13567 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13568 Value *VLOperand = Ops[PtrOperandIdx + 2];
13569 Operands.push_back(PtrOperand);
13570 Operands.push_back(IndexOperand);
13571 if (IsMasked)
13572 Operands.push_back(Ops[NF]);
13573 Operands.push_back(VLOperand);
13574 if (IsMasked)
13575 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13576 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13577
13578 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13579 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13580 clang::CharUnits Align =
13581 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13582 llvm::Value *V;
13583 for (unsigned I = 0; I < NF; ++I) {
13584 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13585 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13586 }
13587 return V;
13588 }
13589 break;
13590case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tuma:
13591case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tuma:
13592case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tuma:
13593case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tuma:
13594 ID = Intrinsic::riscv_vluxseg6_mask;
13595 NF = 6;
13596 PolicyAttrs = 2;
13597IsMasked = true;
13598
13599 {
13600 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13601 SmallVector<llvm::Value*, 12> Operands;
13602
13603 // Please refer to comment under 'defvar NFList' in this file
13604 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13605 (!IsMasked && PolicyAttrs & RVV_VTA))
13606 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13607 else {
13608 if (IsMasked)
13609 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13610 else // Unmasked
13611 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13612 }
13613 unsigned PtrOperandIdx = IsMasked ?
13614 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13615 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13616 Value *PtrOperand = Ops[PtrOperandIdx];
13617 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13618 Value *VLOperand = Ops[PtrOperandIdx + 2];
13619 Operands.push_back(PtrOperand);
13620 Operands.push_back(IndexOperand);
13621 if (IsMasked)
13622 Operands.push_back(Ops[NF]);
13623 Operands.push_back(VLOperand);
13624 if (IsMasked)
13625 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13626 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13627
13628 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13629 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13630 clang::CharUnits Align =
13631 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13632 llvm::Value *V;
13633 for (unsigned I = 0; I < NF; ++I) {
13634 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13635 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13636 }
13637 return V;
13638 }
13639 break;
13640case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tama:
13641case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tama:
13642case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tama:
13643case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tama:
13644 ID = Intrinsic::riscv_vluxseg6_mask;
13645 NF = 6;
13646 PolicyAttrs = 3;
13647IsMasked = true;
13648
13649 {
13650 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13651 SmallVector<llvm::Value*, 12> Operands;
13652
13653 // Please refer to comment under 'defvar NFList' in this file
13654 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13655 (!IsMasked && PolicyAttrs & RVV_VTA))
13656 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13657 else {
13658 if (IsMasked)
13659 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13660 else // Unmasked
13661 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13662 }
13663 unsigned PtrOperandIdx = IsMasked ?
13664 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13665 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13666 Value *PtrOperand = Ops[PtrOperandIdx];
13667 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13668 Value *VLOperand = Ops[PtrOperandIdx + 2];
13669 Operands.push_back(PtrOperand);
13670 Operands.push_back(IndexOperand);
13671 if (IsMasked)
13672 Operands.push_back(Ops[NF]);
13673 Operands.push_back(VLOperand);
13674 if (IsMasked)
13675 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13676 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13677
13678 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13679 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13680 clang::CharUnits Align =
13681 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13682 llvm::Value *V;
13683 for (unsigned I = 0; I < NF; ++I) {
13684 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13685 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13686 }
13687 return V;
13688 }
13689 break;
13690case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tumu:
13691case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tumu:
13692case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tumu:
13693case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tumu:
13694 ID = Intrinsic::riscv_vluxseg6_mask;
13695 NF = 6;
13696 PolicyAttrs = 0;
13697IsMasked = true;
13698
13699 {
13700 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13701 SmallVector<llvm::Value*, 12> Operands;
13702
13703 // Please refer to comment under 'defvar NFList' in this file
13704 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13705 (!IsMasked && PolicyAttrs & RVV_VTA))
13706 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13707 else {
13708 if (IsMasked)
13709 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13710 else // Unmasked
13711 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13712 }
13713 unsigned PtrOperandIdx = IsMasked ?
13714 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13715 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13716 Value *PtrOperand = Ops[PtrOperandIdx];
13717 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13718 Value *VLOperand = Ops[PtrOperandIdx + 2];
13719 Operands.push_back(PtrOperand);
13720 Operands.push_back(IndexOperand);
13721 if (IsMasked)
13722 Operands.push_back(Ops[NF]);
13723 Operands.push_back(VLOperand);
13724 if (IsMasked)
13725 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13726 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13727
13728 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13729 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13730 clang::CharUnits Align =
13731 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13732 llvm::Value *V;
13733 for (unsigned I = 0; I < NF; ++I) {
13734 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13735 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13736 }
13737 return V;
13738 }
13739 break;
13740case RISCVVector::BI__builtin_rvv_vluxseg6ei8_v_tamu:
13741case RISCVVector::BI__builtin_rvv_vluxseg6ei16_v_tamu:
13742case RISCVVector::BI__builtin_rvv_vluxseg6ei32_v_tamu:
13743case RISCVVector::BI__builtin_rvv_vluxseg6ei64_v_tamu:
13744 ID = Intrinsic::riscv_vluxseg6_mask;
13745 NF = 6;
13746 PolicyAttrs = 1;
13747IsMasked = true;
13748
13749 {
13750 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13751 SmallVector<llvm::Value*, 12> Operands;
13752
13753 // Please refer to comment under 'defvar NFList' in this file
13754 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13755 (!IsMasked && PolicyAttrs & RVV_VTA))
13756 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13757 else {
13758 if (IsMasked)
13759 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13760 else // Unmasked
13761 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13762 }
13763 unsigned PtrOperandIdx = IsMasked ?
13764 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13765 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13766 Value *PtrOperand = Ops[PtrOperandIdx];
13767 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13768 Value *VLOperand = Ops[PtrOperandIdx + 2];
13769 Operands.push_back(PtrOperand);
13770 Operands.push_back(IndexOperand);
13771 if (IsMasked)
13772 Operands.push_back(Ops[NF]);
13773 Operands.push_back(VLOperand);
13774 if (IsMasked)
13775 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13776 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13777
13778 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13779 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13780 clang::CharUnits Align =
13781 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13782 llvm::Value *V;
13783 for (unsigned I = 0; I < NF; ++I) {
13784 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13785 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13786 }
13787 return V;
13788 }
13789 break;
13790case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tu:
13791case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tu:
13792case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tu:
13793case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tu:
13794 ID = Intrinsic::riscv_vluxseg7;
13795 NF = 7;
13796 PolicyAttrs = 2;
13797IsMasked = false;
13798
13799 {
13800 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13801 SmallVector<llvm::Value*, 12> Operands;
13802
13803 // Please refer to comment under 'defvar NFList' in this file
13804 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13805 (!IsMasked && PolicyAttrs & RVV_VTA))
13806 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13807 else {
13808 if (IsMasked)
13809 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13810 else // Unmasked
13811 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13812 }
13813 unsigned PtrOperandIdx = IsMasked ?
13814 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13815 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13816 Value *PtrOperand = Ops[PtrOperandIdx];
13817 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13818 Value *VLOperand = Ops[PtrOperandIdx + 2];
13819 Operands.push_back(PtrOperand);
13820 Operands.push_back(IndexOperand);
13821 if (IsMasked)
13822 Operands.push_back(Ops[NF]);
13823 Operands.push_back(VLOperand);
13824 if (IsMasked)
13825 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13826 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13827
13828 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13829 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13830 clang::CharUnits Align =
13831 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13832 llvm::Value *V;
13833 for (unsigned I = 0; I < NF; ++I) {
13834 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13835 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13836 }
13837 return V;
13838 }
13839 break;
13840case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_ta:
13841case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_ta:
13842case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_ta:
13843case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_ta:
13844 ID = Intrinsic::riscv_vluxseg7;
13845 NF = 7;
13846 PolicyAttrs = 3;
13847IsMasked = false;
13848
13849 {
13850 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13851 SmallVector<llvm::Value*, 12> Operands;
13852
13853 // Please refer to comment under 'defvar NFList' in this file
13854 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13855 (!IsMasked && PolicyAttrs & RVV_VTA))
13856 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13857 else {
13858 if (IsMasked)
13859 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13860 else // Unmasked
13861 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13862 }
13863 unsigned PtrOperandIdx = IsMasked ?
13864 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13865 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13866 Value *PtrOperand = Ops[PtrOperandIdx];
13867 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13868 Value *VLOperand = Ops[PtrOperandIdx + 2];
13869 Operands.push_back(PtrOperand);
13870 Operands.push_back(IndexOperand);
13871 if (IsMasked)
13872 Operands.push_back(Ops[NF]);
13873 Operands.push_back(VLOperand);
13874 if (IsMasked)
13875 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13876 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13877
13878 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13879 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13880 clang::CharUnits Align =
13881 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13882 llvm::Value *V;
13883 for (unsigned I = 0; I < NF; ++I) {
13884 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13885 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13886 }
13887 return V;
13888 }
13889 break;
13890case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tuma:
13891case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tuma:
13892case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tuma:
13893case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tuma:
13894 ID = Intrinsic::riscv_vluxseg7_mask;
13895 NF = 7;
13896 PolicyAttrs = 2;
13897IsMasked = true;
13898
13899 {
13900 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13901 SmallVector<llvm::Value*, 12> Operands;
13902
13903 // Please refer to comment under 'defvar NFList' in this file
13904 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13905 (!IsMasked && PolicyAttrs & RVV_VTA))
13906 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13907 else {
13908 if (IsMasked)
13909 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13910 else // Unmasked
13911 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13912 }
13913 unsigned PtrOperandIdx = IsMasked ?
13914 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13915 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13916 Value *PtrOperand = Ops[PtrOperandIdx];
13917 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13918 Value *VLOperand = Ops[PtrOperandIdx + 2];
13919 Operands.push_back(PtrOperand);
13920 Operands.push_back(IndexOperand);
13921 if (IsMasked)
13922 Operands.push_back(Ops[NF]);
13923 Operands.push_back(VLOperand);
13924 if (IsMasked)
13925 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13926 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13927
13928 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13929 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13930 clang::CharUnits Align =
13931 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13932 llvm::Value *V;
13933 for (unsigned I = 0; I < NF; ++I) {
13934 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13935 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13936 }
13937 return V;
13938 }
13939 break;
13940case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tama:
13941case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tama:
13942case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tama:
13943case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tama:
13944 ID = Intrinsic::riscv_vluxseg7_mask;
13945 NF = 7;
13946 PolicyAttrs = 3;
13947IsMasked = true;
13948
13949 {
13950 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
13951 SmallVector<llvm::Value*, 12> Operands;
13952
13953 // Please refer to comment under 'defvar NFList' in this file
13954 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
13955 (!IsMasked && PolicyAttrs & RVV_VTA))
13956 Operands.append(NF, llvm::PoisonValue::get(ResultType));
13957 else {
13958 if (IsMasked)
13959 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
13960 else // Unmasked
13961 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
13962 }
13963 unsigned PtrOperandIdx = IsMasked ?
13964 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
13965 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
13966 Value *PtrOperand = Ops[PtrOperandIdx];
13967 Value *IndexOperand = Ops[PtrOperandIdx + 1];
13968 Value *VLOperand = Ops[PtrOperandIdx + 2];
13969 Operands.push_back(PtrOperand);
13970 Operands.push_back(IndexOperand);
13971 if (IsMasked)
13972 Operands.push_back(Ops[NF]);
13973 Operands.push_back(VLOperand);
13974 if (IsMasked)
13975 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
13976 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
13977
13978 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
13979 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
13980 clang::CharUnits Align =
13981 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
13982 llvm::Value *V;
13983 for (unsigned I = 0; I < NF; ++I) {
13984 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
13985 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
13986 }
13987 return V;
13988 }
13989 break;
13990case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tumu:
13991case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tumu:
13992case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tumu:
13993case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tumu:
13994 ID = Intrinsic::riscv_vluxseg7_mask;
13995 NF = 7;
13996 PolicyAttrs = 0;
13997IsMasked = true;
13998
13999 {
14000 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14001 SmallVector<llvm::Value*, 12> Operands;
14002
14003 // Please refer to comment under 'defvar NFList' in this file
14004 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14005 (!IsMasked && PolicyAttrs & RVV_VTA))
14006 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14007 else {
14008 if (IsMasked)
14009 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14010 else // Unmasked
14011 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14012 }
14013 unsigned PtrOperandIdx = IsMasked ?
14014 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14015 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14016 Value *PtrOperand = Ops[PtrOperandIdx];
14017 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14018 Value *VLOperand = Ops[PtrOperandIdx + 2];
14019 Operands.push_back(PtrOperand);
14020 Operands.push_back(IndexOperand);
14021 if (IsMasked)
14022 Operands.push_back(Ops[NF]);
14023 Operands.push_back(VLOperand);
14024 if (IsMasked)
14025 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14026 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14027
14028 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14029 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14030 clang::CharUnits Align =
14031 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14032 llvm::Value *V;
14033 for (unsigned I = 0; I < NF; ++I) {
14034 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14035 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14036 }
14037 return V;
14038 }
14039 break;
14040case RISCVVector::BI__builtin_rvv_vluxseg7ei8_v_tamu:
14041case RISCVVector::BI__builtin_rvv_vluxseg7ei16_v_tamu:
14042case RISCVVector::BI__builtin_rvv_vluxseg7ei32_v_tamu:
14043case RISCVVector::BI__builtin_rvv_vluxseg7ei64_v_tamu:
14044 ID = Intrinsic::riscv_vluxseg7_mask;
14045 NF = 7;
14046 PolicyAttrs = 1;
14047IsMasked = true;
14048
14049 {
14050 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14051 SmallVector<llvm::Value*, 12> Operands;
14052
14053 // Please refer to comment under 'defvar NFList' in this file
14054 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14055 (!IsMasked && PolicyAttrs & RVV_VTA))
14056 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14057 else {
14058 if (IsMasked)
14059 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14060 else // Unmasked
14061 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14062 }
14063 unsigned PtrOperandIdx = IsMasked ?
14064 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14065 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14066 Value *PtrOperand = Ops[PtrOperandIdx];
14067 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14068 Value *VLOperand = Ops[PtrOperandIdx + 2];
14069 Operands.push_back(PtrOperand);
14070 Operands.push_back(IndexOperand);
14071 if (IsMasked)
14072 Operands.push_back(Ops[NF]);
14073 Operands.push_back(VLOperand);
14074 if (IsMasked)
14075 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14076 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14077
14078 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14079 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14080 clang::CharUnits Align =
14081 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14082 llvm::Value *V;
14083 for (unsigned I = 0; I < NF; ++I) {
14084 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14085 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14086 }
14087 return V;
14088 }
14089 break;
14090case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tu:
14091case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tu:
14092case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tu:
14093case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tu:
14094 ID = Intrinsic::riscv_vluxseg8;
14095 NF = 8;
14096 PolicyAttrs = 2;
14097IsMasked = false;
14098
14099 {
14100 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14101 SmallVector<llvm::Value*, 12> Operands;
14102
14103 // Please refer to comment under 'defvar NFList' in this file
14104 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14105 (!IsMasked && PolicyAttrs & RVV_VTA))
14106 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14107 else {
14108 if (IsMasked)
14109 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14110 else // Unmasked
14111 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14112 }
14113 unsigned PtrOperandIdx = IsMasked ?
14114 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14115 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14116 Value *PtrOperand = Ops[PtrOperandIdx];
14117 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14118 Value *VLOperand = Ops[PtrOperandIdx + 2];
14119 Operands.push_back(PtrOperand);
14120 Operands.push_back(IndexOperand);
14121 if (IsMasked)
14122 Operands.push_back(Ops[NF]);
14123 Operands.push_back(VLOperand);
14124 if (IsMasked)
14125 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14126 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14127
14128 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14129 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14130 clang::CharUnits Align =
14131 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14132 llvm::Value *V;
14133 for (unsigned I = 0; I < NF; ++I) {
14134 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14135 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14136 }
14137 return V;
14138 }
14139 break;
14140case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_ta:
14141case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_ta:
14142case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_ta:
14143case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_ta:
14144 ID = Intrinsic::riscv_vluxseg8;
14145 NF = 8;
14146 PolicyAttrs = 3;
14147IsMasked = false;
14148
14149 {
14150 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14151 SmallVector<llvm::Value*, 12> Operands;
14152
14153 // Please refer to comment under 'defvar NFList' in this file
14154 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14155 (!IsMasked && PolicyAttrs & RVV_VTA))
14156 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14157 else {
14158 if (IsMasked)
14159 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14160 else // Unmasked
14161 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14162 }
14163 unsigned PtrOperandIdx = IsMasked ?
14164 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14165 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14166 Value *PtrOperand = Ops[PtrOperandIdx];
14167 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14168 Value *VLOperand = Ops[PtrOperandIdx + 2];
14169 Operands.push_back(PtrOperand);
14170 Operands.push_back(IndexOperand);
14171 if (IsMasked)
14172 Operands.push_back(Ops[NF]);
14173 Operands.push_back(VLOperand);
14174 if (IsMasked)
14175 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14176 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14177
14178 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14179 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14180 clang::CharUnits Align =
14181 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14182 llvm::Value *V;
14183 for (unsigned I = 0; I < NF; ++I) {
14184 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14185 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14186 }
14187 return V;
14188 }
14189 break;
14190case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tuma:
14191case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tuma:
14192case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tuma:
14193case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tuma:
14194 ID = Intrinsic::riscv_vluxseg8_mask;
14195 NF = 8;
14196 PolicyAttrs = 2;
14197IsMasked = true;
14198
14199 {
14200 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14201 SmallVector<llvm::Value*, 12> Operands;
14202
14203 // Please refer to comment under 'defvar NFList' in this file
14204 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14205 (!IsMasked && PolicyAttrs & RVV_VTA))
14206 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14207 else {
14208 if (IsMasked)
14209 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14210 else // Unmasked
14211 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14212 }
14213 unsigned PtrOperandIdx = IsMasked ?
14214 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14215 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14216 Value *PtrOperand = Ops[PtrOperandIdx];
14217 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14218 Value *VLOperand = Ops[PtrOperandIdx + 2];
14219 Operands.push_back(PtrOperand);
14220 Operands.push_back(IndexOperand);
14221 if (IsMasked)
14222 Operands.push_back(Ops[NF]);
14223 Operands.push_back(VLOperand);
14224 if (IsMasked)
14225 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14226 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14227
14228 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14229 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14230 clang::CharUnits Align =
14231 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14232 llvm::Value *V;
14233 for (unsigned I = 0; I < NF; ++I) {
14234 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14235 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14236 }
14237 return V;
14238 }
14239 break;
14240case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tama:
14241case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tama:
14242case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tama:
14243case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tama:
14244 ID = Intrinsic::riscv_vluxseg8_mask;
14245 NF = 8;
14246 PolicyAttrs = 3;
14247IsMasked = true;
14248
14249 {
14250 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14251 SmallVector<llvm::Value*, 12> Operands;
14252
14253 // Please refer to comment under 'defvar NFList' in this file
14254 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14255 (!IsMasked && PolicyAttrs & RVV_VTA))
14256 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14257 else {
14258 if (IsMasked)
14259 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14260 else // Unmasked
14261 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14262 }
14263 unsigned PtrOperandIdx = IsMasked ?
14264 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14265 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14266 Value *PtrOperand = Ops[PtrOperandIdx];
14267 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14268 Value *VLOperand = Ops[PtrOperandIdx + 2];
14269 Operands.push_back(PtrOperand);
14270 Operands.push_back(IndexOperand);
14271 if (IsMasked)
14272 Operands.push_back(Ops[NF]);
14273 Operands.push_back(VLOperand);
14274 if (IsMasked)
14275 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14276 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14277
14278 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14279 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14280 clang::CharUnits Align =
14281 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14282 llvm::Value *V;
14283 for (unsigned I = 0; I < NF; ++I) {
14284 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14285 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14286 }
14287 return V;
14288 }
14289 break;
14290case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tumu:
14291case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tumu:
14292case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tumu:
14293case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tumu:
14294 ID = Intrinsic::riscv_vluxseg8_mask;
14295 NF = 8;
14296 PolicyAttrs = 0;
14297IsMasked = true;
14298
14299 {
14300 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14301 SmallVector<llvm::Value*, 12> Operands;
14302
14303 // Please refer to comment under 'defvar NFList' in this file
14304 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14305 (!IsMasked && PolicyAttrs & RVV_VTA))
14306 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14307 else {
14308 if (IsMasked)
14309 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14310 else // Unmasked
14311 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14312 }
14313 unsigned PtrOperandIdx = IsMasked ?
14314 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14315 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14316 Value *PtrOperand = Ops[PtrOperandIdx];
14317 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14318 Value *VLOperand = Ops[PtrOperandIdx + 2];
14319 Operands.push_back(PtrOperand);
14320 Operands.push_back(IndexOperand);
14321 if (IsMasked)
14322 Operands.push_back(Ops[NF]);
14323 Operands.push_back(VLOperand);
14324 if (IsMasked)
14325 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14326 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14327
14328 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14329 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14330 clang::CharUnits Align =
14331 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14332 llvm::Value *V;
14333 for (unsigned I = 0; I < NF; ++I) {
14334 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14335 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14336 }
14337 return V;
14338 }
14339 break;
14340case RISCVVector::BI__builtin_rvv_vluxseg8ei8_v_tamu:
14341case RISCVVector::BI__builtin_rvv_vluxseg8ei16_v_tamu:
14342case RISCVVector::BI__builtin_rvv_vluxseg8ei32_v_tamu:
14343case RISCVVector::BI__builtin_rvv_vluxseg8ei64_v_tamu:
14344 ID = Intrinsic::riscv_vluxseg8_mask;
14345 NF = 8;
14346 PolicyAttrs = 1;
14347IsMasked = true;
14348
14349 {
14350 ResultType = ConvertType(E->getArg(0)->getType()->getPointeeType());
14351 SmallVector<llvm::Value*, 12> Operands;
14352
14353 // Please refer to comment under 'defvar NFList' in this file
14354 if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
14355 (!IsMasked && PolicyAttrs & RVV_VTA))
14356 Operands.append(NF, llvm::PoisonValue::get(ResultType));
14357 else {
14358 if (IsMasked)
14359 Operands.append(Ops.begin() + NF + 1, Ops.begin() + 2 * NF + 1);
14360 else // Unmasked
14361 Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
14362 }
14363 unsigned PtrOperandIdx = IsMasked ?
14364 ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
14365 (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
14366 Value *PtrOperand = Ops[PtrOperandIdx];
14367 Value *IndexOperand = Ops[PtrOperandIdx + 1];
14368 Value *VLOperand = Ops[PtrOperandIdx + 2];
14369 Operands.push_back(PtrOperand);
14370 Operands.push_back(IndexOperand);
14371 if (IsMasked)
14372 Operands.push_back(Ops[NF]);
14373 Operands.push_back(VLOperand);
14374 if (IsMasked)
14375 Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14376 IntrinsicTypes = {ResultType, IndexOperand->getType(), Ops.back()->getType()};
14377
14378 llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
14379 llvm::Value *LoadValue = Builder.CreateCall(F, Operands, "");
14380 clang::CharUnits Align =
14381 CGM.getNaturalPointeeTypeAlignment(E->getArg(0)->getType());
14382 llvm::Value *V;
14383 for (unsigned I = 0; I < NF; ++I) {
14384 llvm::Value *Val = Builder.CreateExtractValue(LoadValue, {I});
14385 V = Builder.CreateStore(Val, Address(Ops[I], Val->getType(), Align));
14386 }
14387 return V;
14388 }
14389 break;
14390case RISCVVector::BI__builtin_rvv_vmacc_vv_tu:
14391case RISCVVector::BI__builtin_rvv_vmacc_vx_tu:
14392 ID = Intrinsic::riscv_vmacc;
14393 PolicyAttrs = 2;
14394 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14395 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14396 break;
14397case RISCVVector::BI__builtin_rvv_vmacc_vv_ta:
14398case RISCVVector::BI__builtin_rvv_vmacc_vx_ta:
14399 ID = Intrinsic::riscv_vmacc;
14400 PolicyAttrs = 3;
14401 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14402 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14403 break;
14404case RISCVVector::BI__builtin_rvv_vmacc_vv_tuma:
14405case RISCVVector::BI__builtin_rvv_vmacc_vx_tuma:
14406 ID = Intrinsic::riscv_vmacc_mask;
14407 PolicyAttrs = 2;
14408 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14409 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14410 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14411 break;
14412case RISCVVector::BI__builtin_rvv_vmacc_vv_tama:
14413case RISCVVector::BI__builtin_rvv_vmacc_vx_tama:
14414 ID = Intrinsic::riscv_vmacc_mask;
14415 PolicyAttrs = 3;
14416 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14417 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14418 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14419 break;
14420case RISCVVector::BI__builtin_rvv_vmacc_vv_tumu:
14421case RISCVVector::BI__builtin_rvv_vmacc_vx_tumu:
14422 ID = Intrinsic::riscv_vmacc_mask;
14423 PolicyAttrs = 0;
14424 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14425 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14426 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14427 break;
14428case RISCVVector::BI__builtin_rvv_vmacc_vv_tamu:
14429case RISCVVector::BI__builtin_rvv_vmacc_vx_tamu:
14430 ID = Intrinsic::riscv_vmacc_mask;
14431 PolicyAttrs = 1;
14432 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14433 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14434 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14435 break;
14436case RISCVVector::BI__builtin_rvv_vmadc_vv:
14437case RISCVVector::BI__builtin_rvv_vmadc_vx:
14438 ID = Intrinsic::riscv_vmadc;
14439 PolicyAttrs = 3;
14440 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14441 break;
14442case RISCVVector::BI__builtin_rvv_vmadc_vvm:
14443case RISCVVector::BI__builtin_rvv_vmadc_vxm:
14444 ID = Intrinsic::riscv_vmadc_carry_in;
14445 PolicyAttrs = 3;
14446 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14447 break;
14448case RISCVVector::BI__builtin_rvv_vmadd_vv_tu:
14449case RISCVVector::BI__builtin_rvv_vmadd_vx_tu:
14450 ID = Intrinsic::riscv_vmadd;
14451 PolicyAttrs = 2;
14452 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14453 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14454 break;
14455case RISCVVector::BI__builtin_rvv_vmadd_vv_ta:
14456case RISCVVector::BI__builtin_rvv_vmadd_vx_ta:
14457 ID = Intrinsic::riscv_vmadd;
14458 PolicyAttrs = 3;
14459 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14460 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14461 break;
14462case RISCVVector::BI__builtin_rvv_vmadd_vv_tuma:
14463case RISCVVector::BI__builtin_rvv_vmadd_vx_tuma:
14464 ID = Intrinsic::riscv_vmadd_mask;
14465 PolicyAttrs = 2;
14466 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14467 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14468 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14469 break;
14470case RISCVVector::BI__builtin_rvv_vmadd_vv_tama:
14471case RISCVVector::BI__builtin_rvv_vmadd_vx_tama:
14472 ID = Intrinsic::riscv_vmadd_mask;
14473 PolicyAttrs = 3;
14474 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14475 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14476 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14477 break;
14478case RISCVVector::BI__builtin_rvv_vmadd_vv_tumu:
14479case RISCVVector::BI__builtin_rvv_vmadd_vx_tumu:
14480 ID = Intrinsic::riscv_vmadd_mask;
14481 PolicyAttrs = 0;
14482 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14483 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14484 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14485 break;
14486case RISCVVector::BI__builtin_rvv_vmadd_vv_tamu:
14487case RISCVVector::BI__builtin_rvv_vmadd_vx_tamu:
14488 ID = Intrinsic::riscv_vmadd_mask;
14489 PolicyAttrs = 1;
14490 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14491 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14492 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
14493 break;
14494case RISCVVector::BI__builtin_rvv_vmmv_m:
14495 ID = Intrinsic::riscv_vmand;
14496 PolicyAttrs = 3;
14497IsMasked = false;
14498
14499 {
14500 // op1, vl
14501 IntrinsicTypes = {ResultType,
14502 Ops[1]->getType()};
14503 Ops.insert(Ops.begin() + 1, Ops[0]);
14504 break;
14505 }
14506 break;
14507case RISCVVector::BI__builtin_rvv_vmand_mm:
14508 ID = Intrinsic::riscv_vmand;
14509 PolicyAttrs = 3;
14510 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14511 break;
14512case RISCVVector::BI__builtin_rvv_vmandn_mm:
14513 ID = Intrinsic::riscv_vmandn;
14514 PolicyAttrs = 3;
14515 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14516 break;
14517case RISCVVector::BI__builtin_rvv_vmax_vv_tu:
14518case RISCVVector::BI__builtin_rvv_vmax_vx_tu:
14519 ID = Intrinsic::riscv_vmax;
14520 PolicyAttrs = 2;
14521 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14522 break;
14523case RISCVVector::BI__builtin_rvv_vmax_vv_ta:
14524case RISCVVector::BI__builtin_rvv_vmax_vx_ta:
14525 ID = Intrinsic::riscv_vmax;
14526 PolicyAttrs = 3;
14527 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14528 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14529 break;
14530case RISCVVector::BI__builtin_rvv_vmax_vv_tuma:
14531case RISCVVector::BI__builtin_rvv_vmax_vx_tuma:
14532 ID = Intrinsic::riscv_vmax_mask;
14533 PolicyAttrs = 2;
14534 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14535 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14536 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14537 break;
14538case RISCVVector::BI__builtin_rvv_vmax_vv_tama:
14539case RISCVVector::BI__builtin_rvv_vmax_vx_tama:
14540 ID = Intrinsic::riscv_vmax_mask;
14541 PolicyAttrs = 3;
14542 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14543 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14544 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14545 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14546 break;
14547case RISCVVector::BI__builtin_rvv_vmax_vv_tumu:
14548case RISCVVector::BI__builtin_rvv_vmax_vx_tumu:
14549 ID = Intrinsic::riscv_vmax_mask;
14550 PolicyAttrs = 0;
14551 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14552 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14553 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14554 break;
14555case RISCVVector::BI__builtin_rvv_vmax_vv_tamu:
14556case RISCVVector::BI__builtin_rvv_vmax_vx_tamu:
14557 ID = Intrinsic::riscv_vmax_mask;
14558 PolicyAttrs = 1;
14559 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14560 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14561 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14562 break;
14563case RISCVVector::BI__builtin_rvv_vmaxu_vv_tu:
14564case RISCVVector::BI__builtin_rvv_vmaxu_vx_tu:
14565 ID = Intrinsic::riscv_vmaxu;
14566 PolicyAttrs = 2;
14567 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14568 break;
14569case RISCVVector::BI__builtin_rvv_vmaxu_vv_ta:
14570case RISCVVector::BI__builtin_rvv_vmaxu_vx_ta:
14571 ID = Intrinsic::riscv_vmaxu;
14572 PolicyAttrs = 3;
14573 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14574 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14575 break;
14576case RISCVVector::BI__builtin_rvv_vmaxu_vv_tuma:
14577case RISCVVector::BI__builtin_rvv_vmaxu_vx_tuma:
14578 ID = Intrinsic::riscv_vmaxu_mask;
14579 PolicyAttrs = 2;
14580 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14581 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14582 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14583 break;
14584case RISCVVector::BI__builtin_rvv_vmaxu_vv_tama:
14585case RISCVVector::BI__builtin_rvv_vmaxu_vx_tama:
14586 ID = Intrinsic::riscv_vmaxu_mask;
14587 PolicyAttrs = 3;
14588 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14589 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14590 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14591 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14592 break;
14593case RISCVVector::BI__builtin_rvv_vmaxu_vv_tumu:
14594case RISCVVector::BI__builtin_rvv_vmaxu_vx_tumu:
14595 ID = Intrinsic::riscv_vmaxu_mask;
14596 PolicyAttrs = 0;
14597 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14598 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14599 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14600 break;
14601case RISCVVector::BI__builtin_rvv_vmaxu_vv_tamu:
14602case RISCVVector::BI__builtin_rvv_vmaxu_vx_tamu:
14603 ID = Intrinsic::riscv_vmaxu_mask;
14604 PolicyAttrs = 1;
14605 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14606 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14607 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14608 break;
14609case RISCVVector::BI__builtin_rvv_vmclr_m:
14610 ID = Intrinsic::riscv_vmclr;
14611 PolicyAttrs = 3;
14612 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14613 break;
14614case RISCVVector::BI__builtin_rvv_vmerge_vvm_tu:
14615case RISCVVector::BI__builtin_rvv_vmerge_vxm_tu:
14616 ID = Intrinsic::riscv_vmerge;
14617 PolicyAttrs = 2;
14618IsMasked = false;
14619
14620 // insert poison passthru
14621 if (PolicyAttrs & RVV_VTA)
14622 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14623 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14624 break;
14625case RISCVVector::BI__builtin_rvv_vmerge_vvm_ta:
14626case RISCVVector::BI__builtin_rvv_vmerge_vxm_ta:
14627 ID = Intrinsic::riscv_vmerge;
14628 PolicyAttrs = 3;
14629IsMasked = false;
14630
14631 // insert poison passthru
14632 if (PolicyAttrs & RVV_VTA)
14633 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14634 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14635 break;
14636case RISCVVector::BI__builtin_rvv_vmfeq_vv:
14637case RISCVVector::BI__builtin_rvv_vmfeq_vf:
14638 ID = Intrinsic::riscv_vmfeq;
14639 PolicyAttrs = 3;
14640 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14641 break;
14642case RISCVVector::BI__builtin_rvv_vmfeq_vv_tama:
14643case RISCVVector::BI__builtin_rvv_vmfeq_vv_ma:
14644case RISCVVector::BI__builtin_rvv_vmfeq_vf_tama:
14645case RISCVVector::BI__builtin_rvv_vmfeq_vf_ma:
14646 ID = Intrinsic::riscv_vmfeq_mask;
14647 PolicyAttrs = 3;
14648 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14649 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14650 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14651 break;
14652case RISCVVector::BI__builtin_rvv_vmfeq_vv_mu:
14653case RISCVVector::BI__builtin_rvv_vmfeq_vf_mu:
14654 ID = Intrinsic::riscv_vmfeq_mask;
14655 PolicyAttrs = 1;
14656 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14657 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14658 break;
14659case RISCVVector::BI__builtin_rvv_vmfge_vv:
14660case RISCVVector::BI__builtin_rvv_vmfge_vf:
14661 ID = Intrinsic::riscv_vmfge;
14662 PolicyAttrs = 3;
14663 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14664 break;
14665case RISCVVector::BI__builtin_rvv_vmfge_vv_tama:
14666case RISCVVector::BI__builtin_rvv_vmfge_vv_ma:
14667case RISCVVector::BI__builtin_rvv_vmfge_vf_tama:
14668case RISCVVector::BI__builtin_rvv_vmfge_vf_ma:
14669 ID = Intrinsic::riscv_vmfge_mask;
14670 PolicyAttrs = 3;
14671 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14672 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14673 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14674 break;
14675case RISCVVector::BI__builtin_rvv_vmfge_vv_mu:
14676case RISCVVector::BI__builtin_rvv_vmfge_vf_mu:
14677 ID = Intrinsic::riscv_vmfge_mask;
14678 PolicyAttrs = 1;
14679 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14680 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14681 break;
14682case RISCVVector::BI__builtin_rvv_vmfgt_vv:
14683case RISCVVector::BI__builtin_rvv_vmfgt_vf:
14684 ID = Intrinsic::riscv_vmfgt;
14685 PolicyAttrs = 3;
14686 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14687 break;
14688case RISCVVector::BI__builtin_rvv_vmfgt_vv_tama:
14689case RISCVVector::BI__builtin_rvv_vmfgt_vv_ma:
14690case RISCVVector::BI__builtin_rvv_vmfgt_vf_tama:
14691case RISCVVector::BI__builtin_rvv_vmfgt_vf_ma:
14692 ID = Intrinsic::riscv_vmfgt_mask;
14693 PolicyAttrs = 3;
14694 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14695 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14696 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14697 break;
14698case RISCVVector::BI__builtin_rvv_vmfgt_vv_mu:
14699case RISCVVector::BI__builtin_rvv_vmfgt_vf_mu:
14700 ID = Intrinsic::riscv_vmfgt_mask;
14701 PolicyAttrs = 1;
14702 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14703 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14704 break;
14705case RISCVVector::BI__builtin_rvv_vmfle_vv:
14706case RISCVVector::BI__builtin_rvv_vmfle_vf:
14707 ID = Intrinsic::riscv_vmfle;
14708 PolicyAttrs = 3;
14709 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14710 break;
14711case RISCVVector::BI__builtin_rvv_vmfle_vv_tama:
14712case RISCVVector::BI__builtin_rvv_vmfle_vv_ma:
14713case RISCVVector::BI__builtin_rvv_vmfle_vf_tama:
14714case RISCVVector::BI__builtin_rvv_vmfle_vf_ma:
14715 ID = Intrinsic::riscv_vmfle_mask;
14716 PolicyAttrs = 3;
14717 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14718 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14719 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14720 break;
14721case RISCVVector::BI__builtin_rvv_vmfle_vv_mu:
14722case RISCVVector::BI__builtin_rvv_vmfle_vf_mu:
14723 ID = Intrinsic::riscv_vmfle_mask;
14724 PolicyAttrs = 1;
14725 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14726 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14727 break;
14728case RISCVVector::BI__builtin_rvv_vmflt_vv:
14729case RISCVVector::BI__builtin_rvv_vmflt_vf:
14730 ID = Intrinsic::riscv_vmflt;
14731 PolicyAttrs = 3;
14732 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14733 break;
14734case RISCVVector::BI__builtin_rvv_vmflt_vv_tama:
14735case RISCVVector::BI__builtin_rvv_vmflt_vv_ma:
14736case RISCVVector::BI__builtin_rvv_vmflt_vf_tama:
14737case RISCVVector::BI__builtin_rvv_vmflt_vf_ma:
14738 ID = Intrinsic::riscv_vmflt_mask;
14739 PolicyAttrs = 3;
14740 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14741 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14742 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14743 break;
14744case RISCVVector::BI__builtin_rvv_vmflt_vv_mu:
14745case RISCVVector::BI__builtin_rvv_vmflt_vf_mu:
14746 ID = Intrinsic::riscv_vmflt_mask;
14747 PolicyAttrs = 1;
14748 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14749 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14750 break;
14751case RISCVVector::BI__builtin_rvv_vmfne_vv:
14752case RISCVVector::BI__builtin_rvv_vmfne_vf:
14753 ID = Intrinsic::riscv_vmfne;
14754 PolicyAttrs = 3;
14755 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14756 break;
14757case RISCVVector::BI__builtin_rvv_vmfne_vv_tama:
14758case RISCVVector::BI__builtin_rvv_vmfne_vv_ma:
14759case RISCVVector::BI__builtin_rvv_vmfne_vf_tama:
14760case RISCVVector::BI__builtin_rvv_vmfne_vf_ma:
14761 ID = Intrinsic::riscv_vmfne_mask;
14762 PolicyAttrs = 3;
14763 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14764 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14765 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14766 break;
14767case RISCVVector::BI__builtin_rvv_vmfne_vv_mu:
14768case RISCVVector::BI__builtin_rvv_vmfne_vf_mu:
14769 ID = Intrinsic::riscv_vmfne_mask;
14770 PolicyAttrs = 1;
14771 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14772 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14773 break;
14774case RISCVVector::BI__builtin_rvv_vmin_vv_tu:
14775case RISCVVector::BI__builtin_rvv_vmin_vx_tu:
14776 ID = Intrinsic::riscv_vmin;
14777 PolicyAttrs = 2;
14778 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14779 break;
14780case RISCVVector::BI__builtin_rvv_vmin_vv_ta:
14781case RISCVVector::BI__builtin_rvv_vmin_vx_ta:
14782 ID = Intrinsic::riscv_vmin;
14783 PolicyAttrs = 3;
14784 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14785 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14786 break;
14787case RISCVVector::BI__builtin_rvv_vmin_vv_tuma:
14788case RISCVVector::BI__builtin_rvv_vmin_vx_tuma:
14789 ID = Intrinsic::riscv_vmin_mask;
14790 PolicyAttrs = 2;
14791 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14792 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14793 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14794 break;
14795case RISCVVector::BI__builtin_rvv_vmin_vv_tama:
14796case RISCVVector::BI__builtin_rvv_vmin_vx_tama:
14797 ID = Intrinsic::riscv_vmin_mask;
14798 PolicyAttrs = 3;
14799 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14800 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14801 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14802 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14803 break;
14804case RISCVVector::BI__builtin_rvv_vmin_vv_tumu:
14805case RISCVVector::BI__builtin_rvv_vmin_vx_tumu:
14806 ID = Intrinsic::riscv_vmin_mask;
14807 PolicyAttrs = 0;
14808 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14809 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14810 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14811 break;
14812case RISCVVector::BI__builtin_rvv_vmin_vv_tamu:
14813case RISCVVector::BI__builtin_rvv_vmin_vx_tamu:
14814 ID = Intrinsic::riscv_vmin_mask;
14815 PolicyAttrs = 1;
14816 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14817 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14818 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14819 break;
14820case RISCVVector::BI__builtin_rvv_vminu_vv_tu:
14821case RISCVVector::BI__builtin_rvv_vminu_vx_tu:
14822 ID = Intrinsic::riscv_vminu;
14823 PolicyAttrs = 2;
14824 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14825 break;
14826case RISCVVector::BI__builtin_rvv_vminu_vv_ta:
14827case RISCVVector::BI__builtin_rvv_vminu_vx_ta:
14828 ID = Intrinsic::riscv_vminu;
14829 PolicyAttrs = 3;
14830 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14831 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14832 break;
14833case RISCVVector::BI__builtin_rvv_vminu_vv_tuma:
14834case RISCVVector::BI__builtin_rvv_vminu_vx_tuma:
14835 ID = Intrinsic::riscv_vminu_mask;
14836 PolicyAttrs = 2;
14837 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14838 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14839 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14840 break;
14841case RISCVVector::BI__builtin_rvv_vminu_vv_tama:
14842case RISCVVector::BI__builtin_rvv_vminu_vx_tama:
14843 ID = Intrinsic::riscv_vminu_mask;
14844 PolicyAttrs = 3;
14845 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14846 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14847 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14848 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14849 break;
14850case RISCVVector::BI__builtin_rvv_vminu_vv_tumu:
14851case RISCVVector::BI__builtin_rvv_vminu_vx_tumu:
14852 ID = Intrinsic::riscv_vminu_mask;
14853 PolicyAttrs = 0;
14854 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14855 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14856 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14857 break;
14858case RISCVVector::BI__builtin_rvv_vminu_vv_tamu:
14859case RISCVVector::BI__builtin_rvv_vminu_vx_tamu:
14860 ID = Intrinsic::riscv_vminu_mask;
14861 PolicyAttrs = 1;
14862 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14863 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
14864 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
14865 break;
14866case RISCVVector::BI__builtin_rvv_vmnot_m:
14867 ID = Intrinsic::riscv_vmnand;
14868 PolicyAttrs = 3;
14869IsMasked = false;
14870
14871 {
14872 // op1, vl
14873 IntrinsicTypes = {ResultType,
14874 Ops[1]->getType()};
14875 Ops.insert(Ops.begin() + 1, Ops[0]);
14876 break;
14877 }
14878 break;
14879case RISCVVector::BI__builtin_rvv_vmnand_mm:
14880 ID = Intrinsic::riscv_vmnand;
14881 PolicyAttrs = 3;
14882 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14883 break;
14884case RISCVVector::BI__builtin_rvv_vmnor_mm:
14885 ID = Intrinsic::riscv_vmnor;
14886 PolicyAttrs = 3;
14887 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14888 break;
14889case RISCVVector::BI__builtin_rvv_vmor_mm:
14890 ID = Intrinsic::riscv_vmor;
14891 PolicyAttrs = 3;
14892 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14893 break;
14894case RISCVVector::BI__builtin_rvv_vmorn_mm:
14895 ID = Intrinsic::riscv_vmorn;
14896 PolicyAttrs = 3;
14897 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14898 break;
14899case RISCVVector::BI__builtin_rvv_vmsbc_vv:
14900case RISCVVector::BI__builtin_rvv_vmsbc_vx:
14901 ID = Intrinsic::riscv_vmsbc;
14902 PolicyAttrs = 3;
14903 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14904 break;
14905case RISCVVector::BI__builtin_rvv_vmsbc_vvm:
14906case RISCVVector::BI__builtin_rvv_vmsbc_vxm:
14907 ID = Intrinsic::riscv_vmsbc_borrow_in;
14908 PolicyAttrs = 3;
14909 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14910 break;
14911case RISCVVector::BI__builtin_rvv_vmsbf_m:
14912 ID = Intrinsic::riscv_vmsbf;
14913 PolicyAttrs = 3;
14914 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14915 break;
14916case RISCVVector::BI__builtin_rvv_vmsbf_m_tama:
14917case RISCVVector::BI__builtin_rvv_vmsbf_m_ma:
14918 ID = Intrinsic::riscv_vmsbf_mask;
14919 PolicyAttrs = 3;
14920 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14921 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14922 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14923 break;
14924case RISCVVector::BI__builtin_rvv_vmsbf_m_mu:
14925 ID = Intrinsic::riscv_vmsbf_mask;
14926 PolicyAttrs = 1;
14927 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14928 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14929 break;
14930case RISCVVector::BI__builtin_rvv_vmseq_vv:
14931case RISCVVector::BI__builtin_rvv_vmseq_vx:
14932 ID = Intrinsic::riscv_vmseq;
14933 PolicyAttrs = 3;
14934 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14935 break;
14936case RISCVVector::BI__builtin_rvv_vmseq_vv_tama:
14937case RISCVVector::BI__builtin_rvv_vmseq_vv_ma:
14938case RISCVVector::BI__builtin_rvv_vmseq_vx_tama:
14939case RISCVVector::BI__builtin_rvv_vmseq_vx_ma:
14940 ID = Intrinsic::riscv_vmseq_mask;
14941 PolicyAttrs = 3;
14942 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14943 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14944 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14945 break;
14946case RISCVVector::BI__builtin_rvv_vmseq_vv_mu:
14947case RISCVVector::BI__builtin_rvv_vmseq_vx_mu:
14948 ID = Intrinsic::riscv_vmseq_mask;
14949 PolicyAttrs = 1;
14950 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14951 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14952 break;
14953case RISCVVector::BI__builtin_rvv_vmset_m:
14954 ID = Intrinsic::riscv_vmset;
14955 PolicyAttrs = 3;
14956 IntrinsicTypes = {ResultType, Ops.back()->getType()};
14957 break;
14958case RISCVVector::BI__builtin_rvv_vmsge_vv:
14959case RISCVVector::BI__builtin_rvv_vmsge_vx:
14960 ID = Intrinsic::riscv_vmsge;
14961 PolicyAttrs = 3;
14962 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14963 break;
14964case RISCVVector::BI__builtin_rvv_vmsge_vv_tama:
14965case RISCVVector::BI__builtin_rvv_vmsge_vv_ma:
14966case RISCVVector::BI__builtin_rvv_vmsge_vx_tama:
14967case RISCVVector::BI__builtin_rvv_vmsge_vx_ma:
14968 ID = Intrinsic::riscv_vmsge_mask;
14969 PolicyAttrs = 3;
14970 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14971 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14972 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14973 break;
14974case RISCVVector::BI__builtin_rvv_vmsge_vv_mu:
14975case RISCVVector::BI__builtin_rvv_vmsge_vx_mu:
14976 ID = Intrinsic::riscv_vmsge_mask;
14977 PolicyAttrs = 1;
14978 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14979 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14980 break;
14981case RISCVVector::BI__builtin_rvv_vmsgeu_vv:
14982case RISCVVector::BI__builtin_rvv_vmsgeu_vx:
14983 ID = Intrinsic::riscv_vmsgeu;
14984 PolicyAttrs = 3;
14985 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
14986 break;
14987case RISCVVector::BI__builtin_rvv_vmsgeu_vv_tama:
14988case RISCVVector::BI__builtin_rvv_vmsgeu_vv_ma:
14989case RISCVVector::BI__builtin_rvv_vmsgeu_vx_tama:
14990case RISCVVector::BI__builtin_rvv_vmsgeu_vx_ma:
14991 ID = Intrinsic::riscv_vmsgeu_mask;
14992 PolicyAttrs = 3;
14993 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
14994 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
14995 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
14996 break;
14997case RISCVVector::BI__builtin_rvv_vmsgeu_vv_mu:
14998case RISCVVector::BI__builtin_rvv_vmsgeu_vx_mu:
14999 ID = Intrinsic::riscv_vmsgeu_mask;
15000 PolicyAttrs = 1;
15001 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15002 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15003 break;
15004case RISCVVector::BI__builtin_rvv_vmsgt_vv:
15005case RISCVVector::BI__builtin_rvv_vmsgt_vx:
15006 ID = Intrinsic::riscv_vmsgt;
15007 PolicyAttrs = 3;
15008 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15009 break;
15010case RISCVVector::BI__builtin_rvv_vmsgt_vv_tama:
15011case RISCVVector::BI__builtin_rvv_vmsgt_vv_ma:
15012case RISCVVector::BI__builtin_rvv_vmsgt_vx_tama:
15013case RISCVVector::BI__builtin_rvv_vmsgt_vx_ma:
15014 ID = Intrinsic::riscv_vmsgt_mask;
15015 PolicyAttrs = 3;
15016 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15017 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15018 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15019 break;
15020case RISCVVector::BI__builtin_rvv_vmsgt_vv_mu:
15021case RISCVVector::BI__builtin_rvv_vmsgt_vx_mu:
15022 ID = Intrinsic::riscv_vmsgt_mask;
15023 PolicyAttrs = 1;
15024 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15025 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15026 break;
15027case RISCVVector::BI__builtin_rvv_vmsgtu_vv:
15028case RISCVVector::BI__builtin_rvv_vmsgtu_vx:
15029 ID = Intrinsic::riscv_vmsgtu;
15030 PolicyAttrs = 3;
15031 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15032 break;
15033case RISCVVector::BI__builtin_rvv_vmsgtu_vv_tama:
15034case RISCVVector::BI__builtin_rvv_vmsgtu_vv_ma:
15035case RISCVVector::BI__builtin_rvv_vmsgtu_vx_tama:
15036case RISCVVector::BI__builtin_rvv_vmsgtu_vx_ma:
15037 ID = Intrinsic::riscv_vmsgtu_mask;
15038 PolicyAttrs = 3;
15039 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15040 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15041 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15042 break;
15043case RISCVVector::BI__builtin_rvv_vmsgtu_vv_mu:
15044case RISCVVector::BI__builtin_rvv_vmsgtu_vx_mu:
15045 ID = Intrinsic::riscv_vmsgtu_mask;
15046 PolicyAttrs = 1;
15047 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15048 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15049 break;
15050case RISCVVector::BI__builtin_rvv_vmsif_m:
15051 ID = Intrinsic::riscv_vmsif;
15052 PolicyAttrs = 3;
15053 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15054 break;
15055case RISCVVector::BI__builtin_rvv_vmsif_m_tama:
15056case RISCVVector::BI__builtin_rvv_vmsif_m_ma:
15057 ID = Intrinsic::riscv_vmsif_mask;
15058 PolicyAttrs = 3;
15059 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15060 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15061 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15062 break;
15063case RISCVVector::BI__builtin_rvv_vmsif_m_mu:
15064 ID = Intrinsic::riscv_vmsif_mask;
15065 PolicyAttrs = 1;
15066 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15067 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15068 break;
15069case RISCVVector::BI__builtin_rvv_vmsle_vv:
15070case RISCVVector::BI__builtin_rvv_vmsle_vx:
15071 ID = Intrinsic::riscv_vmsle;
15072 PolicyAttrs = 3;
15073 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15074 break;
15075case RISCVVector::BI__builtin_rvv_vmsle_vv_tama:
15076case RISCVVector::BI__builtin_rvv_vmsle_vv_ma:
15077case RISCVVector::BI__builtin_rvv_vmsle_vx_tama:
15078case RISCVVector::BI__builtin_rvv_vmsle_vx_ma:
15079 ID = Intrinsic::riscv_vmsle_mask;
15080 PolicyAttrs = 3;
15081 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15082 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15083 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15084 break;
15085case RISCVVector::BI__builtin_rvv_vmsle_vv_mu:
15086case RISCVVector::BI__builtin_rvv_vmsle_vx_mu:
15087 ID = Intrinsic::riscv_vmsle_mask;
15088 PolicyAttrs = 1;
15089 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15090 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15091 break;
15092case RISCVVector::BI__builtin_rvv_vmsleu_vv:
15093case RISCVVector::BI__builtin_rvv_vmsleu_vx:
15094 ID = Intrinsic::riscv_vmsleu;
15095 PolicyAttrs = 3;
15096 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15097 break;
15098case RISCVVector::BI__builtin_rvv_vmsleu_vv_tama:
15099case RISCVVector::BI__builtin_rvv_vmsleu_vv_ma:
15100case RISCVVector::BI__builtin_rvv_vmsleu_vx_tama:
15101case RISCVVector::BI__builtin_rvv_vmsleu_vx_ma:
15102 ID = Intrinsic::riscv_vmsleu_mask;
15103 PolicyAttrs = 3;
15104 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15105 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15106 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15107 break;
15108case RISCVVector::BI__builtin_rvv_vmsleu_vv_mu:
15109case RISCVVector::BI__builtin_rvv_vmsleu_vx_mu:
15110 ID = Intrinsic::riscv_vmsleu_mask;
15111 PolicyAttrs = 1;
15112 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15113 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15114 break;
15115case RISCVVector::BI__builtin_rvv_vmslt_vv:
15116case RISCVVector::BI__builtin_rvv_vmslt_vx:
15117 ID = Intrinsic::riscv_vmslt;
15118 PolicyAttrs = 3;
15119 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15120 break;
15121case RISCVVector::BI__builtin_rvv_vmslt_vv_tama:
15122case RISCVVector::BI__builtin_rvv_vmslt_vv_ma:
15123case RISCVVector::BI__builtin_rvv_vmslt_vx_tama:
15124case RISCVVector::BI__builtin_rvv_vmslt_vx_ma:
15125 ID = Intrinsic::riscv_vmslt_mask;
15126 PolicyAttrs = 3;
15127 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15128 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15129 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15130 break;
15131case RISCVVector::BI__builtin_rvv_vmslt_vv_mu:
15132case RISCVVector::BI__builtin_rvv_vmslt_vx_mu:
15133 ID = Intrinsic::riscv_vmslt_mask;
15134 PolicyAttrs = 1;
15135 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15136 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15137 break;
15138case RISCVVector::BI__builtin_rvv_vmsltu_vv:
15139case RISCVVector::BI__builtin_rvv_vmsltu_vx:
15140 ID = Intrinsic::riscv_vmsltu;
15141 PolicyAttrs = 3;
15142 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15143 break;
15144case RISCVVector::BI__builtin_rvv_vmsltu_vv_tama:
15145case RISCVVector::BI__builtin_rvv_vmsltu_vv_ma:
15146case RISCVVector::BI__builtin_rvv_vmsltu_vx_tama:
15147case RISCVVector::BI__builtin_rvv_vmsltu_vx_ma:
15148 ID = Intrinsic::riscv_vmsltu_mask;
15149 PolicyAttrs = 3;
15150 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15151 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15152 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15153 break;
15154case RISCVVector::BI__builtin_rvv_vmsltu_vv_mu:
15155case RISCVVector::BI__builtin_rvv_vmsltu_vx_mu:
15156 ID = Intrinsic::riscv_vmsltu_mask;
15157 PolicyAttrs = 1;
15158 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15159 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15160 break;
15161case RISCVVector::BI__builtin_rvv_vmsne_vv:
15162case RISCVVector::BI__builtin_rvv_vmsne_vx:
15163 ID = Intrinsic::riscv_vmsne;
15164 PolicyAttrs = 3;
15165 IntrinsicTypes = {Ops[0]->getType(), Ops[1]->getType(), Ops.back()->getType()};
15166 break;
15167case RISCVVector::BI__builtin_rvv_vmsne_vv_tama:
15168case RISCVVector::BI__builtin_rvv_vmsne_vv_ma:
15169case RISCVVector::BI__builtin_rvv_vmsne_vx_tama:
15170case RISCVVector::BI__builtin_rvv_vmsne_vx_ma:
15171 ID = Intrinsic::riscv_vmsne_mask;
15172 PolicyAttrs = 3;
15173 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15174 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15175 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15176 break;
15177case RISCVVector::BI__builtin_rvv_vmsne_vv_mu:
15178case RISCVVector::BI__builtin_rvv_vmsne_vx_mu:
15179 ID = Intrinsic::riscv_vmsne_mask;
15180 PolicyAttrs = 1;
15181 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15182 IntrinsicTypes = {Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15183 break;
15184case RISCVVector::BI__builtin_rvv_vmsof_m:
15185 ID = Intrinsic::riscv_vmsof;
15186 PolicyAttrs = 3;
15187 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15188 break;
15189case RISCVVector::BI__builtin_rvv_vmsof_m_tama:
15190case RISCVVector::BI__builtin_rvv_vmsof_m_ma:
15191 ID = Intrinsic::riscv_vmsof_mask;
15192 PolicyAttrs = 3;
15193 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15194 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15195 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15196 break;
15197case RISCVVector::BI__builtin_rvv_vmsof_m_mu:
15198 ID = Intrinsic::riscv_vmsof_mask;
15199 PolicyAttrs = 1;
15200 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15201 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15202 break;
15203case RISCVVector::BI__builtin_rvv_vmul_vv_tu:
15204case RISCVVector::BI__builtin_rvv_vmul_vx_tu:
15205 ID = Intrinsic::riscv_vmul;
15206 PolicyAttrs = 2;
15207 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15208 break;
15209case RISCVVector::BI__builtin_rvv_vmul_vv_ta:
15210case RISCVVector::BI__builtin_rvv_vmul_vx_ta:
15211 ID = Intrinsic::riscv_vmul;
15212 PolicyAttrs = 3;
15213 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15214 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15215 break;
15216case RISCVVector::BI__builtin_rvv_vmul_vv_tuma:
15217case RISCVVector::BI__builtin_rvv_vmul_vx_tuma:
15218 ID = Intrinsic::riscv_vmul_mask;
15219 PolicyAttrs = 2;
15220 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15221 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15222 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15223 break;
15224case RISCVVector::BI__builtin_rvv_vmul_vv_tama:
15225case RISCVVector::BI__builtin_rvv_vmul_vx_tama:
15226 ID = Intrinsic::riscv_vmul_mask;
15227 PolicyAttrs = 3;
15228 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15229 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15230 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15231 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15232 break;
15233case RISCVVector::BI__builtin_rvv_vmul_vv_tumu:
15234case RISCVVector::BI__builtin_rvv_vmul_vx_tumu:
15235 ID = Intrinsic::riscv_vmul_mask;
15236 PolicyAttrs = 0;
15237 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15238 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15239 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15240 break;
15241case RISCVVector::BI__builtin_rvv_vmul_vv_tamu:
15242case RISCVVector::BI__builtin_rvv_vmul_vx_tamu:
15243 ID = Intrinsic::riscv_vmul_mask;
15244 PolicyAttrs = 1;
15245 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15246 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15247 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15248 break;
15249case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:
15250case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:
15251 ID = Intrinsic::riscv_vmulh;
15252 PolicyAttrs = 2;
15253 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15254 break;
15255case RISCVVector::BI__builtin_rvv_vmulh_vv_ta:
15256case RISCVVector::BI__builtin_rvv_vmulh_vx_ta:
15257 ID = Intrinsic::riscv_vmulh;
15258 PolicyAttrs = 3;
15259 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15260 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15261 break;
15262case RISCVVector::BI__builtin_rvv_vmulh_vv_tuma:
15263case RISCVVector::BI__builtin_rvv_vmulh_vx_tuma:
15264 ID = Intrinsic::riscv_vmulh_mask;
15265 PolicyAttrs = 2;
15266 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15267 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15268 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15269 break;
15270case RISCVVector::BI__builtin_rvv_vmulh_vv_tama:
15271case RISCVVector::BI__builtin_rvv_vmulh_vx_tama:
15272 ID = Intrinsic::riscv_vmulh_mask;
15273 PolicyAttrs = 3;
15274 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15275 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15276 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15277 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15278 break;
15279case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:
15280case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:
15281 ID = Intrinsic::riscv_vmulh_mask;
15282 PolicyAttrs = 0;
15283 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15284 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15285 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15286 break;
15287case RISCVVector::BI__builtin_rvv_vmulh_vv_tamu:
15288case RISCVVector::BI__builtin_rvv_vmulh_vx_tamu:
15289 ID = Intrinsic::riscv_vmulh_mask;
15290 PolicyAttrs = 1;
15291 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15292 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15293 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15294 break;
15295case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:
15296case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:
15297 ID = Intrinsic::riscv_vmulhsu;
15298 PolicyAttrs = 2;
15299 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15300 break;
15301case RISCVVector::BI__builtin_rvv_vmulhsu_vv_ta:
15302case RISCVVector::BI__builtin_rvv_vmulhsu_vx_ta:
15303 ID = Intrinsic::riscv_vmulhsu;
15304 PolicyAttrs = 3;
15305 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15306 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15307 break;
15308case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tuma:
15309case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tuma:
15310 ID = Intrinsic::riscv_vmulhsu_mask;
15311 PolicyAttrs = 2;
15312 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15313 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15314 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15315 break;
15316case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tama:
15317case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tama:
15318 ID = Intrinsic::riscv_vmulhsu_mask;
15319 PolicyAttrs = 3;
15320 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15321 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15322 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15323 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15324 break;
15325case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:
15326case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:
15327 ID = Intrinsic::riscv_vmulhsu_mask;
15328 PolicyAttrs = 0;
15329 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15330 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15331 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15332 break;
15333case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tamu:
15334case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tamu:
15335 ID = Intrinsic::riscv_vmulhsu_mask;
15336 PolicyAttrs = 1;
15337 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15338 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15339 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15340 break;
15341case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:
15342case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:
15343 ID = Intrinsic::riscv_vmulhu;
15344 PolicyAttrs = 2;
15345 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15346 break;
15347case RISCVVector::BI__builtin_rvv_vmulhu_vv_ta:
15348case RISCVVector::BI__builtin_rvv_vmulhu_vx_ta:
15349 ID = Intrinsic::riscv_vmulhu;
15350 PolicyAttrs = 3;
15351 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15352 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15353 break;
15354case RISCVVector::BI__builtin_rvv_vmulhu_vv_tuma:
15355case RISCVVector::BI__builtin_rvv_vmulhu_vx_tuma:
15356 ID = Intrinsic::riscv_vmulhu_mask;
15357 PolicyAttrs = 2;
15358 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15359 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15360 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15361 break;
15362case RISCVVector::BI__builtin_rvv_vmulhu_vv_tama:
15363case RISCVVector::BI__builtin_rvv_vmulhu_vx_tama:
15364 ID = Intrinsic::riscv_vmulhu_mask;
15365 PolicyAttrs = 3;
15366 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15367 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15368 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15369 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15370 break;
15371case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:
15372case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:
15373 ID = Intrinsic::riscv_vmulhu_mask;
15374 PolicyAttrs = 0;
15375 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15376 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15377 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15378 break;
15379case RISCVVector::BI__builtin_rvv_vmulhu_vv_tamu:
15380case RISCVVector::BI__builtin_rvv_vmulhu_vx_tamu:
15381 ID = Intrinsic::riscv_vmulhu_mask;
15382 PolicyAttrs = 1;
15383 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15384 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15385 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15386 break;
15387case RISCVVector::BI__builtin_rvv_vmv_s_x_tu:
15388 ID = Intrinsic::riscv_vmv_s_x;
15389 PolicyAttrs = 2;
15390 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15391 break;
15392case RISCVVector::BI__builtin_rvv_vmv_s_x_ta:
15393 ID = Intrinsic::riscv_vmv_s_x;
15394 PolicyAttrs = 3;
15395 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15396 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15397 break;
15398case RISCVVector::BI__builtin_rvv_vmv_v_v_tu:
15399 ID = Intrinsic::riscv_vmv_v_v;
15400 PolicyAttrs = 2;
15401 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15402 break;
15403case RISCVVector::BI__builtin_rvv_vmv_v_v_ta:
15404 ID = Intrinsic::riscv_vmv_v_v;
15405 PolicyAttrs = 3;
15406 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15407 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15408 break;
15409case RISCVVector::BI__builtin_rvv_vmv_v_x_tu:
15410 ID = Intrinsic::riscv_vmv_v_x;
15411 PolicyAttrs = 2;
15412 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15413 break;
15414case RISCVVector::BI__builtin_rvv_vmv_v_x_ta:
15415 ID = Intrinsic::riscv_vmv_v_x;
15416 PolicyAttrs = 3;
15417 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15418 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15419 break;
15420case RISCVVector::BI__builtin_rvv_vmv_x_s:
15421 ID = Intrinsic::riscv_vmv_x_s;
15422 PolicyAttrs = 3;
15423 IntrinsicTypes = {Ops[0]->getType()};
15424 break;
15425case RISCVVector::BI__builtin_rvv_vmxnor_mm:
15426 ID = Intrinsic::riscv_vmxnor;
15427 PolicyAttrs = 3;
15428 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15429 break;
15430case RISCVVector::BI__builtin_rvv_vmxor_mm:
15431 ID = Intrinsic::riscv_vmxor;
15432 PolicyAttrs = 3;
15433 IntrinsicTypes = {ResultType, Ops.back()->getType()};
15434 break;
15435case RISCVVector::BI__builtin_rvv_vnclip_wv_tu:
15436case RISCVVector::BI__builtin_rvv_vnclip_wx_tu:
15437 ID = Intrinsic::riscv_vnclip;
15438 PolicyAttrs = 2;
15439 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15440 break;
15441case RISCVVector::BI__builtin_rvv_vnclip_wv_ta:
15442case RISCVVector::BI__builtin_rvv_vnclip_wx_ta:
15443 ID = Intrinsic::riscv_vnclip;
15444 PolicyAttrs = 3;
15445 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15446 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15447 break;
15448case RISCVVector::BI__builtin_rvv_vnclip_wv_tuma:
15449case RISCVVector::BI__builtin_rvv_vnclip_wx_tuma:
15450 ID = Intrinsic::riscv_vnclip_mask;
15451 PolicyAttrs = 2;
15452 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15454 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15455 break;
15456case RISCVVector::BI__builtin_rvv_vnclip_wv_tama:
15457case RISCVVector::BI__builtin_rvv_vnclip_wx_tama:
15458 ID = Intrinsic::riscv_vnclip_mask;
15459 PolicyAttrs = 3;
15460 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15461 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15462 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15463 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15464 break;
15465case RISCVVector::BI__builtin_rvv_vnclip_wv_tumu:
15466case RISCVVector::BI__builtin_rvv_vnclip_wx_tumu:
15467 ID = Intrinsic::riscv_vnclip_mask;
15468 PolicyAttrs = 0;
15469 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15470 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15471 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15472 break;
15473case RISCVVector::BI__builtin_rvv_vnclip_wv_tamu:
15474case RISCVVector::BI__builtin_rvv_vnclip_wx_tamu:
15475 ID = Intrinsic::riscv_vnclip_mask;
15476 PolicyAttrs = 1;
15477 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15478 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15479 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15480 break;
15481case RISCVVector::BI__builtin_rvv_vnclipu_wv_tu:
15482case RISCVVector::BI__builtin_rvv_vnclipu_wx_tu:
15483 ID = Intrinsic::riscv_vnclipu;
15484 PolicyAttrs = 2;
15485 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15486 break;
15487case RISCVVector::BI__builtin_rvv_vnclipu_wv_ta:
15488case RISCVVector::BI__builtin_rvv_vnclipu_wx_ta:
15489 ID = Intrinsic::riscv_vnclipu;
15490 PolicyAttrs = 3;
15491 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15492 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15493 break;
15494case RISCVVector::BI__builtin_rvv_vnclipu_wv_tuma:
15495case RISCVVector::BI__builtin_rvv_vnclipu_wx_tuma:
15496 ID = Intrinsic::riscv_vnclipu_mask;
15497 PolicyAttrs = 2;
15498 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15499 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15500 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15501 break;
15502case RISCVVector::BI__builtin_rvv_vnclipu_wv_tama:
15503case RISCVVector::BI__builtin_rvv_vnclipu_wx_tama:
15504 ID = Intrinsic::riscv_vnclipu_mask;
15505 PolicyAttrs = 3;
15506 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15507 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15508 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15509 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15510 break;
15511case RISCVVector::BI__builtin_rvv_vnclipu_wv_tumu:
15512case RISCVVector::BI__builtin_rvv_vnclipu_wx_tumu:
15513 ID = Intrinsic::riscv_vnclipu_mask;
15514 PolicyAttrs = 0;
15515 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15516 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15517 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15518 break;
15519case RISCVVector::BI__builtin_rvv_vnclipu_wv_tamu:
15520case RISCVVector::BI__builtin_rvv_vnclipu_wx_tamu:
15521 ID = Intrinsic::riscv_vnclipu_mask;
15522 PolicyAttrs = 1;
15523 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15524 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15525 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15526 break;
15527case RISCVVector::BI__builtin_rvv_vnmsac_vv_tu:
15528case RISCVVector::BI__builtin_rvv_vnmsac_vx_tu:
15529 ID = Intrinsic::riscv_vnmsac;
15530 PolicyAttrs = 2;
15531 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15532 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15533 break;
15534case RISCVVector::BI__builtin_rvv_vnmsac_vv_ta:
15535case RISCVVector::BI__builtin_rvv_vnmsac_vx_ta:
15536 ID = Intrinsic::riscv_vnmsac;
15537 PolicyAttrs = 3;
15538 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15539 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15540 break;
15541case RISCVVector::BI__builtin_rvv_vnmsac_vv_tuma:
15542case RISCVVector::BI__builtin_rvv_vnmsac_vx_tuma:
15543 ID = Intrinsic::riscv_vnmsac_mask;
15544 PolicyAttrs = 2;
15545 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15546 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15547 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15548 break;
15549case RISCVVector::BI__builtin_rvv_vnmsac_vv_tama:
15550case RISCVVector::BI__builtin_rvv_vnmsac_vx_tama:
15551 ID = Intrinsic::riscv_vnmsac_mask;
15552 PolicyAttrs = 3;
15553 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15554 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15555 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15556 break;
15557case RISCVVector::BI__builtin_rvv_vnmsac_vv_tumu:
15558case RISCVVector::BI__builtin_rvv_vnmsac_vx_tumu:
15559 ID = Intrinsic::riscv_vnmsac_mask;
15560 PolicyAttrs = 0;
15561 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15562 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15563 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15564 break;
15565case RISCVVector::BI__builtin_rvv_vnmsac_vv_tamu:
15566case RISCVVector::BI__builtin_rvv_vnmsac_vx_tamu:
15567 ID = Intrinsic::riscv_vnmsac_mask;
15568 PolicyAttrs = 1;
15569 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15570 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15571 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15572 break;
15573case RISCVVector::BI__builtin_rvv_vnmsub_vv_tu:
15574case RISCVVector::BI__builtin_rvv_vnmsub_vx_tu:
15575 ID = Intrinsic::riscv_vnmsub;
15576 PolicyAttrs = 2;
15577 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15578 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15579 break;
15580case RISCVVector::BI__builtin_rvv_vnmsub_vv_ta:
15581case RISCVVector::BI__builtin_rvv_vnmsub_vx_ta:
15582 ID = Intrinsic::riscv_vnmsub;
15583 PolicyAttrs = 3;
15584 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15585 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15586 break;
15587case RISCVVector::BI__builtin_rvv_vnmsub_vv_tuma:
15588case RISCVVector::BI__builtin_rvv_vnmsub_vx_tuma:
15589 ID = Intrinsic::riscv_vnmsub_mask;
15590 PolicyAttrs = 2;
15591 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15592 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15593 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15594 break;
15595case RISCVVector::BI__builtin_rvv_vnmsub_vv_tama:
15596case RISCVVector::BI__builtin_rvv_vnmsub_vx_tama:
15597 ID = Intrinsic::riscv_vnmsub_mask;
15598 PolicyAttrs = 3;
15599 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15600 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15601 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15602 break;
15603case RISCVVector::BI__builtin_rvv_vnmsub_vv_tumu:
15604case RISCVVector::BI__builtin_rvv_vnmsub_vx_tumu:
15605 ID = Intrinsic::riscv_vnmsub_mask;
15606 PolicyAttrs = 0;
15607 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15608 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15609 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15610 break;
15611case RISCVVector::BI__builtin_rvv_vnmsub_vv_tamu:
15612case RISCVVector::BI__builtin_rvv_vnmsub_vx_tamu:
15613 ID = Intrinsic::riscv_vnmsub_mask;
15614 PolicyAttrs = 1;
15615 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15616 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15617 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15618 break;
15619case RISCVVector::BI__builtin_rvv_vnsra_wv_tu:
15620case RISCVVector::BI__builtin_rvv_vnsra_wx_tu:
15621 ID = Intrinsic::riscv_vnsra;
15622 PolicyAttrs = 2;
15623 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15624 break;
15625case RISCVVector::BI__builtin_rvv_vnsra_wv_ta:
15626case RISCVVector::BI__builtin_rvv_vnsra_wx_ta:
15627 ID = Intrinsic::riscv_vnsra;
15628 PolicyAttrs = 3;
15629 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15630 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15631 break;
15632case RISCVVector::BI__builtin_rvv_vnsra_wv_tuma:
15633case RISCVVector::BI__builtin_rvv_vnsra_wx_tuma:
15634 ID = Intrinsic::riscv_vnsra_mask;
15635 PolicyAttrs = 2;
15636 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15637 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15638 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15639 break;
15640case RISCVVector::BI__builtin_rvv_vnsra_wv_tama:
15641case RISCVVector::BI__builtin_rvv_vnsra_wx_tama:
15642 ID = Intrinsic::riscv_vnsra_mask;
15643 PolicyAttrs = 3;
15644 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15645 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15646 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15647 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15648 break;
15649case RISCVVector::BI__builtin_rvv_vnsra_wv_tumu:
15650case RISCVVector::BI__builtin_rvv_vnsra_wx_tumu:
15651 ID = Intrinsic::riscv_vnsra_mask;
15652 PolicyAttrs = 0;
15653 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15654 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15655 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15656 break;
15657case RISCVVector::BI__builtin_rvv_vnsra_wv_tamu:
15658case RISCVVector::BI__builtin_rvv_vnsra_wx_tamu:
15659 ID = Intrinsic::riscv_vnsra_mask;
15660 PolicyAttrs = 1;
15661 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15662 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15663 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15664 break;
15665case RISCVVector::BI__builtin_rvv_vnsrl_wv_tu:
15666case RISCVVector::BI__builtin_rvv_vnsrl_wx_tu:
15667 ID = Intrinsic::riscv_vnsrl;
15668 PolicyAttrs = 2;
15669 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15670 break;
15671case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tu:
15672 ID = Intrinsic::riscv_vnsrl;
15673 PolicyAttrs = 2;
15674IsMasked = false;
15675
15676 {
15677 if (IsMasked) {
15678 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15679 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15680 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15681 } else {
15682 if (PolicyAttrs & RVV_VTA)
15683 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15684 }
15685 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15686 if (IsMasked) {
15687 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15688 // maskedoff, op1, xlen, mask, vl
15689 IntrinsicTypes = {ResultType,
15690 Ops[1]->getType(),
15691 Ops[4]->getType(),
15692 Ops[4]->getType()};
15693 } else {
15694 // passthru, op1, xlen, vl
15695 IntrinsicTypes = {ResultType,
15696 Ops[1]->getType(),
15697 Ops[3]->getType(),
15698 Ops[3]->getType()};
15699 }
15700 break;
15701 }
15702 break;
15703case RISCVVector::BI__builtin_rvv_vnsrl_wv_ta:
15704case RISCVVector::BI__builtin_rvv_vnsrl_wx_ta:
15705 ID = Intrinsic::riscv_vnsrl;
15706 PolicyAttrs = 3;
15707 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15708 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15709 break;
15710case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_ta:
15711 ID = Intrinsic::riscv_vnsrl;
15712 PolicyAttrs = 3;
15713IsMasked = false;
15714
15715 {
15716 if (IsMasked) {
15717 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15718 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15719 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15720 } else {
15721 if (PolicyAttrs & RVV_VTA)
15722 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15723 }
15724 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15725 if (IsMasked) {
15726 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15727 // maskedoff, op1, xlen, mask, vl
15728 IntrinsicTypes = {ResultType,
15729 Ops[1]->getType(),
15730 Ops[4]->getType(),
15731 Ops[4]->getType()};
15732 } else {
15733 // passthru, op1, xlen, vl
15734 IntrinsicTypes = {ResultType,
15735 Ops[1]->getType(),
15736 Ops[3]->getType(),
15737 Ops[3]->getType()};
15738 }
15739 break;
15740 }
15741 break;
15742case RISCVVector::BI__builtin_rvv_vnsrl_wv_tuma:
15743case RISCVVector::BI__builtin_rvv_vnsrl_wx_tuma:
15744 ID = Intrinsic::riscv_vnsrl_mask;
15745 PolicyAttrs = 2;
15746 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15747 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15748 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15749 break;
15750case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tuma:
15751 ID = Intrinsic::riscv_vnsrl_mask;
15752 PolicyAttrs = 2;
15753IsMasked = true;
15754
15755 {
15756 if (IsMasked) {
15757 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15758 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15759 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15760 } else {
15761 if (PolicyAttrs & RVV_VTA)
15762 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15763 }
15764 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15765 if (IsMasked) {
15766 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15767 // maskedoff, op1, xlen, mask, vl
15768 IntrinsicTypes = {ResultType,
15769 Ops[1]->getType(),
15770 Ops[4]->getType(),
15771 Ops[4]->getType()};
15772 } else {
15773 // passthru, op1, xlen, vl
15774 IntrinsicTypes = {ResultType,
15775 Ops[1]->getType(),
15776 Ops[3]->getType(),
15777 Ops[3]->getType()};
15778 }
15779 break;
15780 }
15781 break;
15782case RISCVVector::BI__builtin_rvv_vnsrl_wv_tama:
15783case RISCVVector::BI__builtin_rvv_vnsrl_wx_tama:
15784 ID = Intrinsic::riscv_vnsrl_mask;
15785 PolicyAttrs = 3;
15786 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15787 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15788 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15789 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15790 break;
15791case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tama:
15792 ID = Intrinsic::riscv_vnsrl_mask;
15793 PolicyAttrs = 3;
15794IsMasked = true;
15795
15796 {
15797 if (IsMasked) {
15798 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15799 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15800 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15801 } else {
15802 if (PolicyAttrs & RVV_VTA)
15803 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15804 }
15805 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15806 if (IsMasked) {
15807 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15808 // maskedoff, op1, xlen, mask, vl
15809 IntrinsicTypes = {ResultType,
15810 Ops[1]->getType(),
15811 Ops[4]->getType(),
15812 Ops[4]->getType()};
15813 } else {
15814 // passthru, op1, xlen, vl
15815 IntrinsicTypes = {ResultType,
15816 Ops[1]->getType(),
15817 Ops[3]->getType(),
15818 Ops[3]->getType()};
15819 }
15820 break;
15821 }
15822 break;
15823case RISCVVector::BI__builtin_rvv_vnsrl_wv_tumu:
15824case RISCVVector::BI__builtin_rvv_vnsrl_wx_tumu:
15825 ID = Intrinsic::riscv_vnsrl_mask;
15826 PolicyAttrs = 0;
15827 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15828 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15829 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15830 break;
15831case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tumu:
15832 ID = Intrinsic::riscv_vnsrl_mask;
15833 PolicyAttrs = 0;
15834IsMasked = true;
15835
15836 {
15837 if (IsMasked) {
15838 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15839 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15840 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15841 } else {
15842 if (PolicyAttrs & RVV_VTA)
15843 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15844 }
15845 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15846 if (IsMasked) {
15847 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15848 // maskedoff, op1, xlen, mask, vl
15849 IntrinsicTypes = {ResultType,
15850 Ops[1]->getType(),
15851 Ops[4]->getType(),
15852 Ops[4]->getType()};
15853 } else {
15854 // passthru, op1, xlen, vl
15855 IntrinsicTypes = {ResultType,
15856 Ops[1]->getType(),
15857 Ops[3]->getType(),
15858 Ops[3]->getType()};
15859 }
15860 break;
15861 }
15862 break;
15863case RISCVVector::BI__builtin_rvv_vnsrl_wv_tamu:
15864case RISCVVector::BI__builtin_rvv_vnsrl_wx_tamu:
15865 ID = Intrinsic::riscv_vnsrl_mask;
15866 PolicyAttrs = 1;
15867 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15868 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15869 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
15870 break;
15871case RISCVVector::BI__builtin_rvv_vncvt_x_x_w_tamu:
15872 ID = Intrinsic::riscv_vnsrl_mask;
15873 PolicyAttrs = 1;
15874IsMasked = true;
15875
15876 {
15877 if (IsMasked) {
15878 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15879 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
15880 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15881 } else {
15882 if (PolicyAttrs & RVV_VTA)
15883 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15884 }
15885 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType()));
15886 if (IsMasked) {
15887 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15888 // maskedoff, op1, xlen, mask, vl
15889 IntrinsicTypes = {ResultType,
15890 Ops[1]->getType(),
15891 Ops[4]->getType(),
15892 Ops[4]->getType()};
15893 } else {
15894 // passthru, op1, xlen, vl
15895 IntrinsicTypes = {ResultType,
15896 Ops[1]->getType(),
15897 Ops[3]->getType(),
15898 Ops[3]->getType()};
15899 }
15900 break;
15901 }
15902 break;
15903case RISCVVector::BI__builtin_rvv_vor_vv_tu:
15904case RISCVVector::BI__builtin_rvv_vor_vx_tu:
15905 ID = Intrinsic::riscv_vor;
15906 PolicyAttrs = 2;
15907 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15908 break;
15909case RISCVVector::BI__builtin_rvv_vor_vv_ta:
15910case RISCVVector::BI__builtin_rvv_vor_vx_ta:
15911 ID = Intrinsic::riscv_vor;
15912 PolicyAttrs = 3;
15913 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15914 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15915 break;
15916case RISCVVector::BI__builtin_rvv_vor_vv_tuma:
15917case RISCVVector::BI__builtin_rvv_vor_vx_tuma:
15918 ID = Intrinsic::riscv_vor_mask;
15919 PolicyAttrs = 2;
15920 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15921 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15922 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15923 break;
15924case RISCVVector::BI__builtin_rvv_vor_vv_tama:
15925case RISCVVector::BI__builtin_rvv_vor_vx_tama:
15926 ID = Intrinsic::riscv_vor_mask;
15927 PolicyAttrs = 3;
15928 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15929 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15930 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15931 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15932 break;
15933case RISCVVector::BI__builtin_rvv_vor_vv_tumu:
15934case RISCVVector::BI__builtin_rvv_vor_vx_tumu:
15935 ID = Intrinsic::riscv_vor_mask;
15936 PolicyAttrs = 0;
15937 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15938 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15939 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15940 break;
15941case RISCVVector::BI__builtin_rvv_vor_vv_tamu:
15942case RISCVVector::BI__builtin_rvv_vor_vx_tamu:
15943 ID = Intrinsic::riscv_vor_mask;
15944 PolicyAttrs = 1;
15945 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15946 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
15947 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
15948 break;
15949case RISCVVector::BI__builtin_rvv_vredand_vs_tu:
15950 ID = Intrinsic::riscv_vredand;
15951 PolicyAttrs = 2;
15952 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15953 break;
15954case RISCVVector::BI__builtin_rvv_vredand_vs_ta:
15955 ID = Intrinsic::riscv_vredand;
15956 PolicyAttrs = 3;
15957 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15958 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15959 break;
15960case RISCVVector::BI__builtin_rvv_vredand_vs_tum:
15961 ID = Intrinsic::riscv_vredand_mask;
15962 PolicyAttrs = 2;
15963 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15964 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15965 break;
15966case RISCVVector::BI__builtin_rvv_vredand_vs_tama:
15967case RISCVVector::BI__builtin_rvv_vredand_vs_tam:
15968 ID = Intrinsic::riscv_vredand_mask;
15969 PolicyAttrs = 3;
15970 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15971 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15972 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15973 break;
15974case RISCVVector::BI__builtin_rvv_vredmax_vs_tu:
15975 ID = Intrinsic::riscv_vredmax;
15976 PolicyAttrs = 2;
15977 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15978 break;
15979case RISCVVector::BI__builtin_rvv_vredmax_vs_ta:
15980 ID = Intrinsic::riscv_vredmax;
15981 PolicyAttrs = 3;
15982 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15983 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15984 break;
15985case RISCVVector::BI__builtin_rvv_vredmax_vs_tum:
15986 ID = Intrinsic::riscv_vredmax_mask;
15987 PolicyAttrs = 2;
15988 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15989 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15990 break;
15991case RISCVVector::BI__builtin_rvv_vredmax_vs_tama:
15992case RISCVVector::BI__builtin_rvv_vredmax_vs_tam:
15993 ID = Intrinsic::riscv_vredmax_mask;
15994 PolicyAttrs = 3;
15995 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
15996 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
15997 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
15998 break;
15999case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tu:
16000 ID = Intrinsic::riscv_vredmaxu;
16001 PolicyAttrs = 2;
16002 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16003 break;
16004case RISCVVector::BI__builtin_rvv_vredmaxu_vs_ta:
16005 ID = Intrinsic::riscv_vredmaxu;
16006 PolicyAttrs = 3;
16007 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16008 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16009 break;
16010case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tum:
16011 ID = Intrinsic::riscv_vredmaxu_mask;
16012 PolicyAttrs = 2;
16013 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16014 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16015 break;
16016case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tama:
16017case RISCVVector::BI__builtin_rvv_vredmaxu_vs_tam:
16018 ID = Intrinsic::riscv_vredmaxu_mask;
16019 PolicyAttrs = 3;
16020 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16021 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16022 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16023 break;
16024case RISCVVector::BI__builtin_rvv_vredmin_vs_tu:
16025 ID = Intrinsic::riscv_vredmin;
16026 PolicyAttrs = 2;
16027 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16028 break;
16029case RISCVVector::BI__builtin_rvv_vredmin_vs_ta:
16030 ID = Intrinsic::riscv_vredmin;
16031 PolicyAttrs = 3;
16032 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16033 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16034 break;
16035case RISCVVector::BI__builtin_rvv_vredmin_vs_tum:
16036 ID = Intrinsic::riscv_vredmin_mask;
16037 PolicyAttrs = 2;
16038 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16039 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16040 break;
16041case RISCVVector::BI__builtin_rvv_vredmin_vs_tama:
16042case RISCVVector::BI__builtin_rvv_vredmin_vs_tam:
16043 ID = Intrinsic::riscv_vredmin_mask;
16044 PolicyAttrs = 3;
16045 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16046 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16047 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16048 break;
16049case RISCVVector::BI__builtin_rvv_vredminu_vs_tu:
16050 ID = Intrinsic::riscv_vredminu;
16051 PolicyAttrs = 2;
16052 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16053 break;
16054case RISCVVector::BI__builtin_rvv_vredminu_vs_ta:
16055 ID = Intrinsic::riscv_vredminu;
16056 PolicyAttrs = 3;
16057 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16058 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16059 break;
16060case RISCVVector::BI__builtin_rvv_vredminu_vs_tum:
16061 ID = Intrinsic::riscv_vredminu_mask;
16062 PolicyAttrs = 2;
16063 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16064 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16065 break;
16066case RISCVVector::BI__builtin_rvv_vredminu_vs_tama:
16067case RISCVVector::BI__builtin_rvv_vredminu_vs_tam:
16068 ID = Intrinsic::riscv_vredminu_mask;
16069 PolicyAttrs = 3;
16070 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16071 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16072 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16073 break;
16074case RISCVVector::BI__builtin_rvv_vredor_vs_tu:
16075 ID = Intrinsic::riscv_vredor;
16076 PolicyAttrs = 2;
16077 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16078 break;
16079case RISCVVector::BI__builtin_rvv_vredor_vs_ta:
16080 ID = Intrinsic::riscv_vredor;
16081 PolicyAttrs = 3;
16082 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16083 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16084 break;
16085case RISCVVector::BI__builtin_rvv_vredor_vs_tum:
16086 ID = Intrinsic::riscv_vredor_mask;
16087 PolicyAttrs = 2;
16088 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16089 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16090 break;
16091case RISCVVector::BI__builtin_rvv_vredor_vs_tama:
16092case RISCVVector::BI__builtin_rvv_vredor_vs_tam:
16093 ID = Intrinsic::riscv_vredor_mask;
16094 PolicyAttrs = 3;
16095 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16096 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16097 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16098 break;
16099case RISCVVector::BI__builtin_rvv_vredsum_vs_tu:
16100 ID = Intrinsic::riscv_vredsum;
16101 PolicyAttrs = 2;
16102 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16103 break;
16104case RISCVVector::BI__builtin_rvv_vredsum_vs_ta:
16105 ID = Intrinsic::riscv_vredsum;
16106 PolicyAttrs = 3;
16107 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16108 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16109 break;
16110case RISCVVector::BI__builtin_rvv_vredsum_vs_tum:
16111 ID = Intrinsic::riscv_vredsum_mask;
16112 PolicyAttrs = 2;
16113 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16114 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16115 break;
16116case RISCVVector::BI__builtin_rvv_vredsum_vs_tama:
16117case RISCVVector::BI__builtin_rvv_vredsum_vs_tam:
16118 ID = Intrinsic::riscv_vredsum_mask;
16119 PolicyAttrs = 3;
16120 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16121 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16122 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16123 break;
16124case RISCVVector::BI__builtin_rvv_vredxor_vs_tu:
16125 ID = Intrinsic::riscv_vredxor;
16126 PolicyAttrs = 2;
16127 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16128 break;
16129case RISCVVector::BI__builtin_rvv_vredxor_vs_ta:
16130 ID = Intrinsic::riscv_vredxor;
16131 PolicyAttrs = 3;
16132 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16133 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16134 break;
16135case RISCVVector::BI__builtin_rvv_vredxor_vs_tum:
16136 ID = Intrinsic::riscv_vredxor_mask;
16137 PolicyAttrs = 2;
16138 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16139 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16140 break;
16141case RISCVVector::BI__builtin_rvv_vredxor_vs_tama:
16142case RISCVVector::BI__builtin_rvv_vredxor_vs_tam:
16143 ID = Intrinsic::riscv_vredxor_mask;
16144 PolicyAttrs = 3;
16145 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16146 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16147 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16148 break;
16149case RISCVVector::BI__builtin_rvv_vrem_vv_tu:
16150case RISCVVector::BI__builtin_rvv_vrem_vx_tu:
16151 ID = Intrinsic::riscv_vrem;
16152 PolicyAttrs = 2;
16153 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16154 break;
16155case RISCVVector::BI__builtin_rvv_vrem_vv_ta:
16156case RISCVVector::BI__builtin_rvv_vrem_vx_ta:
16157 ID = Intrinsic::riscv_vrem;
16158 PolicyAttrs = 3;
16159 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16160 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16161 break;
16162case RISCVVector::BI__builtin_rvv_vrem_vv_tuma:
16163case RISCVVector::BI__builtin_rvv_vrem_vx_tuma:
16164 ID = Intrinsic::riscv_vrem_mask;
16165 PolicyAttrs = 2;
16166 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16167 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16168 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16169 break;
16170case RISCVVector::BI__builtin_rvv_vrem_vv_tama:
16171case RISCVVector::BI__builtin_rvv_vrem_vx_tama:
16172 ID = Intrinsic::riscv_vrem_mask;
16173 PolicyAttrs = 3;
16174 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16175 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16176 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16177 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16178 break;
16179case RISCVVector::BI__builtin_rvv_vrem_vv_tumu:
16180case RISCVVector::BI__builtin_rvv_vrem_vx_tumu:
16181 ID = Intrinsic::riscv_vrem_mask;
16182 PolicyAttrs = 0;
16183 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16184 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16185 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16186 break;
16187case RISCVVector::BI__builtin_rvv_vrem_vv_tamu:
16188case RISCVVector::BI__builtin_rvv_vrem_vx_tamu:
16189 ID = Intrinsic::riscv_vrem_mask;
16190 PolicyAttrs = 1;
16191 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16192 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16193 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16194 break;
16195case RISCVVector::BI__builtin_rvv_vremu_vv_tu:
16196case RISCVVector::BI__builtin_rvv_vremu_vx_tu:
16197 ID = Intrinsic::riscv_vremu;
16198 PolicyAttrs = 2;
16199 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16200 break;
16201case RISCVVector::BI__builtin_rvv_vremu_vv_ta:
16202case RISCVVector::BI__builtin_rvv_vremu_vx_ta:
16203 ID = Intrinsic::riscv_vremu;
16204 PolicyAttrs = 3;
16205 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16206 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16207 break;
16208case RISCVVector::BI__builtin_rvv_vremu_vv_tuma:
16209case RISCVVector::BI__builtin_rvv_vremu_vx_tuma:
16210 ID = Intrinsic::riscv_vremu_mask;
16211 PolicyAttrs = 2;
16212 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16213 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16214 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16215 break;
16216case RISCVVector::BI__builtin_rvv_vremu_vv_tama:
16217case RISCVVector::BI__builtin_rvv_vremu_vx_tama:
16218 ID = Intrinsic::riscv_vremu_mask;
16219 PolicyAttrs = 3;
16220 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16221 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16222 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16223 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16224 break;
16225case RISCVVector::BI__builtin_rvv_vremu_vv_tumu:
16226case RISCVVector::BI__builtin_rvv_vremu_vx_tumu:
16227 ID = Intrinsic::riscv_vremu_mask;
16228 PolicyAttrs = 0;
16229 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16230 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16231 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16232 break;
16233case RISCVVector::BI__builtin_rvv_vremu_vv_tamu:
16234case RISCVVector::BI__builtin_rvv_vremu_vx_tamu:
16235 ID = Intrinsic::riscv_vremu_mask;
16236 PolicyAttrs = 1;
16237 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16238 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16239 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16240 break;
16241case RISCVVector::BI__builtin_rvv_vrgather_vv_tu:
16242 ID = Intrinsic::riscv_vrgather_vv;
16243 PolicyAttrs = 2;
16244 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16245 break;
16246case RISCVVector::BI__builtin_rvv_vrgather_vv_ta:
16247 ID = Intrinsic::riscv_vrgather_vv;
16248 PolicyAttrs = 3;
16249 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16250 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16251 break;
16252case RISCVVector::BI__builtin_rvv_vrgather_vv_tuma:
16253 ID = Intrinsic::riscv_vrgather_vv_mask;
16254 PolicyAttrs = 2;
16255 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16256 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16257 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16258 break;
16259case RISCVVector::BI__builtin_rvv_vrgather_vv_tama:
16260 ID = Intrinsic::riscv_vrgather_vv_mask;
16261 PolicyAttrs = 3;
16262 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16263 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16264 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16265 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16266 break;
16267case RISCVVector::BI__builtin_rvv_vrgather_vv_tumu:
16268 ID = Intrinsic::riscv_vrgather_vv_mask;
16269 PolicyAttrs = 0;
16270 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16271 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16272 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16273 break;
16274case RISCVVector::BI__builtin_rvv_vrgather_vv_tamu:
16275 ID = Intrinsic::riscv_vrgather_vv_mask;
16276 PolicyAttrs = 1;
16277 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16278 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16279 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16280 break;
16281case RISCVVector::BI__builtin_rvv_vrgather_vx_tu:
16282 ID = Intrinsic::riscv_vrgather_vx;
16283 PolicyAttrs = 2;
16284 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16285 break;
16286case RISCVVector::BI__builtin_rvv_vrgather_vx_ta:
16287 ID = Intrinsic::riscv_vrgather_vx;
16288 PolicyAttrs = 3;
16289 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16290 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16291 break;
16292case RISCVVector::BI__builtin_rvv_vrgather_vx_tuma:
16293 ID = Intrinsic::riscv_vrgather_vx_mask;
16294 PolicyAttrs = 2;
16295 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16296 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16297 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16298 break;
16299case RISCVVector::BI__builtin_rvv_vrgather_vx_tama:
16300 ID = Intrinsic::riscv_vrgather_vx_mask;
16301 PolicyAttrs = 3;
16302 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16303 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16304 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16305 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16306 break;
16307case RISCVVector::BI__builtin_rvv_vrgather_vx_tumu:
16308 ID = Intrinsic::riscv_vrgather_vx_mask;
16309 PolicyAttrs = 0;
16310 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16311 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16312 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16313 break;
16314case RISCVVector::BI__builtin_rvv_vrgather_vx_tamu:
16315 ID = Intrinsic::riscv_vrgather_vx_mask;
16316 PolicyAttrs = 1;
16317 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16318 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16319 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16320 break;
16321case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tu:
16322 ID = Intrinsic::riscv_vrgatherei16_vv;
16323 PolicyAttrs = 2;
16324 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16325 break;
16326case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_ta:
16327 ID = Intrinsic::riscv_vrgatherei16_vv;
16328 PolicyAttrs = 3;
16329 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16330 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16331 break;
16332case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tuma:
16333 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16334 PolicyAttrs = 2;
16335 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16336 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16337 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16338 break;
16339case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tama:
16340 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16341 PolicyAttrs = 3;
16342 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16343 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16344 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16345 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16346 break;
16347case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tumu:
16348 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16349 PolicyAttrs = 0;
16350 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16351 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16352 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16353 break;
16354case RISCVVector::BI__builtin_rvv_vrgatherei16_vv_tamu:
16355 ID = Intrinsic::riscv_vrgatherei16_vv_mask;
16356 PolicyAttrs = 1;
16357 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16358 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16359 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16360 break;
16361case RISCVVector::BI__builtin_rvv_vrsub_vx_tu:
16362 ID = Intrinsic::riscv_vrsub;
16363 PolicyAttrs = 2;
16364 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16365 break;
16366case RISCVVector::BI__builtin_rvv_vneg_v_tu:
16367 ID = Intrinsic::riscv_vrsub;
16368 PolicyAttrs = 2;
16369IsMasked = false;
16370
16371 {
16372 if (IsMasked) {
16373 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16374 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16375 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16376 } else {
16377 if (PolicyAttrs & RVV_VTA)
16378 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16379 }
16380 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16381 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16382
16383 if (IsMasked) {
16384 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16385 // maskedoff, op1, op2, mask, vl, policy
16386 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16387 } else {
16388 // passthru, op1, op2, vl
16389 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16390 }
16391 break;
16392 }
16393 break;
16394case RISCVVector::BI__builtin_rvv_vrsub_vx_ta:
16395 ID = Intrinsic::riscv_vrsub;
16396 PolicyAttrs = 3;
16397 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16398 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16399 break;
16400case RISCVVector::BI__builtin_rvv_vneg_v_ta:
16401 ID = Intrinsic::riscv_vrsub;
16402 PolicyAttrs = 3;
16403IsMasked = false;
16404
16405 {
16406 if (IsMasked) {
16407 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16408 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16409 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16410 } else {
16411 if (PolicyAttrs & RVV_VTA)
16412 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16413 }
16414 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16415 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16416
16417 if (IsMasked) {
16418 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16419 // maskedoff, op1, op2, mask, vl, policy
16420 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16421 } else {
16422 // passthru, op1, op2, vl
16423 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16424 }
16425 break;
16426 }
16427 break;
16428case RISCVVector::BI__builtin_rvv_vrsub_vx_tuma:
16429 ID = Intrinsic::riscv_vrsub_mask;
16430 PolicyAttrs = 2;
16431 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16432 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16433 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16434 break;
16435case RISCVVector::BI__builtin_rvv_vneg_v_tuma:
16436 ID = Intrinsic::riscv_vrsub_mask;
16437 PolicyAttrs = 2;
16438IsMasked = true;
16439
16440 {
16441 if (IsMasked) {
16442 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16443 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16444 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16445 } else {
16446 if (PolicyAttrs & RVV_VTA)
16447 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16448 }
16449 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16450 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16451
16452 if (IsMasked) {
16453 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16454 // maskedoff, op1, op2, mask, vl, policy
16455 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16456 } else {
16457 // passthru, op1, op2, vl
16458 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16459 }
16460 break;
16461 }
16462 break;
16463case RISCVVector::BI__builtin_rvv_vrsub_vx_tama:
16464 ID = Intrinsic::riscv_vrsub_mask;
16465 PolicyAttrs = 3;
16466 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16467 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16468 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16469 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16470 break;
16471case RISCVVector::BI__builtin_rvv_vneg_v_tama:
16472 ID = Intrinsic::riscv_vrsub_mask;
16473 PolicyAttrs = 3;
16474IsMasked = true;
16475
16476 {
16477 if (IsMasked) {
16478 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16479 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16480 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16481 } else {
16482 if (PolicyAttrs & RVV_VTA)
16483 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16484 }
16485 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16486 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16487
16488 if (IsMasked) {
16489 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16490 // maskedoff, op1, op2, mask, vl, policy
16491 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16492 } else {
16493 // passthru, op1, op2, vl
16494 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16495 }
16496 break;
16497 }
16498 break;
16499case RISCVVector::BI__builtin_rvv_vrsub_vx_tumu:
16500 ID = Intrinsic::riscv_vrsub_mask;
16501 PolicyAttrs = 0;
16502 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16503 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16504 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16505 break;
16506case RISCVVector::BI__builtin_rvv_vneg_v_tumu:
16507 ID = Intrinsic::riscv_vrsub_mask;
16508 PolicyAttrs = 0;
16509IsMasked = true;
16510
16511 {
16512 if (IsMasked) {
16513 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16514 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16515 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16516 } else {
16517 if (PolicyAttrs & RVV_VTA)
16518 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16519 }
16520 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16521 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16522
16523 if (IsMasked) {
16524 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16525 // maskedoff, op1, op2, mask, vl, policy
16526 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16527 } else {
16528 // passthru, op1, op2, vl
16529 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16530 }
16531 break;
16532 }
16533 break;
16534case RISCVVector::BI__builtin_rvv_vrsub_vx_tamu:
16535 ID = Intrinsic::riscv_vrsub_mask;
16536 PolicyAttrs = 1;
16537 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16538 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16539 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16540 break;
16541case RISCVVector::BI__builtin_rvv_vneg_v_tamu:
16542 ID = Intrinsic::riscv_vrsub_mask;
16543 PolicyAttrs = 1;
16544IsMasked = true;
16545
16546 {
16547 if (IsMasked) {
16548 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16549 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16550 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16551 } else {
16552 if (PolicyAttrs & RVV_VTA)
16553 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16554 }
16555 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
16556 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
16557
16558 if (IsMasked) {
16559 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16560 // maskedoff, op1, op2, mask, vl, policy
16561 IntrinsicTypes = {ResultType, ElemTy, Ops[4]->getType()};
16562 } else {
16563 // passthru, op1, op2, vl
16564 IntrinsicTypes = {ResultType, ElemTy, Ops[3]->getType()};
16565 }
16566 break;
16567 }
16568 break;
16569case RISCVVector::BI__builtin_rvv_vsadd_vv_tu:
16570case RISCVVector::BI__builtin_rvv_vsadd_vx_tu:
16571 ID = Intrinsic::riscv_vsadd;
16572 PolicyAttrs = 2;
16573 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16574 break;
16575case RISCVVector::BI__builtin_rvv_vsadd_vv_ta:
16576case RISCVVector::BI__builtin_rvv_vsadd_vx_ta:
16577 ID = Intrinsic::riscv_vsadd;
16578 PolicyAttrs = 3;
16579 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16580 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16581 break;
16582case RISCVVector::BI__builtin_rvv_vsadd_vv_tuma:
16583case RISCVVector::BI__builtin_rvv_vsadd_vx_tuma:
16584 ID = Intrinsic::riscv_vsadd_mask;
16585 PolicyAttrs = 2;
16586 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16587 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16588 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16589 break;
16590case RISCVVector::BI__builtin_rvv_vsadd_vv_tama:
16591case RISCVVector::BI__builtin_rvv_vsadd_vx_tama:
16592 ID = Intrinsic::riscv_vsadd_mask;
16593 PolicyAttrs = 3;
16594 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16595 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16596 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16597 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16598 break;
16599case RISCVVector::BI__builtin_rvv_vsadd_vv_tumu:
16600case RISCVVector::BI__builtin_rvv_vsadd_vx_tumu:
16601 ID = Intrinsic::riscv_vsadd_mask;
16602 PolicyAttrs = 0;
16603 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16604 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16605 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16606 break;
16607case RISCVVector::BI__builtin_rvv_vsadd_vv_tamu:
16608case RISCVVector::BI__builtin_rvv_vsadd_vx_tamu:
16609 ID = Intrinsic::riscv_vsadd_mask;
16610 PolicyAttrs = 1;
16611 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16612 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16613 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16614 break;
16615case RISCVVector::BI__builtin_rvv_vsaddu_vv_tu:
16616case RISCVVector::BI__builtin_rvv_vsaddu_vx_tu:
16617 ID = Intrinsic::riscv_vsaddu;
16618 PolicyAttrs = 2;
16619 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16620 break;
16621case RISCVVector::BI__builtin_rvv_vsaddu_vv_ta:
16622case RISCVVector::BI__builtin_rvv_vsaddu_vx_ta:
16623 ID = Intrinsic::riscv_vsaddu;
16624 PolicyAttrs = 3;
16625 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16626 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16627 break;
16628case RISCVVector::BI__builtin_rvv_vsaddu_vv_tuma:
16629case RISCVVector::BI__builtin_rvv_vsaddu_vx_tuma:
16630 ID = Intrinsic::riscv_vsaddu_mask;
16631 PolicyAttrs = 2;
16632 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16633 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16634 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16635 break;
16636case RISCVVector::BI__builtin_rvv_vsaddu_vv_tama:
16637case RISCVVector::BI__builtin_rvv_vsaddu_vx_tama:
16638 ID = Intrinsic::riscv_vsaddu_mask;
16639 PolicyAttrs = 3;
16640 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16641 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16642 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16643 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16644 break;
16645case RISCVVector::BI__builtin_rvv_vsaddu_vv_tumu:
16646case RISCVVector::BI__builtin_rvv_vsaddu_vx_tumu:
16647 ID = Intrinsic::riscv_vsaddu_mask;
16648 PolicyAttrs = 0;
16649 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16650 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16651 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16652 break;
16653case RISCVVector::BI__builtin_rvv_vsaddu_vv_tamu:
16654case RISCVVector::BI__builtin_rvv_vsaddu_vx_tamu:
16655 ID = Intrinsic::riscv_vsaddu_mask;
16656 PolicyAttrs = 1;
16657 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16658 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16659 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16660 break;
16661case RISCVVector::BI__builtin_rvv_vsbc_vvm_tu:
16662case RISCVVector::BI__builtin_rvv_vsbc_vxm_tu:
16663 ID = Intrinsic::riscv_vsbc;
16664 PolicyAttrs = 2;
16665 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16666 break;
16667case RISCVVector::BI__builtin_rvv_vsbc_vvm_ta:
16668case RISCVVector::BI__builtin_rvv_vsbc_vxm_ta:
16669 ID = Intrinsic::riscv_vsbc;
16670 PolicyAttrs = 3;
16671 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16672 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16673 break;
16674case RISCVVector::BI__builtin_rvv_vse8_v:
16675case RISCVVector::BI__builtin_rvv_vse16_v:
16676case RISCVVector::BI__builtin_rvv_vse32_v:
16677case RISCVVector::BI__builtin_rvv_vse64_v:
16678 ID = Intrinsic::riscv_vse;
16679 PolicyAttrs = 3;
16680IsMasked = false;
16681
16682 if (IsMasked) {
16683 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
16684 std::swap(Ops[0], Ops[2]);
16685 } else {
16686 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
16687 std::swap(Ops[0], Ops[1]);
16688 }
16689 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
16690 if (IsMasked)
16691 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
16692 else
16693 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
16694 break;
16695case RISCVVector::BI__builtin_rvv_vse8_v_m:
16696case RISCVVector::BI__builtin_rvv_vse16_v_m:
16697case RISCVVector::BI__builtin_rvv_vse32_v_m:
16698case RISCVVector::BI__builtin_rvv_vse64_v_m:
16699 ID = Intrinsic::riscv_vse_mask;
16700 PolicyAttrs = 3;
16701IsMasked = true;
16702
16703 if (IsMasked) {
16704 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
16705 std::swap(Ops[0], Ops[2]);
16706 } else {
16707 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
16708 std::swap(Ops[0], Ops[1]);
16709 }
16710 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
16711 if (IsMasked)
16712 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
16713 else
16714 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
16715 break;
16716case RISCVVector::BI__builtin_rvv_vsetvli:
16717 ID = Intrinsic::riscv_vsetvli;
16718 PolicyAttrs = 3;
16719IsMasked = false;
16720IntrinsicTypes = {ResultType};break;
16721case RISCVVector::BI__builtin_rvv_vsetvlimax:
16722 ID = Intrinsic::riscv_vsetvlimax;
16723 PolicyAttrs = 3;
16724IsMasked = false;
16725IntrinsicTypes = {ResultType};break;
16726case RISCVVector::BI__builtin_rvv_vsext_vf2_tu:
16727case RISCVVector::BI__builtin_rvv_vsext_vf4_tu:
16728case RISCVVector::BI__builtin_rvv_vsext_vf8_tu:
16729 ID = Intrinsic::riscv_vsext;
16730 PolicyAttrs = 2;
16731 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16732 break;
16733case RISCVVector::BI__builtin_rvv_vsext_vf2_ta:
16734case RISCVVector::BI__builtin_rvv_vsext_vf4_ta:
16735case RISCVVector::BI__builtin_rvv_vsext_vf8_ta:
16736 ID = Intrinsic::riscv_vsext;
16737 PolicyAttrs = 3;
16738 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16739 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16740 break;
16741case RISCVVector::BI__builtin_rvv_vsext_vf2_tuma:
16742case RISCVVector::BI__builtin_rvv_vsext_vf4_tuma:
16743case RISCVVector::BI__builtin_rvv_vsext_vf8_tuma:
16744 ID = Intrinsic::riscv_vsext_mask;
16745 PolicyAttrs = 2;
16746 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16747 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16748 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16749 break;
16750case RISCVVector::BI__builtin_rvv_vsext_vf2_tama:
16751case RISCVVector::BI__builtin_rvv_vsext_vf4_tama:
16752case RISCVVector::BI__builtin_rvv_vsext_vf8_tama:
16753 ID = Intrinsic::riscv_vsext_mask;
16754 PolicyAttrs = 3;
16755 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16756 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16757 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16758 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16759 break;
16760case RISCVVector::BI__builtin_rvv_vsext_vf2_tumu:
16761case RISCVVector::BI__builtin_rvv_vsext_vf4_tumu:
16762case RISCVVector::BI__builtin_rvv_vsext_vf8_tumu:
16763 ID = Intrinsic::riscv_vsext_mask;
16764 PolicyAttrs = 0;
16765 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16766 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16767 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16768 break;
16769case RISCVVector::BI__builtin_rvv_vsext_vf2_tamu:
16770case RISCVVector::BI__builtin_rvv_vsext_vf4_tamu:
16771case RISCVVector::BI__builtin_rvv_vsext_vf8_tamu:
16772 ID = Intrinsic::riscv_vsext_mask;
16773 PolicyAttrs = 1;
16774 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16775 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16776 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
16777 break;
16778case RISCVVector::BI__builtin_rvv_vslide1down_vx_tu:
16779 ID = Intrinsic::riscv_vslide1down;
16780 PolicyAttrs = 2;
16781 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16782 break;
16783case RISCVVector::BI__builtin_rvv_vslide1down_vx_ta:
16784 ID = Intrinsic::riscv_vslide1down;
16785 PolicyAttrs = 3;
16786 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16787 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16788 break;
16789case RISCVVector::BI__builtin_rvv_vslide1down_vx_tuma:
16790 ID = Intrinsic::riscv_vslide1down_mask;
16791 PolicyAttrs = 2;
16792 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16793 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16794 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16795 break;
16796case RISCVVector::BI__builtin_rvv_vslide1down_vx_tama:
16797 ID = Intrinsic::riscv_vslide1down_mask;
16798 PolicyAttrs = 3;
16799 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16800 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16801 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16802 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16803 break;
16804case RISCVVector::BI__builtin_rvv_vslide1down_vx_tumu:
16805 ID = Intrinsic::riscv_vslide1down_mask;
16806 PolicyAttrs = 0;
16807 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16808 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16809 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16810 break;
16811case RISCVVector::BI__builtin_rvv_vslide1down_vx_tamu:
16812 ID = Intrinsic::riscv_vslide1down_mask;
16813 PolicyAttrs = 1;
16814 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16815 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16816 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16817 break;
16818case RISCVVector::BI__builtin_rvv_vslide1up_vx_tu:
16819 ID = Intrinsic::riscv_vslide1up;
16820 PolicyAttrs = 2;
16821 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16822 break;
16823case RISCVVector::BI__builtin_rvv_vslide1up_vx_ta:
16824 ID = Intrinsic::riscv_vslide1up;
16825 PolicyAttrs = 3;
16826 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16827 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16828 break;
16829case RISCVVector::BI__builtin_rvv_vslide1up_vx_tuma:
16830 ID = Intrinsic::riscv_vslide1up_mask;
16831 PolicyAttrs = 2;
16832 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16833 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16834 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16835 break;
16836case RISCVVector::BI__builtin_rvv_vslide1up_vx_tama:
16837 ID = Intrinsic::riscv_vslide1up_mask;
16838 PolicyAttrs = 3;
16839 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16840 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16841 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16842 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16843 break;
16844case RISCVVector::BI__builtin_rvv_vslide1up_vx_tumu:
16845 ID = Intrinsic::riscv_vslide1up_mask;
16846 PolicyAttrs = 0;
16847 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16848 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16849 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16850 break;
16851case RISCVVector::BI__builtin_rvv_vslide1up_vx_tamu:
16852 ID = Intrinsic::riscv_vslide1up_mask;
16853 PolicyAttrs = 1;
16854 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16855 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16856 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
16857 break;
16858case RISCVVector::BI__builtin_rvv_vslidedown_vx_tu:
16859 ID = Intrinsic::riscv_vslidedown;
16860 PolicyAttrs = 2;
16861IsMasked = false;
16862
16863 if (IsMasked) {
16864 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16865 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16866 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16867 } else {
16868 if (PolicyAttrs & RVV_VTA)
16869 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16870 }
16871
16872 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16873 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16874 break;
16875case RISCVVector::BI__builtin_rvv_vslidedown_vx_ta:
16876 ID = Intrinsic::riscv_vslidedown;
16877 PolicyAttrs = 3;
16878IsMasked = false;
16879
16880 if (IsMasked) {
16881 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16882 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16883 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16884 } else {
16885 if (PolicyAttrs & RVV_VTA)
16886 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16887 }
16888
16889 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16890 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16891 break;
16892case RISCVVector::BI__builtin_rvv_vslidedown_vx_tuma:
16893 ID = Intrinsic::riscv_vslidedown_mask;
16894 PolicyAttrs = 2;
16895IsMasked = true;
16896
16897 if (IsMasked) {
16898 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16899 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16900 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16901 } else {
16902 if (PolicyAttrs & RVV_VTA)
16903 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16904 }
16905
16906 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16907 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16908 break;
16909case RISCVVector::BI__builtin_rvv_vslidedown_vx_tama:
16910 ID = Intrinsic::riscv_vslidedown_mask;
16911 PolicyAttrs = 3;
16912IsMasked = true;
16913
16914 if (IsMasked) {
16915 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16916 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16917 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16918 } else {
16919 if (PolicyAttrs & RVV_VTA)
16920 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16921 }
16922
16923 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16924 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16925 break;
16926case RISCVVector::BI__builtin_rvv_vslidedown_vx_tumu:
16927 ID = Intrinsic::riscv_vslidedown_mask;
16928 PolicyAttrs = 0;
16929IsMasked = true;
16930
16931 if (IsMasked) {
16932 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16933 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16934 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16935 } else {
16936 if (PolicyAttrs & RVV_VTA)
16937 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16938 }
16939
16940 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16941 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16942 break;
16943case RISCVVector::BI__builtin_rvv_vslidedown_vx_tamu:
16944 ID = Intrinsic::riscv_vslidedown_mask;
16945 PolicyAttrs = 1;
16946IsMasked = true;
16947
16948 if (IsMasked) {
16949 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16950 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
16951 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16952 } else {
16953 if (PolicyAttrs & RVV_VTA)
16954 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
16955 }
16956
16957 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16958 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16959 break;
16960case RISCVVector::BI__builtin_rvv_vslideup_vx_tu:
16961 ID = Intrinsic::riscv_vslideup;
16962 PolicyAttrs = 2;
16963 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16964 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16965 break;
16966case RISCVVector::BI__builtin_rvv_vslideup_vx_ta:
16967 ID = Intrinsic::riscv_vslideup;
16968 PolicyAttrs = 3;
16969 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16970 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16971 break;
16972case RISCVVector::BI__builtin_rvv_vslideup_vx_tuma:
16973 ID = Intrinsic::riscv_vslideup_mask;
16974 PolicyAttrs = 2;
16975 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16976 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16977 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16978 break;
16979case RISCVVector::BI__builtin_rvv_vslideup_vx_tama:
16980 ID = Intrinsic::riscv_vslideup_mask;
16981 PolicyAttrs = 3;
16982 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16983 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16984 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16985 break;
16986case RISCVVector::BI__builtin_rvv_vslideup_vx_tumu:
16987 ID = Intrinsic::riscv_vslideup_mask;
16988 PolicyAttrs = 0;
16989 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16990 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16991 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16992 break;
16993case RISCVVector::BI__builtin_rvv_vslideup_vx_tamu:
16994 ID = Intrinsic::riscv_vslideup_mask;
16995 PolicyAttrs = 1;
16996 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
16997 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
16998 IntrinsicTypes = {ResultType, Ops.back()->getType()};
16999 break;
17000case RISCVVector::BI__builtin_rvv_vsll_vv_tu:
17001case RISCVVector::BI__builtin_rvv_vsll_vx_tu:
17002 ID = Intrinsic::riscv_vsll;
17003 PolicyAttrs = 2;
17004 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17005 break;
17006case RISCVVector::BI__builtin_rvv_vsll_vv_ta:
17007case RISCVVector::BI__builtin_rvv_vsll_vx_ta:
17008 ID = Intrinsic::riscv_vsll;
17009 PolicyAttrs = 3;
17010 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17011 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17012 break;
17013case RISCVVector::BI__builtin_rvv_vsll_vv_tuma:
17014case RISCVVector::BI__builtin_rvv_vsll_vx_tuma:
17015 ID = Intrinsic::riscv_vsll_mask;
17016 PolicyAttrs = 2;
17017 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17018 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17019 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17020 break;
17021case RISCVVector::BI__builtin_rvv_vsll_vv_tama:
17022case RISCVVector::BI__builtin_rvv_vsll_vx_tama:
17023 ID = Intrinsic::riscv_vsll_mask;
17024 PolicyAttrs = 3;
17025 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17026 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17027 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17028 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17029 break;
17030case RISCVVector::BI__builtin_rvv_vsll_vv_tumu:
17031case RISCVVector::BI__builtin_rvv_vsll_vx_tumu:
17032 ID = Intrinsic::riscv_vsll_mask;
17033 PolicyAttrs = 0;
17034 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17035 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17036 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17037 break;
17038case RISCVVector::BI__builtin_rvv_vsll_vv_tamu:
17039case RISCVVector::BI__builtin_rvv_vsll_vx_tamu:
17040 ID = Intrinsic::riscv_vsll_mask;
17041 PolicyAttrs = 1;
17042 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17043 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17044 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17045 break;
17046case RISCVVector::BI__builtin_rvv_vsm_v:
17047 ID = Intrinsic::riscv_vsm;
17048 PolicyAttrs = 3;
17049IsMasked = false;
17050
17051 if (IsMasked) {
17052 // Builtin: (mask, ptr, value, vl). Intrinsic: (value, ptr, mask, vl)
17053 std::swap(Ops[0], Ops[2]);
17054 } else {
17055 // Builtin: (ptr, value, vl). Intrinsic: (value, ptr, vl)
17056 std::swap(Ops[0], Ops[1]);
17057 }
17058 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17059 if (IsMasked)
17060 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17061 else
17062 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType()};
17063 break;
17064case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:
17065case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:
17066 ID = Intrinsic::riscv_vsmul;
17067 PolicyAttrs = 2;
17068 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17069 break;
17070case RISCVVector::BI__builtin_rvv_vsmul_vv_ta:
17071case RISCVVector::BI__builtin_rvv_vsmul_vx_ta:
17072 ID = Intrinsic::riscv_vsmul;
17073 PolicyAttrs = 3;
17074 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17075 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17076 break;
17077case RISCVVector::BI__builtin_rvv_vsmul_vv_tuma:
17078case RISCVVector::BI__builtin_rvv_vsmul_vx_tuma:
17079 ID = Intrinsic::riscv_vsmul_mask;
17080 PolicyAttrs = 2;
17081 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17082 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17083 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17084 break;
17085case RISCVVector::BI__builtin_rvv_vsmul_vv_tama:
17086case RISCVVector::BI__builtin_rvv_vsmul_vx_tama:
17087 ID = Intrinsic::riscv_vsmul_mask;
17088 PolicyAttrs = 3;
17089 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17090 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17091 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17092 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17093 break;
17094case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:
17095case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu:
17096 ID = Intrinsic::riscv_vsmul_mask;
17097 PolicyAttrs = 0;
17098 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17099 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17100 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17101 break;
17102case RISCVVector::BI__builtin_rvv_vsmul_vv_tamu:
17103case RISCVVector::BI__builtin_rvv_vsmul_vx_tamu:
17104 ID = Intrinsic::riscv_vsmul_mask;
17105 PolicyAttrs = 1;
17106 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17107 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17108 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17109 break;
17110case RISCVVector::BI__builtin_rvv_vsoxei8_v:
17111case RISCVVector::BI__builtin_rvv_vsoxei16_v:
17112case RISCVVector::BI__builtin_rvv_vsoxei32_v:
17113case RISCVVector::BI__builtin_rvv_vsoxei64_v:
17114 ID = Intrinsic::riscv_vsoxei;
17115 PolicyAttrs = 3;
17116IsMasked = false;
17117
17118 if (IsMasked) {
17119 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
17120 std::swap(Ops[0], Ops[3]);
17121 } else {
17122 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
17123 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17124 }
17125 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17126 if (IsMasked)
17127 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
17128 else
17129 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
17130 break;
17131case RISCVVector::BI__builtin_rvv_vsoxei8_v_m:
17132case RISCVVector::BI__builtin_rvv_vsoxei16_v_m:
17133case RISCVVector::BI__builtin_rvv_vsoxei32_v_m:
17134case RISCVVector::BI__builtin_rvv_vsoxei64_v_m:
17135 ID = Intrinsic::riscv_vsoxei_mask;
17136 PolicyAttrs = 3;
17137IsMasked = true;
17138
17139 if (IsMasked) {
17140 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
17141 std::swap(Ops[0], Ops[3]);
17142 } else {
17143 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
17144 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17145 }
17146 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17147 if (IsMasked)
17148 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
17149 else
17150 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
17151 break;
17152case RISCVVector::BI__builtin_rvv_vsoxseg2ei8_v:
17153case RISCVVector::BI__builtin_rvv_vsoxseg2ei16_v:
17154case RISCVVector::BI__builtin_rvv_vsoxseg2ei32_v:
17155case RISCVVector::BI__builtin_rvv_vsoxseg2ei64_v:
17156 ID = Intrinsic::riscv_vsoxseg2;
17157 NF = 2;
17158 PolicyAttrs = 3;
17159IsMasked = false;
17160
17161 {
17162 if (IsMasked) {
17163 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17164 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17165 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17166 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17167 IntrinsicTypes = {Ops[0]->getType(),
17168 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17169 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"
, 17169, __extension__ __PRETTY_FUNCTION__))
;
17170 } else {
17171 // Builtin: (ptr, index, val0, val1, ..., vl)
17172 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17173 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17174 IntrinsicTypes = {Ops[0]->getType(),
17175 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17176 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"
, 17176, __extension__ __PRETTY_FUNCTION__))
;
17177 }
17178 }
17179 break;
17180case RISCVVector::BI__builtin_rvv_vsoxseg2ei8_v_m:
17181case RISCVVector::BI__builtin_rvv_vsoxseg2ei16_v_m:
17182case RISCVVector::BI__builtin_rvv_vsoxseg2ei32_v_m:
17183case RISCVVector::BI__builtin_rvv_vsoxseg2ei64_v_m:
17184 ID = Intrinsic::riscv_vsoxseg2_mask;
17185 NF = 2;
17186 PolicyAttrs = 3;
17187IsMasked = true;
17188
17189 {
17190 if (IsMasked) {
17191 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17192 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17193 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17194 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17195 IntrinsicTypes = {Ops[0]->getType(),
17196 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17197 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"
, 17197, __extension__ __PRETTY_FUNCTION__))
;
17198 } else {
17199 // Builtin: (ptr, index, val0, val1, ..., vl)
17200 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17201 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17202 IntrinsicTypes = {Ops[0]->getType(),
17203 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17204 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"
, 17204, __extension__ __PRETTY_FUNCTION__))
;
17205 }
17206 }
17207 break;
17208case RISCVVector::BI__builtin_rvv_vsoxseg3ei8_v:
17209case RISCVVector::BI__builtin_rvv_vsoxseg3ei16_v:
17210case RISCVVector::BI__builtin_rvv_vsoxseg3ei32_v:
17211case RISCVVector::BI__builtin_rvv_vsoxseg3ei64_v:
17212 ID = Intrinsic::riscv_vsoxseg3;
17213 NF = 3;
17214 PolicyAttrs = 3;
17215IsMasked = false;
17216
17217 {
17218 if (IsMasked) {
17219 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17220 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17221 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17222 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17223 IntrinsicTypes = {Ops[0]->getType(),
17224 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17225 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"
, 17225, __extension__ __PRETTY_FUNCTION__))
;
17226 } else {
17227 // Builtin: (ptr, index, val0, val1, ..., vl)
17228 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17229 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17230 IntrinsicTypes = {Ops[0]->getType(),
17231 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17232 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"
, 17232, __extension__ __PRETTY_FUNCTION__))
;
17233 }
17234 }
17235 break;
17236case RISCVVector::BI__builtin_rvv_vsoxseg3ei8_v_m:
17237case RISCVVector::BI__builtin_rvv_vsoxseg3ei16_v_m:
17238case RISCVVector::BI__builtin_rvv_vsoxseg3ei32_v_m:
17239case RISCVVector::BI__builtin_rvv_vsoxseg3ei64_v_m:
17240 ID = Intrinsic::riscv_vsoxseg3_mask;
17241 NF = 3;
17242 PolicyAttrs = 3;
17243IsMasked = true;
17244
17245 {
17246 if (IsMasked) {
17247 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17248 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17249 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17250 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17251 IntrinsicTypes = {Ops[0]->getType(),
17252 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17253 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"
, 17253, __extension__ __PRETTY_FUNCTION__))
;
17254 } else {
17255 // Builtin: (ptr, index, val0, val1, ..., vl)
17256 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17257 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17258 IntrinsicTypes = {Ops[0]->getType(),
17259 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17260 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"
, 17260, __extension__ __PRETTY_FUNCTION__))
;
17261 }
17262 }
17263 break;
17264case RISCVVector::BI__builtin_rvv_vsoxseg4ei8_v:
17265case RISCVVector::BI__builtin_rvv_vsoxseg4ei16_v:
17266case RISCVVector::BI__builtin_rvv_vsoxseg4ei32_v:
17267case RISCVVector::BI__builtin_rvv_vsoxseg4ei64_v:
17268 ID = Intrinsic::riscv_vsoxseg4;
17269 NF = 4;
17270 PolicyAttrs = 3;
17271IsMasked = false;
17272
17273 {
17274 if (IsMasked) {
17275 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17276 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17277 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17278 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17279 IntrinsicTypes = {Ops[0]->getType(),
17280 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17281 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"
, 17281, __extension__ __PRETTY_FUNCTION__))
;
17282 } else {
17283 // Builtin: (ptr, index, val0, val1, ..., vl)
17284 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17285 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17286 IntrinsicTypes = {Ops[0]->getType(),
17287 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17288 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"
, 17288, __extension__ __PRETTY_FUNCTION__))
;
17289 }
17290 }
17291 break;
17292case RISCVVector::BI__builtin_rvv_vsoxseg4ei8_v_m:
17293case RISCVVector::BI__builtin_rvv_vsoxseg4ei16_v_m:
17294case RISCVVector::BI__builtin_rvv_vsoxseg4ei32_v_m:
17295case RISCVVector::BI__builtin_rvv_vsoxseg4ei64_v_m:
17296 ID = Intrinsic::riscv_vsoxseg4_mask;
17297 NF = 4;
17298 PolicyAttrs = 3;
17299IsMasked = true;
17300
17301 {
17302 if (IsMasked) {
17303 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17304 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17305 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17306 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17307 IntrinsicTypes = {Ops[0]->getType(),
17308 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17309 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"
, 17309, __extension__ __PRETTY_FUNCTION__))
;
17310 } else {
17311 // Builtin: (ptr, index, val0, val1, ..., vl)
17312 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17313 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17314 IntrinsicTypes = {Ops[0]->getType(),
17315 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17316 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"
, 17316, __extension__ __PRETTY_FUNCTION__))
;
17317 }
17318 }
17319 break;
17320case RISCVVector::BI__builtin_rvv_vsoxseg5ei8_v:
17321case RISCVVector::BI__builtin_rvv_vsoxseg5ei16_v:
17322case RISCVVector::BI__builtin_rvv_vsoxseg5ei32_v:
17323case RISCVVector::BI__builtin_rvv_vsoxseg5ei64_v:
17324 ID = Intrinsic::riscv_vsoxseg5;
17325 NF = 5;
17326 PolicyAttrs = 3;
17327IsMasked = false;
17328
17329 {
17330 if (IsMasked) {
17331 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17332 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17333 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17334 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17335 IntrinsicTypes = {Ops[0]->getType(),
17336 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17337 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"
, 17337, __extension__ __PRETTY_FUNCTION__))
;
17338 } else {
17339 // Builtin: (ptr, index, val0, val1, ..., vl)
17340 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17341 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17342 IntrinsicTypes = {Ops[0]->getType(),
17343 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17344 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"
, 17344, __extension__ __PRETTY_FUNCTION__))
;
17345 }
17346 }
17347 break;
17348case RISCVVector::BI__builtin_rvv_vsoxseg5ei8_v_m:
17349case RISCVVector::BI__builtin_rvv_vsoxseg5ei16_v_m:
17350case RISCVVector::BI__builtin_rvv_vsoxseg5ei32_v_m:
17351case RISCVVector::BI__builtin_rvv_vsoxseg5ei64_v_m:
17352 ID = Intrinsic::riscv_vsoxseg5_mask;
17353 NF = 5;
17354 PolicyAttrs = 3;
17355IsMasked = true;
17356
17357 {
17358 if (IsMasked) {
17359 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17360 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17361 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17362 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17363 IntrinsicTypes = {Ops[0]->getType(),
17364 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17365 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"
, 17365, __extension__ __PRETTY_FUNCTION__))
;
17366 } else {
17367 // Builtin: (ptr, index, val0, val1, ..., vl)
17368 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17369 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17370 IntrinsicTypes = {Ops[0]->getType(),
17371 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17372 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"
, 17372, __extension__ __PRETTY_FUNCTION__))
;
17373 }
17374 }
17375 break;
17376case RISCVVector::BI__builtin_rvv_vsoxseg6ei8_v:
17377case RISCVVector::BI__builtin_rvv_vsoxseg6ei16_v:
17378case RISCVVector::BI__builtin_rvv_vsoxseg6ei32_v:
17379case RISCVVector::BI__builtin_rvv_vsoxseg6ei64_v:
17380 ID = Intrinsic::riscv_vsoxseg6;
17381 NF = 6;
17382 PolicyAttrs = 3;
17383IsMasked = false;
17384
17385 {
17386 if (IsMasked) {
17387 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17388 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17389 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17390 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17391 IntrinsicTypes = {Ops[0]->getType(),
17392 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17393 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"
, 17393, __extension__ __PRETTY_FUNCTION__))
;
17394 } else {
17395 // Builtin: (ptr, index, val0, val1, ..., vl)
17396 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17397 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17398 IntrinsicTypes = {Ops[0]->getType(),
17399 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17400 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"
, 17400, __extension__ __PRETTY_FUNCTION__))
;
17401 }
17402 }
17403 break;
17404case RISCVVector::BI__builtin_rvv_vsoxseg6ei8_v_m:
17405case RISCVVector::BI__builtin_rvv_vsoxseg6ei16_v_m:
17406case RISCVVector::BI__builtin_rvv_vsoxseg6ei32_v_m:
17407case RISCVVector::BI__builtin_rvv_vsoxseg6ei64_v_m:
17408 ID = Intrinsic::riscv_vsoxseg6_mask;
17409 NF = 6;
17410 PolicyAttrs = 3;
17411IsMasked = true;
17412
17413 {
17414 if (IsMasked) {
17415 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17416 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17417 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17418 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17419 IntrinsicTypes = {Ops[0]->getType(),
17420 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17421 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"
, 17421, __extension__ __PRETTY_FUNCTION__))
;
17422 } else {
17423 // Builtin: (ptr, index, val0, val1, ..., vl)
17424 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17425 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17426 IntrinsicTypes = {Ops[0]->getType(),
17427 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17428 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"
, 17428, __extension__ __PRETTY_FUNCTION__))
;
17429 }
17430 }
17431 break;
17432case RISCVVector::BI__builtin_rvv_vsoxseg7ei8_v:
17433case RISCVVector::BI__builtin_rvv_vsoxseg7ei16_v:
17434case RISCVVector::BI__builtin_rvv_vsoxseg7ei32_v:
17435case RISCVVector::BI__builtin_rvv_vsoxseg7ei64_v:
17436 ID = Intrinsic::riscv_vsoxseg7;
17437 NF = 7;
17438 PolicyAttrs = 3;
17439IsMasked = false;
17440
17441 {
17442 if (IsMasked) {
17443 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17444 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17445 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17446 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17447 IntrinsicTypes = {Ops[0]->getType(),
17448 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17449 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"
, 17449, __extension__ __PRETTY_FUNCTION__))
;
17450 } else {
17451 // Builtin: (ptr, index, val0, val1, ..., vl)
17452 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17453 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17454 IntrinsicTypes = {Ops[0]->getType(),
17455 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17456 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"
, 17456, __extension__ __PRETTY_FUNCTION__))
;
17457 }
17458 }
17459 break;
17460case RISCVVector::BI__builtin_rvv_vsoxseg7ei8_v_m:
17461case RISCVVector::BI__builtin_rvv_vsoxseg7ei16_v_m:
17462case RISCVVector::BI__builtin_rvv_vsoxseg7ei32_v_m:
17463case RISCVVector::BI__builtin_rvv_vsoxseg7ei64_v_m:
17464 ID = Intrinsic::riscv_vsoxseg7_mask;
17465 NF = 7;
17466 PolicyAttrs = 3;
17467IsMasked = true;
17468
17469 {
17470 if (IsMasked) {
17471 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17472 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17473 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17474 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17475 IntrinsicTypes = {Ops[0]->getType(),
17476 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17477 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"
, 17477, __extension__ __PRETTY_FUNCTION__))
;
17478 } else {
17479 // Builtin: (ptr, index, val0, val1, ..., vl)
17480 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17481 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17482 IntrinsicTypes = {Ops[0]->getType(),
17483 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17484 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"
, 17484, __extension__ __PRETTY_FUNCTION__))
;
17485 }
17486 }
17487 break;
17488case RISCVVector::BI__builtin_rvv_vsoxseg8ei8_v:
17489case RISCVVector::BI__builtin_rvv_vsoxseg8ei16_v:
17490case RISCVVector::BI__builtin_rvv_vsoxseg8ei32_v:
17491case RISCVVector::BI__builtin_rvv_vsoxseg8ei64_v:
17492 ID = Intrinsic::riscv_vsoxseg8;
17493 NF = 8;
17494 PolicyAttrs = 3;
17495IsMasked = false;
17496
17497 {
17498 if (IsMasked) {
17499 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17500 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17501 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17502 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17503 IntrinsicTypes = {Ops[0]->getType(),
17504 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17505 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"
, 17505, __extension__ __PRETTY_FUNCTION__))
;
17506 } else {
17507 // Builtin: (ptr, index, val0, val1, ..., vl)
17508 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17509 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17510 IntrinsicTypes = {Ops[0]->getType(),
17511 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17512 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"
, 17512, __extension__ __PRETTY_FUNCTION__))
;
17513 }
17514 }
17515 break;
17516case RISCVVector::BI__builtin_rvv_vsoxseg8ei8_v_m:
17517case RISCVVector::BI__builtin_rvv_vsoxseg8ei16_v_m:
17518case RISCVVector::BI__builtin_rvv_vsoxseg8ei32_v_m:
17519case RISCVVector::BI__builtin_rvv_vsoxseg8ei64_v_m:
17520 ID = Intrinsic::riscv_vsoxseg8_mask;
17521 NF = 8;
17522 PolicyAttrs = 3;
17523IsMasked = true;
17524
17525 {
17526 if (IsMasked) {
17527 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
17528 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
17529 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
17530 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
17531 IntrinsicTypes = {Ops[0]->getType(),
17532 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
17533 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"
, 17533, __extension__ __PRETTY_FUNCTION__))
;
17534 } else {
17535 // Builtin: (ptr, index, val0, val1, ..., vl)
17536 // Intrinsic: (val0, val1, ..., ptr, index, vl)
17537 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17538 IntrinsicTypes = {Ops[0]->getType(),
17539 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
17540 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"
, 17540, __extension__ __PRETTY_FUNCTION__))
;
17541 }
17542 }
17543 break;
17544case RISCVVector::BI__builtin_rvv_vsra_vv_tu:
17545case RISCVVector::BI__builtin_rvv_vsra_vx_tu:
17546 ID = Intrinsic::riscv_vsra;
17547 PolicyAttrs = 2;
17548 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17549 break;
17550case RISCVVector::BI__builtin_rvv_vsra_vv_ta:
17551case RISCVVector::BI__builtin_rvv_vsra_vx_ta:
17552 ID = Intrinsic::riscv_vsra;
17553 PolicyAttrs = 3;
17554 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17555 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17556 break;
17557case RISCVVector::BI__builtin_rvv_vsra_vv_tuma:
17558case RISCVVector::BI__builtin_rvv_vsra_vx_tuma:
17559 ID = Intrinsic::riscv_vsra_mask;
17560 PolicyAttrs = 2;
17561 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17562 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17563 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17564 break;
17565case RISCVVector::BI__builtin_rvv_vsra_vv_tama:
17566case RISCVVector::BI__builtin_rvv_vsra_vx_tama:
17567 ID = Intrinsic::riscv_vsra_mask;
17568 PolicyAttrs = 3;
17569 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17570 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17571 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17572 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17573 break;
17574case RISCVVector::BI__builtin_rvv_vsra_vv_tumu:
17575case RISCVVector::BI__builtin_rvv_vsra_vx_tumu:
17576 ID = Intrinsic::riscv_vsra_mask;
17577 PolicyAttrs = 0;
17578 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17579 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17580 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17581 break;
17582case RISCVVector::BI__builtin_rvv_vsra_vv_tamu:
17583case RISCVVector::BI__builtin_rvv_vsra_vx_tamu:
17584 ID = Intrinsic::riscv_vsra_mask;
17585 PolicyAttrs = 1;
17586 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17587 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17588 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17589 break;
17590case RISCVVector::BI__builtin_rvv_vsrl_vv_tu:
17591case RISCVVector::BI__builtin_rvv_vsrl_vx_tu:
17592 ID = Intrinsic::riscv_vsrl;
17593 PolicyAttrs = 2;
17594 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17595 break;
17596case RISCVVector::BI__builtin_rvv_vsrl_vv_ta:
17597case RISCVVector::BI__builtin_rvv_vsrl_vx_ta:
17598 ID = Intrinsic::riscv_vsrl;
17599 PolicyAttrs = 3;
17600 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17601 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17602 break;
17603case RISCVVector::BI__builtin_rvv_vsrl_vv_tuma:
17604case RISCVVector::BI__builtin_rvv_vsrl_vx_tuma:
17605 ID = Intrinsic::riscv_vsrl_mask;
17606 PolicyAttrs = 2;
17607 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17608 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17609 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17610 break;
17611case RISCVVector::BI__builtin_rvv_vsrl_vv_tama:
17612case RISCVVector::BI__builtin_rvv_vsrl_vx_tama:
17613 ID = Intrinsic::riscv_vsrl_mask;
17614 PolicyAttrs = 3;
17615 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17616 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17617 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
17618 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17619 break;
17620case RISCVVector::BI__builtin_rvv_vsrl_vv_tumu:
17621case RISCVVector::BI__builtin_rvv_vsrl_vx_tumu:
17622 ID = Intrinsic::riscv_vsrl_mask;
17623 PolicyAttrs = 0;
17624 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17625 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17626 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17627 break;
17628case RISCVVector::BI__builtin_rvv_vsrl_vv_tamu:
17629case RISCVVector::BI__builtin_rvv_vsrl_vx_tamu:
17630 ID = Intrinsic::riscv_vsrl_mask;
17631 PolicyAttrs = 1;
17632 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17633 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
17634 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
17635 break;
17636case RISCVVector::BI__builtin_rvv_vsse16_v:
17637case RISCVVector::BI__builtin_rvv_vsse32_v:
17638case RISCVVector::BI__builtin_rvv_vsse64_v:
17639case RISCVVector::BI__builtin_rvv_vsse8_v:
17640 ID = Intrinsic::riscv_vsse;
17641 PolicyAttrs = 3;
17642IsMasked = false;
17643
17644 if (IsMasked) {
17645 // Builtin: (mask, ptr, stride, value, vl). Intrinsic: (value, ptr, stride, mask, vl)
17646 std::swap(Ops[0], Ops[3]);
17647 } else {
17648 // Builtin: (ptr, stride, value, vl). Intrinsic: (value, ptr, stride, vl)
17649 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17650 }
17651 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17652 if (IsMasked)
17653 IntrinsicTypes = {Ops[0]->getType(), Ops[4]->getType()};
17654 else
17655 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17656 break;
17657case RISCVVector::BI__builtin_rvv_vsse16_v_m:
17658case RISCVVector::BI__builtin_rvv_vsse32_v_m:
17659case RISCVVector::BI__builtin_rvv_vsse64_v_m:
17660case RISCVVector::BI__builtin_rvv_vsse8_v_m:
17661 ID = Intrinsic::riscv_vsse_mask;
17662 PolicyAttrs = 3;
17663IsMasked = true;
17664
17665 if (IsMasked) {
17666 // Builtin: (mask, ptr, stride, value, vl). Intrinsic: (value, ptr, stride, mask, vl)
17667 std::swap(Ops[0], Ops[3]);
17668 } else {
17669 // Builtin: (ptr, stride, value, vl). Intrinsic: (value, ptr, stride, vl)
17670 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
17671 }
17672 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
17673 if (IsMasked)
17674 IntrinsicTypes = {Ops[0]->getType(), Ops[4]->getType()};
17675 else
17676 IntrinsicTypes = {Ops[0]->getType(), Ops[3]->getType()};
17677 break;
17678case RISCVVector::BI__builtin_rvv_vsseg2e16_v:
17679case RISCVVector::BI__builtin_rvv_vsseg2e32_v:
17680case RISCVVector::BI__builtin_rvv_vsseg2e64_v:
17681case RISCVVector::BI__builtin_rvv_vsseg2e8_v:
17682 ID = Intrinsic::riscv_vsseg2;
17683 NF = 2;
17684 PolicyAttrs = 3;
17685IsMasked = false;
17686
17687 {
17688 if (IsMasked) {
17689 // Builtin: (mask, ptr, val0, val1, ..., vl)
17690 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17691 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17692 std::swap(Ops[NF], Ops[NF + 1]);
17693 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17694 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"
, 17694, __extension__ __PRETTY_FUNCTION__))
;
17695 } else {
17696 // Builtin: (ptr, val0, val1, ..., vl)
17697 // Intrinsic: (val0, val1, ..., ptr, vl)
17698 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17699 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17700 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"
, 17700, __extension__ __PRETTY_FUNCTION__))
;
17701 }
17702 }
17703 break;
17704case RISCVVector::BI__builtin_rvv_vsseg2e16_v_m:
17705case RISCVVector::BI__builtin_rvv_vsseg2e32_v_m:
17706case RISCVVector::BI__builtin_rvv_vsseg2e64_v_m:
17707case RISCVVector::BI__builtin_rvv_vsseg2e8_v_m:
17708 ID = Intrinsic::riscv_vsseg2_mask;
17709 NF = 2;
17710 PolicyAttrs = 3;
17711IsMasked = true;
17712
17713 {
17714 if (IsMasked) {
17715 // Builtin: (mask, ptr, val0, val1, ..., vl)
17716 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17717 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17718 std::swap(Ops[NF], Ops[NF + 1]);
17719 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17720 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"
, 17720, __extension__ __PRETTY_FUNCTION__))
;
17721 } else {
17722 // Builtin: (ptr, val0, val1, ..., vl)
17723 // Intrinsic: (val0, val1, ..., ptr, vl)
17724 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17725 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17726 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"
, 17726, __extension__ __PRETTY_FUNCTION__))
;
17727 }
17728 }
17729 break;
17730case RISCVVector::BI__builtin_rvv_vsseg3e8_v:
17731case RISCVVector::BI__builtin_rvv_vsseg3e16_v:
17732case RISCVVector::BI__builtin_rvv_vsseg3e32_v:
17733case RISCVVector::BI__builtin_rvv_vsseg3e64_v:
17734 ID = Intrinsic::riscv_vsseg3;
17735 NF = 3;
17736 PolicyAttrs = 3;
17737IsMasked = false;
17738
17739 {
17740 if (IsMasked) {
17741 // Builtin: (mask, ptr, val0, val1, ..., vl)
17742 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17743 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17744 std::swap(Ops[NF], Ops[NF + 1]);
17745 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17746 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"
, 17746, __extension__ __PRETTY_FUNCTION__))
;
17747 } else {
17748 // Builtin: (ptr, val0, val1, ..., vl)
17749 // Intrinsic: (val0, val1, ..., ptr, vl)
17750 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17751 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17752 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"
, 17752, __extension__ __PRETTY_FUNCTION__))
;
17753 }
17754 }
17755 break;
17756case RISCVVector::BI__builtin_rvv_vsseg3e8_v_m:
17757case RISCVVector::BI__builtin_rvv_vsseg3e16_v_m:
17758case RISCVVector::BI__builtin_rvv_vsseg3e32_v_m:
17759case RISCVVector::BI__builtin_rvv_vsseg3e64_v_m:
17760 ID = Intrinsic::riscv_vsseg3_mask;
17761 NF = 3;
17762 PolicyAttrs = 3;
17763IsMasked = true;
17764
17765 {
17766 if (IsMasked) {
17767 // Builtin: (mask, ptr, val0, val1, ..., vl)
17768 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17769 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17770 std::swap(Ops[NF], Ops[NF + 1]);
17771 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17772 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"
, 17772, __extension__ __PRETTY_FUNCTION__))
;
17773 } else {
17774 // Builtin: (ptr, val0, val1, ..., vl)
17775 // Intrinsic: (val0, val1, ..., ptr, vl)
17776 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17777 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17778 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"
, 17778, __extension__ __PRETTY_FUNCTION__))
;
17779 }
17780 }
17781 break;
17782case RISCVVector::BI__builtin_rvv_vsseg4e8_v:
17783case RISCVVector::BI__builtin_rvv_vsseg4e16_v:
17784case RISCVVector::BI__builtin_rvv_vsseg4e32_v:
17785case RISCVVector::BI__builtin_rvv_vsseg4e64_v:
17786 ID = Intrinsic::riscv_vsseg4;
17787 NF = 4;
17788 PolicyAttrs = 3;
17789IsMasked = false;
17790
17791 {
17792 if (IsMasked) {
17793 // Builtin: (mask, ptr, val0, val1, ..., vl)
17794 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17795 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17796 std::swap(Ops[NF], Ops[NF + 1]);
17797 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17798 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"
, 17798, __extension__ __PRETTY_FUNCTION__))
;
17799 } else {
17800 // Builtin: (ptr, val0, val1, ..., vl)
17801 // Intrinsic: (val0, val1, ..., ptr, vl)
17802 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17803 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17804 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"
, 17804, __extension__ __PRETTY_FUNCTION__))
;
17805 }
17806 }
17807 break;
17808case RISCVVector::BI__builtin_rvv_vsseg4e8_v_m:
17809case RISCVVector::BI__builtin_rvv_vsseg4e16_v_m:
17810case RISCVVector::BI__builtin_rvv_vsseg4e32_v_m:
17811case RISCVVector::BI__builtin_rvv_vsseg4e64_v_m:
17812 ID = Intrinsic::riscv_vsseg4_mask;
17813 NF = 4;
17814 PolicyAttrs = 3;
17815IsMasked = true;
17816
17817 {
17818 if (IsMasked) {
17819 // Builtin: (mask, ptr, val0, val1, ..., vl)
17820 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17821 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17822 std::swap(Ops[NF], Ops[NF + 1]);
17823 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17824 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"
, 17824, __extension__ __PRETTY_FUNCTION__))
;
17825 } else {
17826 // Builtin: (ptr, val0, val1, ..., vl)
17827 // Intrinsic: (val0, val1, ..., ptr, vl)
17828 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17829 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17830 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"
, 17830, __extension__ __PRETTY_FUNCTION__))
;
17831 }
17832 }
17833 break;
17834case RISCVVector::BI__builtin_rvv_vsseg5e8_v:
17835case RISCVVector::BI__builtin_rvv_vsseg5e16_v:
17836case RISCVVector::BI__builtin_rvv_vsseg5e32_v:
17837case RISCVVector::BI__builtin_rvv_vsseg5e64_v:
17838 ID = Intrinsic::riscv_vsseg5;
17839 NF = 5;
17840 PolicyAttrs = 3;
17841IsMasked = false;
17842
17843 {
17844 if (IsMasked) {
17845 // Builtin: (mask, ptr, val0, val1, ..., vl)
17846 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17847 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17848 std::swap(Ops[NF], Ops[NF + 1]);
17849 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17850 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"
, 17850, __extension__ __PRETTY_FUNCTION__))
;
17851 } else {
17852 // Builtin: (ptr, val0, val1, ..., vl)
17853 // Intrinsic: (val0, val1, ..., ptr, vl)
17854 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17855 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17856 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"
, 17856, __extension__ __PRETTY_FUNCTION__))
;
17857 }
17858 }
17859 break;
17860case RISCVVector::BI__builtin_rvv_vsseg5e8_v_m:
17861case RISCVVector::BI__builtin_rvv_vsseg5e16_v_m:
17862case RISCVVector::BI__builtin_rvv_vsseg5e32_v_m:
17863case RISCVVector::BI__builtin_rvv_vsseg5e64_v_m:
17864 ID = Intrinsic::riscv_vsseg5_mask;
17865 NF = 5;
17866 PolicyAttrs = 3;
17867IsMasked = true;
17868
17869 {
17870 if (IsMasked) {
17871 // Builtin: (mask, ptr, val0, val1, ..., vl)
17872 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17873 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17874 std::swap(Ops[NF], Ops[NF + 1]);
17875 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17876 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"
, 17876, __extension__ __PRETTY_FUNCTION__))
;
17877 } else {
17878 // Builtin: (ptr, val0, val1, ..., vl)
17879 // Intrinsic: (val0, val1, ..., ptr, vl)
17880 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17881 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17882 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"
, 17882, __extension__ __PRETTY_FUNCTION__))
;
17883 }
17884 }
17885 break;
17886case RISCVVector::BI__builtin_rvv_vsseg6e8_v:
17887case RISCVVector::BI__builtin_rvv_vsseg6e16_v:
17888case RISCVVector::BI__builtin_rvv_vsseg6e32_v:
17889case RISCVVector::BI__builtin_rvv_vsseg6e64_v:
17890 ID = Intrinsic::riscv_vsseg6;
17891 NF = 6;
17892 PolicyAttrs = 3;
17893IsMasked = false;
17894
17895 {
17896 if (IsMasked) {
17897 // Builtin: (mask, ptr, val0, val1, ..., vl)
17898 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17899 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17900 std::swap(Ops[NF], Ops[NF + 1]);
17901 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17902 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"
, 17902, __extension__ __PRETTY_FUNCTION__))
;
17903 } else {
17904 // Builtin: (ptr, val0, val1, ..., vl)
17905 // Intrinsic: (val0, val1, ..., ptr, vl)
17906 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17907 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17908 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"
, 17908, __extension__ __PRETTY_FUNCTION__))
;
17909 }
17910 }
17911 break;
17912case RISCVVector::BI__builtin_rvv_vsseg6e8_v_m:
17913case RISCVVector::BI__builtin_rvv_vsseg6e16_v_m:
17914case RISCVVector::BI__builtin_rvv_vsseg6e32_v_m:
17915case RISCVVector::BI__builtin_rvv_vsseg6e64_v_m:
17916 ID = Intrinsic::riscv_vsseg6_mask;
17917 NF = 6;
17918 PolicyAttrs = 3;
17919IsMasked = true;
17920
17921 {
17922 if (IsMasked) {
17923 // Builtin: (mask, ptr, val0, val1, ..., vl)
17924 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17925 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17926 std::swap(Ops[NF], Ops[NF + 1]);
17927 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17928 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"
, 17928, __extension__ __PRETTY_FUNCTION__))
;
17929 } else {
17930 // Builtin: (ptr, val0, val1, ..., vl)
17931 // Intrinsic: (val0, val1, ..., ptr, vl)
17932 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17933 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17934 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"
, 17934, __extension__ __PRETTY_FUNCTION__))
;
17935 }
17936 }
17937 break;
17938case RISCVVector::BI__builtin_rvv_vsseg7e8_v:
17939case RISCVVector::BI__builtin_rvv_vsseg7e16_v:
17940case RISCVVector::BI__builtin_rvv_vsseg7e32_v:
17941case RISCVVector::BI__builtin_rvv_vsseg7e64_v:
17942 ID = Intrinsic::riscv_vsseg7;
17943 NF = 7;
17944 PolicyAttrs = 3;
17945IsMasked = false;
17946
17947 {
17948 if (IsMasked) {
17949 // Builtin: (mask, ptr, val0, val1, ..., vl)
17950 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17951 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17952 std::swap(Ops[NF], Ops[NF + 1]);
17953 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17954 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"
, 17954, __extension__ __PRETTY_FUNCTION__))
;
17955 } else {
17956 // Builtin: (ptr, val0, val1, ..., vl)
17957 // Intrinsic: (val0, val1, ..., ptr, vl)
17958 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17959 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17960 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"
, 17960, __extension__ __PRETTY_FUNCTION__))
;
17961 }
17962 }
17963 break;
17964case RISCVVector::BI__builtin_rvv_vsseg7e8_v_m:
17965case RISCVVector::BI__builtin_rvv_vsseg7e16_v_m:
17966case RISCVVector::BI__builtin_rvv_vsseg7e32_v_m:
17967case RISCVVector::BI__builtin_rvv_vsseg7e64_v_m:
17968 ID = Intrinsic::riscv_vsseg7_mask;
17969 NF = 7;
17970 PolicyAttrs = 3;
17971IsMasked = true;
17972
17973 {
17974 if (IsMasked) {
17975 // Builtin: (mask, ptr, val0, val1, ..., vl)
17976 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
17977 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
17978 std::swap(Ops[NF], Ops[NF + 1]);
17979 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
17980 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"
, 17980, __extension__ __PRETTY_FUNCTION__))
;
17981 } else {
17982 // Builtin: (ptr, val0, val1, ..., vl)
17983 // Intrinsic: (val0, val1, ..., ptr, vl)
17984 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
17985 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
17986 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"
, 17986, __extension__ __PRETTY_FUNCTION__))
;
17987 }
17988 }
17989 break;
17990case RISCVVector::BI__builtin_rvv_vsseg8e8_v:
17991case RISCVVector::BI__builtin_rvv_vsseg8e16_v:
17992case RISCVVector::BI__builtin_rvv_vsseg8e32_v:
17993case RISCVVector::BI__builtin_rvv_vsseg8e64_v:
17994 ID = Intrinsic::riscv_vsseg8;
17995 NF = 8;
17996 PolicyAttrs = 3;
17997IsMasked = false;
17998
17999 {
18000 if (IsMasked) {
18001 // Builtin: (mask, ptr, val0, val1, ..., vl)
18002 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18003 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18004 std::swap(Ops[NF], Ops[NF + 1]);
18005 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18006 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"
, 18006, __extension__ __PRETTY_FUNCTION__))
;
18007 } else {
18008 // Builtin: (ptr, val0, val1, ..., vl)
18009 // Intrinsic: (val0, val1, ..., ptr, vl)
18010 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18011 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18012 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"
, 18012, __extension__ __PRETTY_FUNCTION__))
;
18013 }
18014 }
18015 break;
18016case RISCVVector::BI__builtin_rvv_vsseg8e8_v_m:
18017case RISCVVector::BI__builtin_rvv_vsseg8e16_v_m:
18018case RISCVVector::BI__builtin_rvv_vsseg8e32_v_m:
18019case RISCVVector::BI__builtin_rvv_vsseg8e64_v_m:
18020 ID = Intrinsic::riscv_vsseg8_mask;
18021 NF = 8;
18022 PolicyAttrs = 3;
18023IsMasked = true;
18024
18025 {
18026 if (IsMasked) {
18027 // Builtin: (mask, ptr, val0, val1, ..., vl)
18028 // Intrinsic: (val0, val1, ..., ptr, mask, vl)
18029 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18030 std::swap(Ops[NF], Ops[NF + 1]);
18031 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 2]->getType()};
18032 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"
, 18032, __extension__ __PRETTY_FUNCTION__))
;
18033 } else {
18034 // Builtin: (ptr, val0, val1, ..., vl)
18035 // Intrinsic: (val0, val1, ..., ptr, vl)
18036 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18037 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18038 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"
, 18038, __extension__ __PRETTY_FUNCTION__))
;
18039 }
18040 }
18041 break;
18042case RISCVVector::BI__builtin_rvv_vssra_vv_tu:
18043case RISCVVector::BI__builtin_rvv_vssra_vx_tu:
18044 ID = Intrinsic::riscv_vssra;
18045 PolicyAttrs = 2;
18046 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18047 break;
18048case RISCVVector::BI__builtin_rvv_vssra_vv_ta:
18049case RISCVVector::BI__builtin_rvv_vssra_vx_ta:
18050 ID = Intrinsic::riscv_vssra;
18051 PolicyAttrs = 3;
18052 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18053 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18054 break;
18055case RISCVVector::BI__builtin_rvv_vssra_vv_tuma:
18056case RISCVVector::BI__builtin_rvv_vssra_vx_tuma:
18057 ID = Intrinsic::riscv_vssra_mask;
18058 PolicyAttrs = 2;
18059 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18060 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18061 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18062 break;
18063case RISCVVector::BI__builtin_rvv_vssra_vv_tama:
18064case RISCVVector::BI__builtin_rvv_vssra_vx_tama:
18065 ID = Intrinsic::riscv_vssra_mask;
18066 PolicyAttrs = 3;
18067 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18068 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18069 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18070 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18071 break;
18072case RISCVVector::BI__builtin_rvv_vssra_vv_tumu:
18073case RISCVVector::BI__builtin_rvv_vssra_vx_tumu:
18074 ID = Intrinsic::riscv_vssra_mask;
18075 PolicyAttrs = 0;
18076 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18077 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18078 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18079 break;
18080case RISCVVector::BI__builtin_rvv_vssra_vv_tamu:
18081case RISCVVector::BI__builtin_rvv_vssra_vx_tamu:
18082 ID = Intrinsic::riscv_vssra_mask;
18083 PolicyAttrs = 1;
18084 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18085 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18086 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18087 break;
18088case RISCVVector::BI__builtin_rvv_vssrl_vv_tu:
18089case RISCVVector::BI__builtin_rvv_vssrl_vx_tu:
18090 ID = Intrinsic::riscv_vssrl;
18091 PolicyAttrs = 2;
18092 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18093 break;
18094case RISCVVector::BI__builtin_rvv_vssrl_vv_ta:
18095case RISCVVector::BI__builtin_rvv_vssrl_vx_ta:
18096 ID = Intrinsic::riscv_vssrl;
18097 PolicyAttrs = 3;
18098 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18099 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18100 break;
18101case RISCVVector::BI__builtin_rvv_vssrl_vv_tuma:
18102case RISCVVector::BI__builtin_rvv_vssrl_vx_tuma:
18103 ID = Intrinsic::riscv_vssrl_mask;
18104 PolicyAttrs = 2;
18105 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18106 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18107 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18108 break;
18109case RISCVVector::BI__builtin_rvv_vssrl_vv_tama:
18110case RISCVVector::BI__builtin_rvv_vssrl_vx_tama:
18111 ID = Intrinsic::riscv_vssrl_mask;
18112 PolicyAttrs = 3;
18113 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18114 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18115 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18116 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18117 break;
18118case RISCVVector::BI__builtin_rvv_vssrl_vv_tumu:
18119case RISCVVector::BI__builtin_rvv_vssrl_vx_tumu:
18120 ID = Intrinsic::riscv_vssrl_mask;
18121 PolicyAttrs = 0;
18122 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18123 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18124 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18125 break;
18126case RISCVVector::BI__builtin_rvv_vssrl_vv_tamu:
18127case RISCVVector::BI__builtin_rvv_vssrl_vx_tamu:
18128 ID = Intrinsic::riscv_vssrl_mask;
18129 PolicyAttrs = 1;
18130 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18131 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18132 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18133 break;
18134case RISCVVector::BI__builtin_rvv_vssseg2e16_v:
18135case RISCVVector::BI__builtin_rvv_vssseg2e32_v:
18136case RISCVVector::BI__builtin_rvv_vssseg2e64_v:
18137case RISCVVector::BI__builtin_rvv_vssseg2e8_v:
18138 ID = Intrinsic::riscv_vssseg2;
18139 NF = 2;
18140 PolicyAttrs = 3;
18141IsMasked = false;
18142
18143 {
18144 if (IsMasked) {
18145 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18146 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18147 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18148 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18149 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"
, 18149, __extension__ __PRETTY_FUNCTION__))
;
18150 } else {
18151 // Builtin: (ptr, stride, val0, val1, ..., vl).
18152 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18153 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18154 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"
, 18154, __extension__ __PRETTY_FUNCTION__))
;
18155 }
18156 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18157 }
18158 break;
18159case RISCVVector::BI__builtin_rvv_vssseg2e16_v_m:
18160case RISCVVector::BI__builtin_rvv_vssseg2e32_v_m:
18161case RISCVVector::BI__builtin_rvv_vssseg2e64_v_m:
18162case RISCVVector::BI__builtin_rvv_vssseg2e8_v_m:
18163 ID = Intrinsic::riscv_vssseg2_mask;
18164 NF = 2;
18165 PolicyAttrs = 3;
18166IsMasked = true;
18167
18168 {
18169 if (IsMasked) {
18170 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18171 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18172 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18173 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18174 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"
, 18174, __extension__ __PRETTY_FUNCTION__))
;
18175 } else {
18176 // Builtin: (ptr, stride, val0, val1, ..., vl).
18177 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18178 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18179 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"
, 18179, __extension__ __PRETTY_FUNCTION__))
;
18180 }
18181 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18182 }
18183 break;
18184case RISCVVector::BI__builtin_rvv_vssseg3e8_v:
18185case RISCVVector::BI__builtin_rvv_vssseg3e16_v:
18186case RISCVVector::BI__builtin_rvv_vssseg3e32_v:
18187case RISCVVector::BI__builtin_rvv_vssseg3e64_v:
18188 ID = Intrinsic::riscv_vssseg3;
18189 NF = 3;
18190 PolicyAttrs = 3;
18191IsMasked = false;
18192
18193 {
18194 if (IsMasked) {
18195 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18196 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18197 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18198 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18199 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"
, 18199, __extension__ __PRETTY_FUNCTION__))
;
18200 } else {
18201 // Builtin: (ptr, stride, val0, val1, ..., vl).
18202 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18203 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18204 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"
, 18204, __extension__ __PRETTY_FUNCTION__))
;
18205 }
18206 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18207 }
18208 break;
18209case RISCVVector::BI__builtin_rvv_vssseg3e8_v_m:
18210case RISCVVector::BI__builtin_rvv_vssseg3e16_v_m:
18211case RISCVVector::BI__builtin_rvv_vssseg3e32_v_m:
18212case RISCVVector::BI__builtin_rvv_vssseg3e64_v_m:
18213 ID = Intrinsic::riscv_vssseg3_mask;
18214 NF = 3;
18215 PolicyAttrs = 3;
18216IsMasked = true;
18217
18218 {
18219 if (IsMasked) {
18220 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18221 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18222 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18223 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18224 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"
, 18224, __extension__ __PRETTY_FUNCTION__))
;
18225 } else {
18226 // Builtin: (ptr, stride, val0, val1, ..., vl).
18227 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18228 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18229 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"
, 18229, __extension__ __PRETTY_FUNCTION__))
;
18230 }
18231 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18232 }
18233 break;
18234case RISCVVector::BI__builtin_rvv_vssseg4e8_v:
18235case RISCVVector::BI__builtin_rvv_vssseg4e16_v:
18236case RISCVVector::BI__builtin_rvv_vssseg4e32_v:
18237case RISCVVector::BI__builtin_rvv_vssseg4e64_v:
18238 ID = Intrinsic::riscv_vssseg4;
18239 NF = 4;
18240 PolicyAttrs = 3;
18241IsMasked = false;
18242
18243 {
18244 if (IsMasked) {
18245 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18246 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18247 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18248 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18249 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"
, 18249, __extension__ __PRETTY_FUNCTION__))
;
18250 } else {
18251 // Builtin: (ptr, stride, val0, val1, ..., vl).
18252 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18253 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18254 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"
, 18254, __extension__ __PRETTY_FUNCTION__))
;
18255 }
18256 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18257 }
18258 break;
18259case RISCVVector::BI__builtin_rvv_vssseg4e8_v_m:
18260case RISCVVector::BI__builtin_rvv_vssseg4e16_v_m:
18261case RISCVVector::BI__builtin_rvv_vssseg4e32_v_m:
18262case RISCVVector::BI__builtin_rvv_vssseg4e64_v_m:
18263 ID = Intrinsic::riscv_vssseg4_mask;
18264 NF = 4;
18265 PolicyAttrs = 3;
18266IsMasked = true;
18267
18268 {
18269 if (IsMasked) {
18270 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18271 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18272 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18273 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18274 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"
, 18274, __extension__ __PRETTY_FUNCTION__))
;
18275 } else {
18276 // Builtin: (ptr, stride, val0, val1, ..., vl).
18277 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18278 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18279 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"
, 18279, __extension__ __PRETTY_FUNCTION__))
;
18280 }
18281 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18282 }
18283 break;
18284case RISCVVector::BI__builtin_rvv_vssseg5e8_v:
18285case RISCVVector::BI__builtin_rvv_vssseg5e16_v:
18286case RISCVVector::BI__builtin_rvv_vssseg5e32_v:
18287case RISCVVector::BI__builtin_rvv_vssseg5e64_v:
18288 ID = Intrinsic::riscv_vssseg5;
18289 NF = 5;
18290 PolicyAttrs = 3;
18291IsMasked = false;
18292
18293 {
18294 if (IsMasked) {
18295 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18296 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18297 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18298 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18299 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"
, 18299, __extension__ __PRETTY_FUNCTION__))
;
18300 } else {
18301 // Builtin: (ptr, stride, val0, val1, ..., vl).
18302 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18303 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18304 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"
, 18304, __extension__ __PRETTY_FUNCTION__))
;
18305 }
18306 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18307 }
18308 break;
18309case RISCVVector::BI__builtin_rvv_vssseg5e8_v_m:
18310case RISCVVector::BI__builtin_rvv_vssseg5e16_v_m:
18311case RISCVVector::BI__builtin_rvv_vssseg5e32_v_m:
18312case RISCVVector::BI__builtin_rvv_vssseg5e64_v_m:
18313 ID = Intrinsic::riscv_vssseg5_mask;
18314 NF = 5;
18315 PolicyAttrs = 3;
18316IsMasked = true;
18317
18318 {
18319 if (IsMasked) {
18320 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18321 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18322 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18323 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18324 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"
, 18324, __extension__ __PRETTY_FUNCTION__))
;
18325 } else {
18326 // Builtin: (ptr, stride, val0, val1, ..., vl).
18327 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18328 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18329 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"
, 18329, __extension__ __PRETTY_FUNCTION__))
;
18330 }
18331 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18332 }
18333 break;
18334case RISCVVector::BI__builtin_rvv_vssseg6e8_v:
18335case RISCVVector::BI__builtin_rvv_vssseg6e16_v:
18336case RISCVVector::BI__builtin_rvv_vssseg6e32_v:
18337case RISCVVector::BI__builtin_rvv_vssseg6e64_v:
18338 ID = Intrinsic::riscv_vssseg6;
18339 NF = 6;
18340 PolicyAttrs = 3;
18341IsMasked = false;
18342
18343 {
18344 if (IsMasked) {
18345 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18346 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18347 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18348 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18349 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"
, 18349, __extension__ __PRETTY_FUNCTION__))
;
18350 } else {
18351 // Builtin: (ptr, stride, val0, val1, ..., vl).
18352 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18353 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18354 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"
, 18354, __extension__ __PRETTY_FUNCTION__))
;
18355 }
18356 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18357 }
18358 break;
18359case RISCVVector::BI__builtin_rvv_vssseg6e8_v_m:
18360case RISCVVector::BI__builtin_rvv_vssseg6e16_v_m:
18361case RISCVVector::BI__builtin_rvv_vssseg6e32_v_m:
18362case RISCVVector::BI__builtin_rvv_vssseg6e64_v_m:
18363 ID = Intrinsic::riscv_vssseg6_mask;
18364 NF = 6;
18365 PolicyAttrs = 3;
18366IsMasked = true;
18367
18368 {
18369 if (IsMasked) {
18370 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18371 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18372 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18373 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18374 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"
, 18374, __extension__ __PRETTY_FUNCTION__))
;
18375 } else {
18376 // Builtin: (ptr, stride, val0, val1, ..., vl).
18377 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18378 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18379 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"
, 18379, __extension__ __PRETTY_FUNCTION__))
;
18380 }
18381 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18382 }
18383 break;
18384case RISCVVector::BI__builtin_rvv_vssseg7e8_v:
18385case RISCVVector::BI__builtin_rvv_vssseg7e16_v:
18386case RISCVVector::BI__builtin_rvv_vssseg7e32_v:
18387case RISCVVector::BI__builtin_rvv_vssseg7e64_v:
18388 ID = Intrinsic::riscv_vssseg7;
18389 NF = 7;
18390 PolicyAttrs = 3;
18391IsMasked = false;
18392
18393 {
18394 if (IsMasked) {
18395 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18396 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18397 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18398 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18399 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"
, 18399, __extension__ __PRETTY_FUNCTION__))
;
18400 } else {
18401 // Builtin: (ptr, stride, val0, val1, ..., vl).
18402 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18403 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18404 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"
, 18404, __extension__ __PRETTY_FUNCTION__))
;
18405 }
18406 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18407 }
18408 break;
18409case RISCVVector::BI__builtin_rvv_vssseg7e8_v_m:
18410case RISCVVector::BI__builtin_rvv_vssseg7e16_v_m:
18411case RISCVVector::BI__builtin_rvv_vssseg7e32_v_m:
18412case RISCVVector::BI__builtin_rvv_vssseg7e64_v_m:
18413 ID = Intrinsic::riscv_vssseg7_mask;
18414 NF = 7;
18415 PolicyAttrs = 3;
18416IsMasked = true;
18417
18418 {
18419 if (IsMasked) {
18420 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18421 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18422 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18423 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18424 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"
, 18424, __extension__ __PRETTY_FUNCTION__))
;
18425 } else {
18426 // Builtin: (ptr, stride, val0, val1, ..., vl).
18427 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18428 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18429 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"
, 18429, __extension__ __PRETTY_FUNCTION__))
;
18430 }
18431 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18432 }
18433 break;
18434case RISCVVector::BI__builtin_rvv_vssseg8e8_v:
18435case RISCVVector::BI__builtin_rvv_vssseg8e16_v:
18436case RISCVVector::BI__builtin_rvv_vssseg8e32_v:
18437case RISCVVector::BI__builtin_rvv_vssseg8e64_v:
18438 ID = Intrinsic::riscv_vssseg8;
18439 NF = 8;
18440 PolicyAttrs = 3;
18441IsMasked = false;
18442
18443 {
18444 if (IsMasked) {
18445 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18446 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18447 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18448 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18449 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"
, 18449, __extension__ __PRETTY_FUNCTION__))
;
18450 } else {
18451 // Builtin: (ptr, stride, val0, val1, ..., vl).
18452 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18453 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18454 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"
, 18454, __extension__ __PRETTY_FUNCTION__))
;
18455 }
18456 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18457 }
18458 break;
18459case RISCVVector::BI__builtin_rvv_vssseg8e8_v_m:
18460case RISCVVector::BI__builtin_rvv_vssseg8e16_v_m:
18461case RISCVVector::BI__builtin_rvv_vssseg8e32_v_m:
18462case RISCVVector::BI__builtin_rvv_vssseg8e64_v_m:
18463 ID = Intrinsic::riscv_vssseg8_mask;
18464 NF = 8;
18465 PolicyAttrs = 3;
18466IsMasked = true;
18467
18468 {
18469 if (IsMasked) {
18470 // Builtin: (mask, ptr, stride, val0, val1, ..., vl).
18471 // Intrinsic: (val0, val1, ..., ptr, stride, mask, vl)
18472 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18473 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18474 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"
, 18474, __extension__ __PRETTY_FUNCTION__))
;
18475 } else {
18476 // Builtin: (ptr, stride, val0, val1, ..., vl).
18477 // Intrinsic: (val0, val1, ..., ptr, stride, vl)
18478 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18479 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"
, 18479, __extension__ __PRETTY_FUNCTION__))
;
18480 }
18481 IntrinsicTypes = {Ops[0]->getType(), Ops[NF + 1]->getType()};
18482 }
18483 break;
18484case RISCVVector::BI__builtin_rvv_vssub_vv_tu:
18485case RISCVVector::BI__builtin_rvv_vssub_vx_tu:
18486 ID = Intrinsic::riscv_vssub;
18487 PolicyAttrs = 2;
18488 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18489 break;
18490case RISCVVector::BI__builtin_rvv_vssub_vv_ta:
18491case RISCVVector::BI__builtin_rvv_vssub_vx_ta:
18492 ID = Intrinsic::riscv_vssub;
18493 PolicyAttrs = 3;
18494 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18495 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18496 break;
18497case RISCVVector::BI__builtin_rvv_vssub_vv_tuma:
18498case RISCVVector::BI__builtin_rvv_vssub_vx_tuma:
18499 ID = Intrinsic::riscv_vssub_mask;
18500 PolicyAttrs = 2;
18501 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18502 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18503 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18504 break;
18505case RISCVVector::BI__builtin_rvv_vssub_vv_tama:
18506case RISCVVector::BI__builtin_rvv_vssub_vx_tama:
18507 ID = Intrinsic::riscv_vssub_mask;
18508 PolicyAttrs = 3;
18509 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18510 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18511 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18512 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18513 break;
18514case RISCVVector::BI__builtin_rvv_vssub_vv_tumu:
18515case RISCVVector::BI__builtin_rvv_vssub_vx_tumu:
18516 ID = Intrinsic::riscv_vssub_mask;
18517 PolicyAttrs = 0;
18518 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18519 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18520 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18521 break;
18522case RISCVVector::BI__builtin_rvv_vssub_vv_tamu:
18523case RISCVVector::BI__builtin_rvv_vssub_vx_tamu:
18524 ID = Intrinsic::riscv_vssub_mask;
18525 PolicyAttrs = 1;
18526 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18527 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18528 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18529 break;
18530case RISCVVector::BI__builtin_rvv_vssubu_vv_tu:
18531case RISCVVector::BI__builtin_rvv_vssubu_vx_tu:
18532 ID = Intrinsic::riscv_vssubu;
18533 PolicyAttrs = 2;
18534 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18535 break;
18536case RISCVVector::BI__builtin_rvv_vssubu_vv_ta:
18537case RISCVVector::BI__builtin_rvv_vssubu_vx_ta:
18538 ID = Intrinsic::riscv_vssubu;
18539 PolicyAttrs = 3;
18540 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18541 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18542 break;
18543case RISCVVector::BI__builtin_rvv_vssubu_vv_tuma:
18544case RISCVVector::BI__builtin_rvv_vssubu_vx_tuma:
18545 ID = Intrinsic::riscv_vssubu_mask;
18546 PolicyAttrs = 2;
18547 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18548 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18549 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18550 break;
18551case RISCVVector::BI__builtin_rvv_vssubu_vv_tama:
18552case RISCVVector::BI__builtin_rvv_vssubu_vx_tama:
18553 ID = Intrinsic::riscv_vssubu_mask;
18554 PolicyAttrs = 3;
18555 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18556 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18557 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18558 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18559 break;
18560case RISCVVector::BI__builtin_rvv_vssubu_vv_tumu:
18561case RISCVVector::BI__builtin_rvv_vssubu_vx_tumu:
18562 ID = Intrinsic::riscv_vssubu_mask;
18563 PolicyAttrs = 0;
18564 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18565 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18566 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18567 break;
18568case RISCVVector::BI__builtin_rvv_vssubu_vv_tamu:
18569case RISCVVector::BI__builtin_rvv_vssubu_vx_tamu:
18570 ID = Intrinsic::riscv_vssubu_mask;
18571 PolicyAttrs = 1;
18572 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18573 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18574 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18575 break;
18576case RISCVVector::BI__builtin_rvv_vsub_vv_tu:
18577case RISCVVector::BI__builtin_rvv_vsub_vx_tu:
18578 ID = Intrinsic::riscv_vsub;
18579 PolicyAttrs = 2;
18580 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18581 break;
18582case RISCVVector::BI__builtin_rvv_vsub_vv_ta:
18583case RISCVVector::BI__builtin_rvv_vsub_vx_ta:
18584 ID = Intrinsic::riscv_vsub;
18585 PolicyAttrs = 3;
18586 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18587 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18588 break;
18589case RISCVVector::BI__builtin_rvv_vsub_vv_tuma:
18590case RISCVVector::BI__builtin_rvv_vsub_vx_tuma:
18591 ID = Intrinsic::riscv_vsub_mask;
18592 PolicyAttrs = 2;
18593 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18594 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18595 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18596 break;
18597case RISCVVector::BI__builtin_rvv_vsub_vv_tama:
18598case RISCVVector::BI__builtin_rvv_vsub_vx_tama:
18599 ID = Intrinsic::riscv_vsub_mask;
18600 PolicyAttrs = 3;
18601 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18602 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18603 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
18604 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18605 break;
18606case RISCVVector::BI__builtin_rvv_vsub_vv_tumu:
18607case RISCVVector::BI__builtin_rvv_vsub_vx_tumu:
18608 ID = Intrinsic::riscv_vsub_mask;
18609 PolicyAttrs = 0;
18610 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18611 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18612 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18613 break;
18614case RISCVVector::BI__builtin_rvv_vsub_vv_tamu:
18615case RISCVVector::BI__builtin_rvv_vsub_vx_tamu:
18616 ID = Intrinsic::riscv_vsub_mask;
18617 PolicyAttrs = 1;
18618 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
18619 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
18620 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
18621 break;
18622case RISCVVector::BI__builtin_rvv_vsuxei16_v:
18623case RISCVVector::BI__builtin_rvv_vsuxei32_v:
18624case RISCVVector::BI__builtin_rvv_vsuxei8_v:
18625case RISCVVector::BI__builtin_rvv_vsuxei64_v:
18626 ID = Intrinsic::riscv_vsuxei;
18627 PolicyAttrs = 3;
18628IsMasked = false;
18629
18630 if (IsMasked) {
18631 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
18632 std::swap(Ops[0], Ops[3]);
18633 } else {
18634 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
18635 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
18636 }
18637 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
18638 if (IsMasked)
18639 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
18640 else
18641 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
18642 break;
18643case RISCVVector::BI__builtin_rvv_vsuxei16_v_m:
18644case RISCVVector::BI__builtin_rvv_vsuxei32_v_m:
18645case RISCVVector::BI__builtin_rvv_vsuxei8_v_m:
18646case RISCVVector::BI__builtin_rvv_vsuxei64_v_m:
18647 ID = Intrinsic::riscv_vsuxei_mask;
18648 PolicyAttrs = 3;
18649IsMasked = true;
18650
18651 if (IsMasked) {
18652 // Builtin: (mask, ptr, index, value, vl). Intrinsic: (value, ptr, index, mask, vl)
18653 std::swap(Ops[0], Ops[3]);
18654 } else {
18655 // Builtin: (ptr, index, value, vl). Intrinsic: (value, ptr, index, vl)
18656 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.begin() + 3);
18657 }
18658 Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType()->getPointerTo());
18659 if (IsMasked)
18660 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[4]->getType()};
18661 else
18662 IntrinsicTypes = {Ops[0]->getType(), Ops[2]->getType(), Ops[3]->getType()};
18663 break;
18664case RISCVVector::BI__builtin_rvv_vsuxseg2ei16_v:
18665case RISCVVector::BI__builtin_rvv_vsuxseg2ei32_v:
18666case RISCVVector::BI__builtin_rvv_vsuxseg2ei64_v:
18667case RISCVVector::BI__builtin_rvv_vsuxseg2ei8_v:
18668 ID = Intrinsic::riscv_vsuxseg2;
18669 NF = 2;
18670 PolicyAttrs = 3;
18671IsMasked = false;
18672
18673 {
18674 if (IsMasked) {
18675 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18676 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18677 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18678 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18679 IntrinsicTypes = {Ops[0]->getType(),
18680 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18681 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"
, 18681, __extension__ __PRETTY_FUNCTION__))
;
18682 } else {
18683 // Builtin: (ptr, index, val0, val1, ..., vl)
18684 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18685 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18686 IntrinsicTypes = {Ops[0]->getType(),
18687 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18688 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"
, 18688, __extension__ __PRETTY_FUNCTION__))
;
18689 }
18690 }
18691 break;
18692case RISCVVector::BI__builtin_rvv_vsuxseg2ei16_v_m:
18693case RISCVVector::BI__builtin_rvv_vsuxseg2ei32_v_m:
18694case RISCVVector::BI__builtin_rvv_vsuxseg2ei64_v_m:
18695case RISCVVector::BI__builtin_rvv_vsuxseg2ei8_v_m:
18696 ID = Intrinsic::riscv_vsuxseg2_mask;
18697 NF = 2;
18698 PolicyAttrs = 3;
18699IsMasked = true;
18700
18701 {
18702 if (IsMasked) {
18703 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18704 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18705 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18706 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18707 IntrinsicTypes = {Ops[0]->getType(),
18708 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18709 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"
, 18709, __extension__ __PRETTY_FUNCTION__))
;
18710 } else {
18711 // Builtin: (ptr, index, val0, val1, ..., vl)
18712 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18713 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18714 IntrinsicTypes = {Ops[0]->getType(),
18715 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18716 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"
, 18716, __extension__ __PRETTY_FUNCTION__))
;
18717 }
18718 }
18719 break;
18720case RISCVVector::BI__builtin_rvv_vsuxseg3ei8_v:
18721case RISCVVector::BI__builtin_rvv_vsuxseg3ei16_v:
18722case RISCVVector::BI__builtin_rvv_vsuxseg3ei32_v:
18723case RISCVVector::BI__builtin_rvv_vsuxseg3ei64_v:
18724 ID = Intrinsic::riscv_vsuxseg3;
18725 NF = 3;
18726 PolicyAttrs = 3;
18727IsMasked = false;
18728
18729 {
18730 if (IsMasked) {
18731 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18732 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18733 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18734 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18735 IntrinsicTypes = {Ops[0]->getType(),
18736 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18737 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"
, 18737, __extension__ __PRETTY_FUNCTION__))
;
18738 } else {
18739 // Builtin: (ptr, index, val0, val1, ..., vl)
18740 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18741 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18742 IntrinsicTypes = {Ops[0]->getType(),
18743 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18744 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"
, 18744, __extension__ __PRETTY_FUNCTION__))
;
18745 }
18746 }
18747 break;
18748case RISCVVector::BI__builtin_rvv_vsuxseg3ei8_v_m:
18749case RISCVVector::BI__builtin_rvv_vsuxseg3ei16_v_m:
18750case RISCVVector::BI__builtin_rvv_vsuxseg3ei32_v_m:
18751case RISCVVector::BI__builtin_rvv_vsuxseg3ei64_v_m:
18752 ID = Intrinsic::riscv_vsuxseg3_mask;
18753 NF = 3;
18754 PolicyAttrs = 3;
18755IsMasked = true;
18756
18757 {
18758 if (IsMasked) {
18759 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18760 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18761 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18762 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18763 IntrinsicTypes = {Ops[0]->getType(),
18764 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18765 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"
, 18765, __extension__ __PRETTY_FUNCTION__))
;
18766 } else {
18767 // Builtin: (ptr, index, val0, val1, ..., vl)
18768 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18769 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18770 IntrinsicTypes = {Ops[0]->getType(),
18771 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18772 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"
, 18772, __extension__ __PRETTY_FUNCTION__))
;
18773 }
18774 }
18775 break;
18776case RISCVVector::BI__builtin_rvv_vsuxseg4ei8_v:
18777case RISCVVector::BI__builtin_rvv_vsuxseg4ei16_v:
18778case RISCVVector::BI__builtin_rvv_vsuxseg4ei32_v:
18779case RISCVVector::BI__builtin_rvv_vsuxseg4ei64_v:
18780 ID = Intrinsic::riscv_vsuxseg4;
18781 NF = 4;
18782 PolicyAttrs = 3;
18783IsMasked = false;
18784
18785 {
18786 if (IsMasked) {
18787 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18788 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18789 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18790 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18791 IntrinsicTypes = {Ops[0]->getType(),
18792 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18793 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"
, 18793, __extension__ __PRETTY_FUNCTION__))
;
18794 } else {
18795 // Builtin: (ptr, index, val0, val1, ..., vl)
18796 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18797 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18798 IntrinsicTypes = {Ops[0]->getType(),
18799 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18800 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"
, 18800, __extension__ __PRETTY_FUNCTION__))
;
18801 }
18802 }
18803 break;
18804case RISCVVector::BI__builtin_rvv_vsuxseg4ei8_v_m:
18805case RISCVVector::BI__builtin_rvv_vsuxseg4ei16_v_m:
18806case RISCVVector::BI__builtin_rvv_vsuxseg4ei32_v_m:
18807case RISCVVector::BI__builtin_rvv_vsuxseg4ei64_v_m:
18808 ID = Intrinsic::riscv_vsuxseg4_mask;
18809 NF = 4;
18810 PolicyAttrs = 3;
18811IsMasked = true;
18812
18813 {
18814 if (IsMasked) {
18815 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18816 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18817 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18818 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18819 IntrinsicTypes = {Ops[0]->getType(),
18820 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18821 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"
, 18821, __extension__ __PRETTY_FUNCTION__))
;
18822 } else {
18823 // Builtin: (ptr, index, val0, val1, ..., vl)
18824 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18825 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18826 IntrinsicTypes = {Ops[0]->getType(),
18827 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18828 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"
, 18828, __extension__ __PRETTY_FUNCTION__))
;
18829 }
18830 }
18831 break;
18832case RISCVVector::BI__builtin_rvv_vsuxseg5ei8_v:
18833case RISCVVector::BI__builtin_rvv_vsuxseg5ei16_v:
18834case RISCVVector::BI__builtin_rvv_vsuxseg5ei32_v:
18835case RISCVVector::BI__builtin_rvv_vsuxseg5ei64_v:
18836 ID = Intrinsic::riscv_vsuxseg5;
18837 NF = 5;
18838 PolicyAttrs = 3;
18839IsMasked = false;
18840
18841 {
18842 if (IsMasked) {
18843 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18844 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18845 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18846 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18847 IntrinsicTypes = {Ops[0]->getType(),
18848 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18849 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"
, 18849, __extension__ __PRETTY_FUNCTION__))
;
18850 } else {
18851 // Builtin: (ptr, index, val0, val1, ..., vl)
18852 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18853 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18854 IntrinsicTypes = {Ops[0]->getType(),
18855 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18856 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"
, 18856, __extension__ __PRETTY_FUNCTION__))
;
18857 }
18858 }
18859 break;
18860case RISCVVector::BI__builtin_rvv_vsuxseg5ei8_v_m:
18861case RISCVVector::BI__builtin_rvv_vsuxseg5ei16_v_m:
18862case RISCVVector::BI__builtin_rvv_vsuxseg5ei32_v_m:
18863case RISCVVector::BI__builtin_rvv_vsuxseg5ei64_v_m:
18864 ID = Intrinsic::riscv_vsuxseg5_mask;
18865 NF = 5;
18866 PolicyAttrs = 3;
18867IsMasked = true;
18868
18869 {
18870 if (IsMasked) {
18871 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18872 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18873 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18874 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18875 IntrinsicTypes = {Ops[0]->getType(),
18876 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18877 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"
, 18877, __extension__ __PRETTY_FUNCTION__))
;
18878 } else {
18879 // Builtin: (ptr, index, val0, val1, ..., vl)
18880 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18881 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18882 IntrinsicTypes = {Ops[0]->getType(),
18883 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18884 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"
, 18884, __extension__ __PRETTY_FUNCTION__))
;
18885 }
18886 }
18887 break;
18888case RISCVVector::BI__builtin_rvv_vsuxseg6ei8_v:
18889case RISCVVector::BI__builtin_rvv_vsuxseg6ei16_v:
18890case RISCVVector::BI__builtin_rvv_vsuxseg6ei32_v:
18891case RISCVVector::BI__builtin_rvv_vsuxseg6ei64_v:
18892 ID = Intrinsic::riscv_vsuxseg6;
18893 NF = 6;
18894 PolicyAttrs = 3;
18895IsMasked = false;
18896
18897 {
18898 if (IsMasked) {
18899 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18900 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18901 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18902 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18903 IntrinsicTypes = {Ops[0]->getType(),
18904 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18905 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"
, 18905, __extension__ __PRETTY_FUNCTION__))
;
18906 } else {
18907 // Builtin: (ptr, index, val0, val1, ..., vl)
18908 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18909 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18910 IntrinsicTypes = {Ops[0]->getType(),
18911 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18912 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"
, 18912, __extension__ __PRETTY_FUNCTION__))
;
18913 }
18914 }
18915 break;
18916case RISCVVector::BI__builtin_rvv_vsuxseg6ei8_v_m:
18917case RISCVVector::BI__builtin_rvv_vsuxseg6ei16_v_m:
18918case RISCVVector::BI__builtin_rvv_vsuxseg6ei32_v_m:
18919case RISCVVector::BI__builtin_rvv_vsuxseg6ei64_v_m:
18920 ID = Intrinsic::riscv_vsuxseg6_mask;
18921 NF = 6;
18922 PolicyAttrs = 3;
18923IsMasked = true;
18924
18925 {
18926 if (IsMasked) {
18927 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18928 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18929 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18930 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18931 IntrinsicTypes = {Ops[0]->getType(),
18932 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18933 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"
, 18933, __extension__ __PRETTY_FUNCTION__))
;
18934 } else {
18935 // Builtin: (ptr, index, val0, val1, ..., vl)
18936 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18937 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18938 IntrinsicTypes = {Ops[0]->getType(),
18939 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18940 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"
, 18940, __extension__ __PRETTY_FUNCTION__))
;
18941 }
18942 }
18943 break;
18944case RISCVVector::BI__builtin_rvv_vsuxseg7ei8_v:
18945case RISCVVector::BI__builtin_rvv_vsuxseg7ei16_v:
18946case RISCVVector::BI__builtin_rvv_vsuxseg7ei32_v:
18947case RISCVVector::BI__builtin_rvv_vsuxseg7ei64_v:
18948 ID = Intrinsic::riscv_vsuxseg7;
18949 NF = 7;
18950 PolicyAttrs = 3;
18951IsMasked = false;
18952
18953 {
18954 if (IsMasked) {
18955 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18956 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18957 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18958 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18959 IntrinsicTypes = {Ops[0]->getType(),
18960 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18961 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"
, 18961, __extension__ __PRETTY_FUNCTION__))
;
18962 } else {
18963 // Builtin: (ptr, index, val0, val1, ..., vl)
18964 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18965 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18966 IntrinsicTypes = {Ops[0]->getType(),
18967 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18968 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"
, 18968, __extension__ __PRETTY_FUNCTION__))
;
18969 }
18970 }
18971 break;
18972case RISCVVector::BI__builtin_rvv_vsuxseg7ei8_v_m:
18973case RISCVVector::BI__builtin_rvv_vsuxseg7ei16_v_m:
18974case RISCVVector::BI__builtin_rvv_vsuxseg7ei32_v_m:
18975case RISCVVector::BI__builtin_rvv_vsuxseg7ei64_v_m:
18976 ID = Intrinsic::riscv_vsuxseg7_mask;
18977 NF = 7;
18978 PolicyAttrs = 3;
18979IsMasked = true;
18980
18981 {
18982 if (IsMasked) {
18983 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
18984 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
18985 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
18986 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
18987 IntrinsicTypes = {Ops[0]->getType(),
18988 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
18989 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"
, 18989, __extension__ __PRETTY_FUNCTION__))
;
18990 } else {
18991 // Builtin: (ptr, index, val0, val1, ..., vl)
18992 // Intrinsic: (val0, val1, ..., ptr, index, vl)
18993 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
18994 IntrinsicTypes = {Ops[0]->getType(),
18995 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
18996 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"
, 18996, __extension__ __PRETTY_FUNCTION__))
;
18997 }
18998 }
18999 break;
19000case RISCVVector::BI__builtin_rvv_vsuxseg8ei8_v:
19001case RISCVVector::BI__builtin_rvv_vsuxseg8ei16_v:
19002case RISCVVector::BI__builtin_rvv_vsuxseg8ei32_v:
19003case RISCVVector::BI__builtin_rvv_vsuxseg8ei64_v:
19004 ID = Intrinsic::riscv_vsuxseg8;
19005 NF = 8;
19006 PolicyAttrs = 3;
19007IsMasked = false;
19008
19009 {
19010 if (IsMasked) {
19011 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19012 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19013 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19014 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19015 IntrinsicTypes = {Ops[0]->getType(),
19016 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19017 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"
, 19017, __extension__ __PRETTY_FUNCTION__))
;
19018 } else {
19019 // Builtin: (ptr, index, val0, val1, ..., vl)
19020 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19021 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19022 IntrinsicTypes = {Ops[0]->getType(),
19023 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19024 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"
, 19024, __extension__ __PRETTY_FUNCTION__))
;
19025 }
19026 }
19027 break;
19028case RISCVVector::BI__builtin_rvv_vsuxseg8ei8_v_m:
19029case RISCVVector::BI__builtin_rvv_vsuxseg8ei16_v_m:
19030case RISCVVector::BI__builtin_rvv_vsuxseg8ei32_v_m:
19031case RISCVVector::BI__builtin_rvv_vsuxseg8ei64_v_m:
19032 ID = Intrinsic::riscv_vsuxseg8_mask;
19033 NF = 8;
19034 PolicyAttrs = 3;
19035IsMasked = true;
19036
19037 {
19038 if (IsMasked) {
19039 // Builtin: (mask, ptr, index, val0, val1, ..., vl)
19040 // Intrinsic: (val0, val1, ..., ptr, index, mask, vl)
19041 std::rotate(Ops.begin(), Ops.begin() + 3, Ops.end() - 1);
19042 std::rotate(Ops.begin() + NF, Ops.begin() + NF + 1, Ops.begin() + NF + 3);
19043 IntrinsicTypes = {Ops[0]->getType(),
19044 Ops[NF + 1]->getType(), Ops[NF + 3]->getType()};
19045 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"
, 19045, __extension__ __PRETTY_FUNCTION__))
;
19046 } else {
19047 // Builtin: (ptr, index, val0, val1, ..., vl)
19048 // Intrinsic: (val0, val1, ..., ptr, index, vl)
19049 std::rotate(Ops.begin(), Ops.begin() + 2, Ops.end() - 1);
19050 IntrinsicTypes = {Ops[0]->getType(),
19051 Ops[NF + 1]->getType(), Ops[NF + 2]->getType()};
19052 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"
, 19052, __extension__ __PRETTY_FUNCTION__))
;
19053 }
19054 }
19055 break;
19056case RISCVVector::BI__builtin_rvv_vwadd_vv_tu:
19057case RISCVVector::BI__builtin_rvv_vwadd_vx_tu:
19058 ID = Intrinsic::riscv_vwadd;
19059 PolicyAttrs = 2;
19060 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19061 break;
19062case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tu:
19063 ID = Intrinsic::riscv_vwadd;
19064 PolicyAttrs = 2;
19065IsMasked = false;
19066
19067 {
19068 if (IsMasked) {
19069 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19070 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19071 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19072 } else {
19073 if (PolicyAttrs & RVV_VTA)
19074 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19075 }
19076 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19077 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19078 if (IsMasked) {
19079 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19080 // maskedoff, op1, op2, mask, vl, policy
19081 IntrinsicTypes = {ResultType,
19082 Ops[1]->getType(),
19083 ElemTy,
19084 Ops[4]->getType()};
19085 } else {
19086 // passtru, op1, op2, vl
19087 IntrinsicTypes = {ResultType,
19088 Ops[1]->getType(),
19089 ElemTy,
19090 Ops[3]->getType()};
19091 }
19092 break;
19093 }
19094 break;
19095case RISCVVector::BI__builtin_rvv_vwadd_vv_ta:
19096case RISCVVector::BI__builtin_rvv_vwadd_vx_ta:
19097 ID = Intrinsic::riscv_vwadd;
19098 PolicyAttrs = 3;
19099 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19100 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19101 break;
19102case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_ta:
19103 ID = Intrinsic::riscv_vwadd;
19104 PolicyAttrs = 3;
19105IsMasked = false;
19106
19107 {
19108 if (IsMasked) {
19109 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19110 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19111 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19112 } else {
19113 if (PolicyAttrs & RVV_VTA)
19114 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19115 }
19116 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19117 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19118 if (IsMasked) {
19119 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19120 // maskedoff, op1, op2, mask, vl, policy
19121 IntrinsicTypes = {ResultType,
19122 Ops[1]->getType(),
19123 ElemTy,
19124 Ops[4]->getType()};
19125 } else {
19126 // passtru, op1, op2, vl
19127 IntrinsicTypes = {ResultType,
19128 Ops[1]->getType(),
19129 ElemTy,
19130 Ops[3]->getType()};
19131 }
19132 break;
19133 }
19134 break;
19135case RISCVVector::BI__builtin_rvv_vwadd_vv_tuma:
19136case RISCVVector::BI__builtin_rvv_vwadd_vx_tuma:
19137 ID = Intrinsic::riscv_vwadd_mask;
19138 PolicyAttrs = 2;
19139 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19140 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19141 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19142 break;
19143case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tuma:
19144 ID = Intrinsic::riscv_vwadd_mask;
19145 PolicyAttrs = 2;
19146IsMasked = true;
19147
19148 {
19149 if (IsMasked) {
19150 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19151 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19152 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19153 } else {
19154 if (PolicyAttrs & RVV_VTA)
19155 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19156 }
19157 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19158 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19159 if (IsMasked) {
19160 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19161 // maskedoff, op1, op2, mask, vl, policy
19162 IntrinsicTypes = {ResultType,
19163 Ops[1]->getType(),
19164 ElemTy,
19165 Ops[4]->getType()};
19166 } else {
19167 // passtru, op1, op2, vl
19168 IntrinsicTypes = {ResultType,
19169 Ops[1]->getType(),
19170 ElemTy,
19171 Ops[3]->getType()};
19172 }
19173 break;
19174 }
19175 break;
19176case RISCVVector::BI__builtin_rvv_vwadd_vv_tama:
19177case RISCVVector::BI__builtin_rvv_vwadd_vx_tama:
19178 ID = Intrinsic::riscv_vwadd_mask;
19179 PolicyAttrs = 3;
19180 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19181 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19182 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19183 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19184 break;
19185case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tama:
19186 ID = Intrinsic::riscv_vwadd_mask;
19187 PolicyAttrs = 3;
19188IsMasked = true;
19189
19190 {
19191 if (IsMasked) {
19192 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19193 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19194 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19195 } else {
19196 if (PolicyAttrs & RVV_VTA)
19197 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19198 }
19199 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19200 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19201 if (IsMasked) {
19202 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19203 // maskedoff, op1, op2, mask, vl, policy
19204 IntrinsicTypes = {ResultType,
19205 Ops[1]->getType(),
19206 ElemTy,
19207 Ops[4]->getType()};
19208 } else {
19209 // passtru, op1, op2, vl
19210 IntrinsicTypes = {ResultType,
19211 Ops[1]->getType(),
19212 ElemTy,
19213 Ops[3]->getType()};
19214 }
19215 break;
19216 }
19217 break;
19218case RISCVVector::BI__builtin_rvv_vwadd_vv_tumu:
19219case RISCVVector::BI__builtin_rvv_vwadd_vx_tumu:
19220 ID = Intrinsic::riscv_vwadd_mask;
19221 PolicyAttrs = 0;
19222 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19223 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19224 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19225 break;
19226case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tumu:
19227 ID = Intrinsic::riscv_vwadd_mask;
19228 PolicyAttrs = 0;
19229IsMasked = true;
19230
19231 {
19232 if (IsMasked) {
19233 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19234 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19235 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19236 } else {
19237 if (PolicyAttrs & RVV_VTA)
19238 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19239 }
19240 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19241 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19242 if (IsMasked) {
19243 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19244 // maskedoff, op1, op2, mask, vl, policy
19245 IntrinsicTypes = {ResultType,
19246 Ops[1]->getType(),
19247 ElemTy,
19248 Ops[4]->getType()};
19249 } else {
19250 // passtru, op1, op2, vl
19251 IntrinsicTypes = {ResultType,
19252 Ops[1]->getType(),
19253 ElemTy,
19254 Ops[3]->getType()};
19255 }
19256 break;
19257 }
19258 break;
19259case RISCVVector::BI__builtin_rvv_vwadd_vv_tamu:
19260case RISCVVector::BI__builtin_rvv_vwadd_vx_tamu:
19261 ID = Intrinsic::riscv_vwadd_mask;
19262 PolicyAttrs = 1;
19263 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19264 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19265 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19266 break;
19267case RISCVVector::BI__builtin_rvv_vwcvt_x_x_v_tamu:
19268 ID = Intrinsic::riscv_vwadd_mask;
19269 PolicyAttrs = 1;
19270IsMasked = true;
19271
19272 {
19273 if (IsMasked) {
19274 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19275 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19276 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19277 } else {
19278 if (PolicyAttrs & RVV_VTA)
19279 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19280 }
19281 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19282 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19283 if (IsMasked) {
19284 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19285 // maskedoff, op1, op2, mask, vl, policy
19286 IntrinsicTypes = {ResultType,
19287 Ops[1]->getType(),
19288 ElemTy,
19289 Ops[4]->getType()};
19290 } else {
19291 // passtru, op1, op2, vl
19292 IntrinsicTypes = {ResultType,
19293 Ops[1]->getType(),
19294 ElemTy,
19295 Ops[3]->getType()};
19296 }
19297 break;
19298 }
19299 break;
19300case RISCVVector::BI__builtin_rvv_vwadd_wv_tu:
19301case RISCVVector::BI__builtin_rvv_vwadd_wx_tu:
19302 ID = Intrinsic::riscv_vwadd_w;
19303 PolicyAttrs = 2;
19304 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19305 break;
19306case RISCVVector::BI__builtin_rvv_vwadd_wv_ta:
19307case RISCVVector::BI__builtin_rvv_vwadd_wx_ta:
19308 ID = Intrinsic::riscv_vwadd_w;
19309 PolicyAttrs = 3;
19310 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19311 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19312 break;
19313case RISCVVector::BI__builtin_rvv_vwadd_wv_tuma:
19314case RISCVVector::BI__builtin_rvv_vwadd_wx_tuma:
19315 ID = Intrinsic::riscv_vwadd_w_mask;
19316 PolicyAttrs = 2;
19317 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19318 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19319 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19320 break;
19321case RISCVVector::BI__builtin_rvv_vwadd_wv_tama:
19322case RISCVVector::BI__builtin_rvv_vwadd_wx_tama:
19323 ID = Intrinsic::riscv_vwadd_w_mask;
19324 PolicyAttrs = 3;
19325 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19326 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19327 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19328 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19329 break;
19330case RISCVVector::BI__builtin_rvv_vwadd_wv_tumu:
19331case RISCVVector::BI__builtin_rvv_vwadd_wx_tumu:
19332 ID = Intrinsic::riscv_vwadd_w_mask;
19333 PolicyAttrs = 0;
19334 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19335 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19336 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19337 break;
19338case RISCVVector::BI__builtin_rvv_vwadd_wv_tamu:
19339case RISCVVector::BI__builtin_rvv_vwadd_wx_tamu:
19340 ID = Intrinsic::riscv_vwadd_w_mask;
19341 PolicyAttrs = 1;
19342 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19343 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19344 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19345 break;
19346case RISCVVector::BI__builtin_rvv_vwaddu_vv_tu:
19347case RISCVVector::BI__builtin_rvv_vwaddu_vx_tu:
19348 ID = Intrinsic::riscv_vwaddu;
19349 PolicyAttrs = 2;
19350 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19351 break;
19352case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tu:
19353 ID = Intrinsic::riscv_vwaddu;
19354 PolicyAttrs = 2;
19355IsMasked = false;
19356
19357 {
19358 if (IsMasked) {
19359 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19360 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19361 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19362 } else {
19363 if (PolicyAttrs & RVV_VTA)
19364 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19365 }
19366 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19367 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19368 if (IsMasked) {
19369 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19370 // maskedoff, op1, op2, mask, vl, policy
19371 IntrinsicTypes = {ResultType,
19372 Ops[1]->getType(),
19373 ElemTy,
19374 Ops[4]->getType()};
19375 } else {
19376 // passtru, op1, op2, vl
19377 IntrinsicTypes = {ResultType,
19378 Ops[1]->getType(),
19379 ElemTy,
19380 Ops[3]->getType()};
19381 }
19382 break;
19383 }
19384 break;
19385case RISCVVector::BI__builtin_rvv_vwaddu_vv_ta:
19386case RISCVVector::BI__builtin_rvv_vwaddu_vx_ta:
19387 ID = Intrinsic::riscv_vwaddu;
19388 PolicyAttrs = 3;
19389 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19390 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19391 break;
19392case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_ta:
19393 ID = Intrinsic::riscv_vwaddu;
19394 PolicyAttrs = 3;
19395IsMasked = false;
19396
19397 {
19398 if (IsMasked) {
19399 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19400 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19401 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19402 } else {
19403 if (PolicyAttrs & RVV_VTA)
19404 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19405 }
19406 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19407 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19408 if (IsMasked) {
19409 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19410 // maskedoff, op1, op2, mask, vl, policy
19411 IntrinsicTypes = {ResultType,
19412 Ops[1]->getType(),
19413 ElemTy,
19414 Ops[4]->getType()};
19415 } else {
19416 // passtru, op1, op2, vl
19417 IntrinsicTypes = {ResultType,
19418 Ops[1]->getType(),
19419 ElemTy,
19420 Ops[3]->getType()};
19421 }
19422 break;
19423 }
19424 break;
19425case RISCVVector::BI__builtin_rvv_vwaddu_vv_tuma:
19426case RISCVVector::BI__builtin_rvv_vwaddu_vx_tuma:
19427 ID = Intrinsic::riscv_vwaddu_mask;
19428 PolicyAttrs = 2;
19429 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19430 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19431 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19432 break;
19433case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tuma:
19434 ID = Intrinsic::riscv_vwaddu_mask;
19435 PolicyAttrs = 2;
19436IsMasked = true;
19437
19438 {
19439 if (IsMasked) {
19440 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19441 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19442 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19443 } else {
19444 if (PolicyAttrs & RVV_VTA)
19445 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19446 }
19447 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19448 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19449 if (IsMasked) {
19450 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19451 // maskedoff, op1, op2, mask, vl, policy
19452 IntrinsicTypes = {ResultType,
19453 Ops[1]->getType(),
19454 ElemTy,
19455 Ops[4]->getType()};
19456 } else {
19457 // passtru, op1, op2, vl
19458 IntrinsicTypes = {ResultType,
19459 Ops[1]->getType(),
19460 ElemTy,
19461 Ops[3]->getType()};
19462 }
19463 break;
19464 }
19465 break;
19466case RISCVVector::BI__builtin_rvv_vwaddu_vv_tama:
19467case RISCVVector::BI__builtin_rvv_vwaddu_vx_tama:
19468 ID = Intrinsic::riscv_vwaddu_mask;
19469 PolicyAttrs = 3;
19470 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19471 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19472 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19473 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19474 break;
19475case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tama:
19476 ID = Intrinsic::riscv_vwaddu_mask;
19477 PolicyAttrs = 3;
19478IsMasked = true;
19479
19480 {
19481 if (IsMasked) {
19482 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19483 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19484 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19485 } else {
19486 if (PolicyAttrs & RVV_VTA)
19487 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19488 }
19489 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19490 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19491 if (IsMasked) {
19492 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19493 // maskedoff, op1, op2, mask, vl, policy
19494 IntrinsicTypes = {ResultType,
19495 Ops[1]->getType(),
19496 ElemTy,
19497 Ops[4]->getType()};
19498 } else {
19499 // passtru, op1, op2, vl
19500 IntrinsicTypes = {ResultType,
19501 Ops[1]->getType(),
19502 ElemTy,
19503 Ops[3]->getType()};
19504 }
19505 break;
19506 }
19507 break;
19508case RISCVVector::BI__builtin_rvv_vwaddu_vv_tumu:
19509case RISCVVector::BI__builtin_rvv_vwaddu_vx_tumu:
19510 ID = Intrinsic::riscv_vwaddu_mask;
19511 PolicyAttrs = 0;
19512 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19513 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19514 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19515 break;
19516case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tumu:
19517 ID = Intrinsic::riscv_vwaddu_mask;
19518 PolicyAttrs = 0;
19519IsMasked = true;
19520
19521 {
19522 if (IsMasked) {
19523 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19524 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19525 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19526 } else {
19527 if (PolicyAttrs & RVV_VTA)
19528 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19529 }
19530 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19531 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19532 if (IsMasked) {
19533 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19534 // maskedoff, op1, op2, mask, vl, policy
19535 IntrinsicTypes = {ResultType,
19536 Ops[1]->getType(),
19537 ElemTy,
19538 Ops[4]->getType()};
19539 } else {
19540 // passtru, op1, op2, vl
19541 IntrinsicTypes = {ResultType,
19542 Ops[1]->getType(),
19543 ElemTy,
19544 Ops[3]->getType()};
19545 }
19546 break;
19547 }
19548 break;
19549case RISCVVector::BI__builtin_rvv_vwaddu_vv_tamu:
19550case RISCVVector::BI__builtin_rvv_vwaddu_vx_tamu:
19551 ID = Intrinsic::riscv_vwaddu_mask;
19552 PolicyAttrs = 1;
19553 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19554 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19555 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19556 break;
19557case RISCVVector::BI__builtin_rvv_vwcvtu_x_x_v_tamu:
19558 ID = Intrinsic::riscv_vwaddu_mask;
19559 PolicyAttrs = 1;
19560IsMasked = true;
19561
19562 {
19563 if (IsMasked) {
19564 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19565 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
19566 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19567 } else {
19568 if (PolicyAttrs & RVV_VTA)
19569 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19570 }
19571 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
19572 Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
19573 if (IsMasked) {
19574 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19575 // maskedoff, op1, op2, mask, vl, policy
19576 IntrinsicTypes = {ResultType,
19577 Ops[1]->getType(),
19578 ElemTy,
19579 Ops[4]->getType()};
19580 } else {
19581 // passtru, op1, op2, vl
19582 IntrinsicTypes = {ResultType,
19583 Ops[1]->getType(),
19584 ElemTy,
19585 Ops[3]->getType()};
19586 }
19587 break;
19588 }
19589 break;
19590case RISCVVector::BI__builtin_rvv_vwaddu_wx_tu:
19591case RISCVVector::BI__builtin_rvv_vwaddu_wv_tu:
19592 ID = Intrinsic::riscv_vwaddu_w;
19593 PolicyAttrs = 2;
19594 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19595 break;
19596case RISCVVector::BI__builtin_rvv_vwaddu_wx_ta:
19597case RISCVVector::BI__builtin_rvv_vwaddu_wv_ta:
19598 ID = Intrinsic::riscv_vwaddu_w;
19599 PolicyAttrs = 3;
19600 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19601 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19602 break;
19603case RISCVVector::BI__builtin_rvv_vwaddu_wx_tuma:
19604case RISCVVector::BI__builtin_rvv_vwaddu_wv_tuma:
19605 ID = Intrinsic::riscv_vwaddu_w_mask;
19606 PolicyAttrs = 2;
19607 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19608 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19609 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19610 break;
19611case RISCVVector::BI__builtin_rvv_vwaddu_wx_tama:
19612case RISCVVector::BI__builtin_rvv_vwaddu_wv_tama:
19613 ID = Intrinsic::riscv_vwaddu_w_mask;
19614 PolicyAttrs = 3;
19615 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19616 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19617 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19618 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19619 break;
19620case RISCVVector::BI__builtin_rvv_vwaddu_wx_tumu:
19621case RISCVVector::BI__builtin_rvv_vwaddu_wv_tumu:
19622 ID = Intrinsic::riscv_vwaddu_w_mask;
19623 PolicyAttrs = 0;
19624 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19625 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19626 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19627 break;
19628case RISCVVector::BI__builtin_rvv_vwaddu_wx_tamu:
19629case RISCVVector::BI__builtin_rvv_vwaddu_wv_tamu:
19630 ID = Intrinsic::riscv_vwaddu_w_mask;
19631 PolicyAttrs = 1;
19632 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19633 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19634 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
19635 break;
19636case RISCVVector::BI__builtin_rvv_vwmacc_vv_tu:
19637case RISCVVector::BI__builtin_rvv_vwmacc_vx_tu:
19638 ID = Intrinsic::riscv_vwmacc;
19639 PolicyAttrs = 2;
19640 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19641 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19642 break;
19643case RISCVVector::BI__builtin_rvv_vwmacc_vv_ta:
19644case RISCVVector::BI__builtin_rvv_vwmacc_vx_ta:
19645 ID = Intrinsic::riscv_vwmacc;
19646 PolicyAttrs = 3;
19647 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19648 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19649 break;
19650case RISCVVector::BI__builtin_rvv_vwmacc_vv_tuma:
19651case RISCVVector::BI__builtin_rvv_vwmacc_vx_tuma:
19652 ID = Intrinsic::riscv_vwmacc_mask;
19653 PolicyAttrs = 2;
19654 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19655 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19656 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19657 break;
19658case RISCVVector::BI__builtin_rvv_vwmacc_vv_tama:
19659case RISCVVector::BI__builtin_rvv_vwmacc_vx_tama:
19660 ID = Intrinsic::riscv_vwmacc_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 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19665 break;
19666case RISCVVector::BI__builtin_rvv_vwmacc_vv_tumu:
19667case RISCVVector::BI__builtin_rvv_vwmacc_vx_tumu:
19668 ID = Intrinsic::riscv_vwmacc_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_vwmacc_vv_tamu:
19675case RISCVVector::BI__builtin_rvv_vwmacc_vx_tamu:
19676 ID = Intrinsic::riscv_vwmacc_mask;
19677 PolicyAttrs = 1;
19678 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19679 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19680 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19681 break;
19682case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tu:
19683case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tu:
19684 ID = Intrinsic::riscv_vwmaccsu;
19685 PolicyAttrs = 2;
19686 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19687 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19688 break;
19689case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_ta:
19690case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_ta:
19691 ID = Intrinsic::riscv_vwmaccsu;
19692 PolicyAttrs = 3;
19693 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19694 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19695 break;
19696case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tuma:
19697case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tuma:
19698 ID = Intrinsic::riscv_vwmaccsu_mask;
19699 PolicyAttrs = 2;
19700 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19701 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19702 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19703 break;
19704case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tama:
19705case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tama:
19706 ID = Intrinsic::riscv_vwmaccsu_mask;
19707 PolicyAttrs = 3;
19708 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19709 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19710 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19711 break;
19712case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tumu:
19713case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tumu:
19714 ID = Intrinsic::riscv_vwmaccsu_mask;
19715 PolicyAttrs = 0;
19716 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19717 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19718 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19719 break;
19720case RISCVVector::BI__builtin_rvv_vwmaccsu_vv_tamu:
19721case RISCVVector::BI__builtin_rvv_vwmaccsu_vx_tamu:
19722 ID = Intrinsic::riscv_vwmaccsu_mask;
19723 PolicyAttrs = 1;
19724 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19725 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19726 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19727 break;
19728case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tu:
19729case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tu:
19730 ID = Intrinsic::riscv_vwmaccu;
19731 PolicyAttrs = 2;
19732 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19733 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19734 break;
19735case RISCVVector::BI__builtin_rvv_vwmaccu_vv_ta:
19736case RISCVVector::BI__builtin_rvv_vwmaccu_vx_ta:
19737 ID = Intrinsic::riscv_vwmaccu;
19738 PolicyAttrs = 3;
19739 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19740 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19741 break;
19742case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tuma:
19743case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tuma:
19744 ID = Intrinsic::riscv_vwmaccu_mask;
19745 PolicyAttrs = 2;
19746 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19747 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19748 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19749 break;
19750case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tama:
19751case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tama:
19752 ID = Intrinsic::riscv_vwmaccu_mask;
19753 PolicyAttrs = 3;
19754 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19755 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19756 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19757 break;
19758case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tumu:
19759case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tumu:
19760 ID = Intrinsic::riscv_vwmaccu_mask;
19761 PolicyAttrs = 0;
19762 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19763 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19764 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19765 break;
19766case RISCVVector::BI__builtin_rvv_vwmaccu_vv_tamu:
19767case RISCVVector::BI__builtin_rvv_vwmaccu_vx_tamu:
19768 ID = Intrinsic::riscv_vwmaccu_mask;
19769 PolicyAttrs = 1;
19770 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19771 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19772 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19773 break;
19774case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tu:
19775 ID = Intrinsic::riscv_vwmaccus;
19776 PolicyAttrs = 2;
19777 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19778 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19779 break;
19780case RISCVVector::BI__builtin_rvv_vwmaccus_vx_ta:
19781 ID = Intrinsic::riscv_vwmaccus;
19782 PolicyAttrs = 3;
19783 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19784 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19785 break;
19786case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tuma:
19787 ID = Intrinsic::riscv_vwmaccus_mask;
19788 PolicyAttrs = 2;
19789 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19790 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19791 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19792 break;
19793case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tama:
19794 ID = Intrinsic::riscv_vwmaccus_mask;
19795 PolicyAttrs = 3;
19796 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19797 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19798 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19799 break;
19800case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tumu:
19801 ID = Intrinsic::riscv_vwmaccus_mask;
19802 PolicyAttrs = 0;
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[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19806 break;
19807case RISCVVector::BI__builtin_rvv_vwmaccus_vx_tamu:
19808 ID = Intrinsic::riscv_vwmaccus_mask;
19809 PolicyAttrs = 1;
19810 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
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_vwmul_vv_tu:
19815case RISCVVector::BI__builtin_rvv_vwmul_vx_tu:
19816 ID = Intrinsic::riscv_vwmul;
19817 PolicyAttrs = 2;
19818 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19819 break;
19820case RISCVVector::BI__builtin_rvv_vwmul_vv_ta:
19821case RISCVVector::BI__builtin_rvv_vwmul_vx_ta:
19822 ID = Intrinsic::riscv_vwmul;
19823 PolicyAttrs = 3;
19824 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19825 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19826 break;
19827case RISCVVector::BI__builtin_rvv_vwmul_vv_tuma:
19828case RISCVVector::BI__builtin_rvv_vwmul_vx_tuma:
19829 ID = Intrinsic::riscv_vwmul_mask;
19830 PolicyAttrs = 2;
19831 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19832 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19833 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19834 break;
19835case RISCVVector::BI__builtin_rvv_vwmul_vv_tama:
19836case RISCVVector::BI__builtin_rvv_vwmul_vx_tama:
19837 ID = Intrinsic::riscv_vwmul_mask;
19838 PolicyAttrs = 3;
19839 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19840 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19841 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19842 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19843 break;
19844case RISCVVector::BI__builtin_rvv_vwmul_vv_tumu:
19845case RISCVVector::BI__builtin_rvv_vwmul_vx_tumu:
19846 ID = Intrinsic::riscv_vwmul_mask;
19847 PolicyAttrs = 0;
19848 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19849 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19850 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19851 break;
19852case RISCVVector::BI__builtin_rvv_vwmul_vv_tamu:
19853case RISCVVector::BI__builtin_rvv_vwmul_vx_tamu:
19854 ID = Intrinsic::riscv_vwmul_mask;
19855 PolicyAttrs = 1;
19856 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
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_vwmulsu_vv_tu:
19861case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tu:
19862 ID = Intrinsic::riscv_vwmulsu;
19863 PolicyAttrs = 2;
19864 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19865 break;
19866case RISCVVector::BI__builtin_rvv_vwmulsu_vv_ta:
19867case RISCVVector::BI__builtin_rvv_vwmulsu_vx_ta:
19868 ID = Intrinsic::riscv_vwmulsu;
19869 PolicyAttrs = 3;
19870 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19871 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19872 break;
19873case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tuma:
19874case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tuma:
19875 ID = Intrinsic::riscv_vwmulsu_mask;
19876 PolicyAttrs = 2;
19877 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19878 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19879 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19880 break;
19881case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tama:
19882case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tama:
19883 ID = Intrinsic::riscv_vwmulsu_mask;
19884 PolicyAttrs = 3;
19885 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19886 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19887 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19888 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19889 break;
19890case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tumu:
19891case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tumu:
19892 ID = Intrinsic::riscv_vwmulsu_mask;
19893 PolicyAttrs = 0;
19894 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19895 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19896 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19897 break;
19898case RISCVVector::BI__builtin_rvv_vwmulsu_vv_tamu:
19899case RISCVVector::BI__builtin_rvv_vwmulsu_vx_tamu:
19900 ID = Intrinsic::riscv_vwmulsu_mask;
19901 PolicyAttrs = 1;
19902 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
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_vwmulu_vv_tu:
19907case RISCVVector::BI__builtin_rvv_vwmulu_vx_tu:
19908 ID = Intrinsic::riscv_vwmulu;
19909 PolicyAttrs = 2;
19910 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19911 break;
19912case RISCVVector::BI__builtin_rvv_vwmulu_vv_ta:
19913case RISCVVector::BI__builtin_rvv_vwmulu_vx_ta:
19914 ID = Intrinsic::riscv_vwmulu;
19915 PolicyAttrs = 3;
19916 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19917 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19918 break;
19919case RISCVVector::BI__builtin_rvv_vwmulu_vv_tuma:
19920case RISCVVector::BI__builtin_rvv_vwmulu_vx_tuma:
19921 ID = Intrinsic::riscv_vwmulu_mask;
19922 PolicyAttrs = 2;
19923 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19924 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19925 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19926 break;
19927case RISCVVector::BI__builtin_rvv_vwmulu_vv_tama:
19928case RISCVVector::BI__builtin_rvv_vwmulu_vx_tama:
19929 ID = Intrinsic::riscv_vwmulu_mask;
19930 PolicyAttrs = 3;
19931 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19932 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19933 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19934 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19935 break;
19936case RISCVVector::BI__builtin_rvv_vwmulu_vv_tumu:
19937case RISCVVector::BI__builtin_rvv_vwmulu_vx_tumu:
19938 ID = Intrinsic::riscv_vwmulu_mask;
19939 PolicyAttrs = 0;
19940 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19941 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19942 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19943 break;
19944case RISCVVector::BI__builtin_rvv_vwmulu_vv_tamu:
19945case RISCVVector::BI__builtin_rvv_vwmulu_vx_tamu:
19946 ID = Intrinsic::riscv_vwmulu_mask;
19947 PolicyAttrs = 1;
19948 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19949 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
19950 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
19951 break;
19952case RISCVVector::BI__builtin_rvv_vwredsum_vs_tu:
19953 ID = Intrinsic::riscv_vwredsum;
19954 PolicyAttrs = 2;
19955 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19956 break;
19957case RISCVVector::BI__builtin_rvv_vwredsum_vs_ta:
19958 ID = Intrinsic::riscv_vwredsum;
19959 PolicyAttrs = 3;
19960 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19961 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19962 break;
19963case RISCVVector::BI__builtin_rvv_vwredsum_vs_tum:
19964 ID = Intrinsic::riscv_vwredsum_mask;
19965 PolicyAttrs = 2;
19966 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19967 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19968 break;
19969case RISCVVector::BI__builtin_rvv_vwredsum_vs_tama:
19970case RISCVVector::BI__builtin_rvv_vwredsum_vs_tam:
19971 ID = Intrinsic::riscv_vwredsum_mask;
19972 PolicyAttrs = 3;
19973 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19974 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19975 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19976 break;
19977case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tu:
19978 ID = Intrinsic::riscv_vwredsumu;
19979 PolicyAttrs = 2;
19980 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19981 break;
19982case RISCVVector::BI__builtin_rvv_vwredsumu_vs_ta:
19983 ID = Intrinsic::riscv_vwredsumu;
19984 PolicyAttrs = 3;
19985 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
19986 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19987 break;
19988case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tum:
19989 ID = Intrinsic::riscv_vwredsumu_mask;
19990 PolicyAttrs = 2;
19991 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19992 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
19993 break;
19994case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tama:
19995case RISCVVector::BI__builtin_rvv_vwredsumu_vs_tam:
19996 ID = Intrinsic::riscv_vwredsumu_mask;
19997 PolicyAttrs = 3;
19998 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
19999 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20000 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20001 break;
20002case RISCVVector::BI__builtin_rvv_vwsub_vv_tu:
20003case RISCVVector::BI__builtin_rvv_vwsub_vx_tu:
20004 ID = Intrinsic::riscv_vwsub;
20005 PolicyAttrs = 2;
20006 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20007 break;
20008case RISCVVector::BI__builtin_rvv_vwsub_vv_ta:
20009case RISCVVector::BI__builtin_rvv_vwsub_vx_ta:
20010 ID = Intrinsic::riscv_vwsub;
20011 PolicyAttrs = 3;
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_vwsub_vv_tuma:
20016case RISCVVector::BI__builtin_rvv_vwsub_vx_tuma:
20017 ID = Intrinsic::riscv_vwsub_mask;
20018 PolicyAttrs = 2;
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_vwsub_vv_tama:
20024case RISCVVector::BI__builtin_rvv_vwsub_vx_tama:
20025 ID = Intrinsic::riscv_vwsub_mask;
20026 PolicyAttrs = 3;
20027 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20028 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20029 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20030 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20031 break;
20032case RISCVVector::BI__builtin_rvv_vwsub_vv_tumu:
20033case RISCVVector::BI__builtin_rvv_vwsub_vx_tumu:
20034 ID = Intrinsic::riscv_vwsub_mask;
20035 PolicyAttrs = 0;
20036 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20037 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20038 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20039 break;
20040case RISCVVector::BI__builtin_rvv_vwsub_vv_tamu:
20041case RISCVVector::BI__builtin_rvv_vwsub_vx_tamu:
20042 ID = Intrinsic::riscv_vwsub_mask;
20043 PolicyAttrs = 1;
20044 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20045 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20046 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20047 break;
20048case RISCVVector::BI__builtin_rvv_vwsub_wv_tu:
20049case RISCVVector::BI__builtin_rvv_vwsub_wx_tu:
20050 ID = Intrinsic::riscv_vwsub_w;
20051 PolicyAttrs = 2;
20052 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20053 break;
20054case RISCVVector::BI__builtin_rvv_vwsub_wv_ta:
20055case RISCVVector::BI__builtin_rvv_vwsub_wx_ta:
20056 ID = Intrinsic::riscv_vwsub_w;
20057 PolicyAttrs = 3;
20058 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20059 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20060 break;
20061case RISCVVector::BI__builtin_rvv_vwsub_wv_tuma:
20062case RISCVVector::BI__builtin_rvv_vwsub_wx_tuma:
20063 ID = Intrinsic::riscv_vwsub_w_mask;
20064 PolicyAttrs = 2;
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[2]->getType(), Ops.back()->getType()};
20068 break;
20069case RISCVVector::BI__builtin_rvv_vwsub_wv_tama:
20070case RISCVVector::BI__builtin_rvv_vwsub_wx_tama:
20071 ID = Intrinsic::riscv_vwsub_w_mask;
20072 PolicyAttrs = 3;
20073 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20074 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20075 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20076 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20077 break;
20078case RISCVVector::BI__builtin_rvv_vwsub_wv_tumu:
20079case RISCVVector::BI__builtin_rvv_vwsub_wx_tumu:
20080 ID = Intrinsic::riscv_vwsub_w_mask;
20081 PolicyAttrs = 0;
20082 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20083 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20084 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20085 break;
20086case RISCVVector::BI__builtin_rvv_vwsub_wv_tamu:
20087case RISCVVector::BI__builtin_rvv_vwsub_wx_tamu:
20088 ID = Intrinsic::riscv_vwsub_w_mask;
20089 PolicyAttrs = 1;
20090 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20091 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20092 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20093 break;
20094case RISCVVector::BI__builtin_rvv_vwsubu_vv_tu:
20095case RISCVVector::BI__builtin_rvv_vwsubu_vx_tu:
20096 ID = Intrinsic::riscv_vwsubu;
20097 PolicyAttrs = 2;
20098 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20099 break;
20100case RISCVVector::BI__builtin_rvv_vwsubu_vv_ta:
20101case RISCVVector::BI__builtin_rvv_vwsubu_vx_ta:
20102 ID = Intrinsic::riscv_vwsubu;
20103 PolicyAttrs = 3;
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_vwsubu_vv_tuma:
20108case RISCVVector::BI__builtin_rvv_vwsubu_vx_tuma:
20109 ID = Intrinsic::riscv_vwsubu_mask;
20110 PolicyAttrs = 2;
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_vwsubu_vv_tama:
20116case RISCVVector::BI__builtin_rvv_vwsubu_vx_tama:
20117 ID = Intrinsic::riscv_vwsubu_mask;
20118 PolicyAttrs = 3;
20119 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20120 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20121 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20122 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20123 break;
20124case RISCVVector::BI__builtin_rvv_vwsubu_vv_tumu:
20125case RISCVVector::BI__builtin_rvv_vwsubu_vx_tumu:
20126 ID = Intrinsic::riscv_vwsubu_mask;
20127 PolicyAttrs = 0;
20128 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20129 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20130 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20131 break;
20132case RISCVVector::BI__builtin_rvv_vwsubu_vv_tamu:
20133case RISCVVector::BI__builtin_rvv_vwsubu_vx_tamu:
20134 ID = Intrinsic::riscv_vwsubu_mask;
20135 PolicyAttrs = 1;
20136 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20137 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20138 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops[2]->getType(), Ops.back()->getType()};
20139 break;
20140case RISCVVector::BI__builtin_rvv_vwsubu_wv_tu:
20141case RISCVVector::BI__builtin_rvv_vwsubu_wx_tu:
20142 ID = Intrinsic::riscv_vwsubu_w;
20143 PolicyAttrs = 2;
20144 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20145 break;
20146case RISCVVector::BI__builtin_rvv_vwsubu_wv_ta:
20147case RISCVVector::BI__builtin_rvv_vwsubu_wx_ta:
20148 ID = Intrinsic::riscv_vwsubu_w;
20149 PolicyAttrs = 3;
20150 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20151 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20152 break;
20153case RISCVVector::BI__builtin_rvv_vwsubu_wv_tuma:
20154case RISCVVector::BI__builtin_rvv_vwsubu_wx_tuma:
20155 ID = Intrinsic::riscv_vwsubu_w_mask;
20156 PolicyAttrs = 2;
20157 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20158 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20159 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20160 break;
20161case RISCVVector::BI__builtin_rvv_vwsubu_wv_tama:
20162case RISCVVector::BI__builtin_rvv_vwsubu_wx_tama:
20163 ID = Intrinsic::riscv_vwsubu_w_mask;
20164 PolicyAttrs = 3;
20165 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20166 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20167 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20168 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20169 break;
20170case RISCVVector::BI__builtin_rvv_vwsubu_wv_tumu:
20171case RISCVVector::BI__builtin_rvv_vwsubu_wx_tumu:
20172 ID = Intrinsic::riscv_vwsubu_w_mask;
20173 PolicyAttrs = 0;
20174 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20175 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20176 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20177 break;
20178case RISCVVector::BI__builtin_rvv_vwsubu_wv_tamu:
20179case RISCVVector::BI__builtin_rvv_vwsubu_wx_tamu:
20180 ID = Intrinsic::riscv_vwsubu_w_mask;
20181 PolicyAttrs = 1;
20182 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20183 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20184 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20185 break;
20186case RISCVVector::BI__builtin_rvv_vxor_vv_tu:
20187case RISCVVector::BI__builtin_rvv_vxor_vx_tu:
20188 ID = Intrinsic::riscv_vxor;
20189 PolicyAttrs = 2;
20190 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20191 break;
20192case RISCVVector::BI__builtin_rvv_vnot_v_tu:
20193 ID = Intrinsic::riscv_vxor;
20194 PolicyAttrs = 2;
20195IsMasked = false;
20196
20197 {
20198 if (IsMasked) {
20199 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20200 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20201 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20202 } else {
20203 if (PolicyAttrs & RVV_VTA)
20204 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20205 }
20206 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20207 Ops.insert(Ops.begin() + 2,
20208 llvm::Constant::getAllOnesValue(ElemTy));
20209 if (IsMasked) {
20210 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20211 // maskedoff, op1, po2, mask, vl, policy
20212 IntrinsicTypes = {ResultType,
20213 ElemTy,
20214 Ops[4]->getType()};
20215 } else {
20216 // passthru, op1, op2, vl
20217 IntrinsicTypes = {ResultType,
20218 ElemTy,
20219 Ops[3]->getType()};
20220 }
20221 break;
20222 }
20223 break;
20224case RISCVVector::BI__builtin_rvv_vxor_vv_ta:
20225case RISCVVector::BI__builtin_rvv_vxor_vx_ta:
20226 ID = Intrinsic::riscv_vxor;
20227 PolicyAttrs = 3;
20228 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20229 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20230 break;
20231case RISCVVector::BI__builtin_rvv_vnot_v_ta:
20232 ID = Intrinsic::riscv_vxor;
20233 PolicyAttrs = 3;
20234IsMasked = false;
20235
20236 {
20237 if (IsMasked) {
20238 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20239 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20240 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20241 } else {
20242 if (PolicyAttrs & RVV_VTA)
20243 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20244 }
20245 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20246 Ops.insert(Ops.begin() + 2,
20247 llvm::Constant::getAllOnesValue(ElemTy));
20248 if (IsMasked) {
20249 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20250 // maskedoff, op1, po2, mask, vl, policy
20251 IntrinsicTypes = {ResultType,
20252 ElemTy,
20253 Ops[4]->getType()};
20254 } else {
20255 // passthru, op1, op2, vl
20256 IntrinsicTypes = {ResultType,
20257 ElemTy,
20258 Ops[3]->getType()};
20259 }
20260 break;
20261 }
20262 break;
20263case RISCVVector::BI__builtin_rvv_vxor_vv_tuma:
20264case RISCVVector::BI__builtin_rvv_vxor_vx_tuma:
20265 ID = Intrinsic::riscv_vxor_mask;
20266 PolicyAttrs = 2;
20267 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20268 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20269 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20270 break;
20271case RISCVVector::BI__builtin_rvv_vnot_v_tuma:
20272 ID = Intrinsic::riscv_vxor_mask;
20273 PolicyAttrs = 2;
20274IsMasked = true;
20275
20276 {
20277 if (IsMasked) {
20278 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20279 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20280 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20281 } else {
20282 if (PolicyAttrs & RVV_VTA)
20283 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20284 }
20285 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20286 Ops.insert(Ops.begin() + 2,
20287 llvm::Constant::getAllOnesValue(ElemTy));
20288 if (IsMasked) {
20289 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20290 // maskedoff, op1, po2, mask, vl, policy
20291 IntrinsicTypes = {ResultType,
20292 ElemTy,
20293 Ops[4]->getType()};
20294 } else {
20295 // passthru, op1, op2, vl
20296 IntrinsicTypes = {ResultType,
20297 ElemTy,
20298 Ops[3]->getType()};
20299 }
20300 break;
20301 }
20302 break;
20303case RISCVVector::BI__builtin_rvv_vxor_vv_tama:
20304case RISCVVector::BI__builtin_rvv_vxor_vx_tama:
20305 ID = Intrinsic::riscv_vxor_mask;
20306 PolicyAttrs = 3;
20307 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20308 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20309 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20310 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20311 break;
20312case RISCVVector::BI__builtin_rvv_vnot_v_tama:
20313 ID = Intrinsic::riscv_vxor_mask;
20314 PolicyAttrs = 3;
20315IsMasked = true;
20316
20317 {
20318 if (IsMasked) {
20319 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20320 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20321 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20322 } else {
20323 if (PolicyAttrs & RVV_VTA)
20324 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20325 }
20326 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20327 Ops.insert(Ops.begin() + 2,
20328 llvm::Constant::getAllOnesValue(ElemTy));
20329 if (IsMasked) {
20330 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20331 // maskedoff, op1, po2, mask, vl, policy
20332 IntrinsicTypes = {ResultType,
20333 ElemTy,
20334 Ops[4]->getType()};
20335 } else {
20336 // passthru, op1, op2, vl
20337 IntrinsicTypes = {ResultType,
20338 ElemTy,
20339 Ops[3]->getType()};
20340 }
20341 break;
20342 }
20343 break;
20344case RISCVVector::BI__builtin_rvv_vxor_vv_tumu:
20345case RISCVVector::BI__builtin_rvv_vxor_vx_tumu:
20346 ID = Intrinsic::riscv_vxor_mask;
20347 PolicyAttrs = 0;
20348 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20349 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20350 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20351 break;
20352case RISCVVector::BI__builtin_rvv_vnot_v_tumu:
20353 ID = Intrinsic::riscv_vxor_mask;
20354 PolicyAttrs = 0;
20355IsMasked = true;
20356
20357 {
20358 if (IsMasked) {
20359 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20360 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20361 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20362 } else {
20363 if (PolicyAttrs & RVV_VTA)
20364 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20365 }
20366 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20367 Ops.insert(Ops.begin() + 2,
20368 llvm::Constant::getAllOnesValue(ElemTy));
20369 if (IsMasked) {
20370 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20371 // maskedoff, op1, po2, mask, vl, policy
20372 IntrinsicTypes = {ResultType,
20373 ElemTy,
20374 Ops[4]->getType()};
20375 } else {
20376 // passthru, op1, op2, vl
20377 IntrinsicTypes = {ResultType,
20378 ElemTy,
20379 Ops[3]->getType()};
20380 }
20381 break;
20382 }
20383 break;
20384case RISCVVector::BI__builtin_rvv_vxor_vv_tamu:
20385case RISCVVector::BI__builtin_rvv_vxor_vx_tamu:
20386 ID = Intrinsic::riscv_vxor_mask;
20387 PolicyAttrs = 1;
20388 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20389 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20390 IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
20391 break;
20392case RISCVVector::BI__builtin_rvv_vnot_v_tamu:
20393 ID = Intrinsic::riscv_vxor_mask;
20394 PolicyAttrs = 1;
20395IsMasked = true;
20396
20397 {
20398 if (IsMasked) {
20399 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20400 if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
20401 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20402 } else {
20403 if (PolicyAttrs & RVV_VTA)
20404 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20405 }
20406 auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
20407 Ops.insert(Ops.begin() + 2,
20408 llvm::Constant::getAllOnesValue(ElemTy));
20409 if (IsMasked) {
20410 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20411 // maskedoff, op1, po2, mask, vl, policy
20412 IntrinsicTypes = {ResultType,
20413 ElemTy,
20414 Ops[4]->getType()};
20415 } else {
20416 // passthru, op1, op2, vl
20417 IntrinsicTypes = {ResultType,
20418 ElemTy,
20419 Ops[3]->getType()};
20420 }
20421 break;
20422 }
20423 break;
20424case RISCVVector::BI__builtin_rvv_vzext_vf2_tu:
20425case RISCVVector::BI__builtin_rvv_vzext_vf4_tu:
20426case RISCVVector::BI__builtin_rvv_vzext_vf8_tu:
20427 ID = Intrinsic::riscv_vzext;
20428 PolicyAttrs = 2;
20429 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20430 break;
20431case RISCVVector::BI__builtin_rvv_vzext_vf2_ta:
20432case RISCVVector::BI__builtin_rvv_vzext_vf4_ta:
20433case RISCVVector::BI__builtin_rvv_vzext_vf8_ta:
20434 ID = Intrinsic::riscv_vzext;
20435 PolicyAttrs = 3;
20436 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20437 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20438 break;
20439case RISCVVector::BI__builtin_rvv_vzext_vf2_tuma:
20440case RISCVVector::BI__builtin_rvv_vzext_vf4_tuma:
20441case RISCVVector::BI__builtin_rvv_vzext_vf8_tuma:
20442 ID = Intrinsic::riscv_vzext_mask;
20443 PolicyAttrs = 2;
20444 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20445 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20446 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20447 break;
20448case RISCVVector::BI__builtin_rvv_vzext_vf2_tama:
20449case RISCVVector::BI__builtin_rvv_vzext_vf4_tama:
20450case RISCVVector::BI__builtin_rvv_vzext_vf8_tama:
20451 ID = Intrinsic::riscv_vzext_mask;
20452 PolicyAttrs = 3;
20453 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20454 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20455 Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
20456 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20457 break;
20458case RISCVVector::BI__builtin_rvv_vzext_vf2_tumu:
20459case RISCVVector::BI__builtin_rvv_vzext_vf4_tumu:
20460case RISCVVector::BI__builtin_rvv_vzext_vf8_tumu:
20461 ID = Intrinsic::riscv_vzext_mask;
20462 PolicyAttrs = 0;
20463 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20464 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20465 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20466 break;
20467case RISCVVector::BI__builtin_rvv_vzext_vf2_tamu:
20468case RISCVVector::BI__builtin_rvv_vzext_vf4_tamu:
20469case RISCVVector::BI__builtin_rvv_vzext_vf8_tamu:
20470 ID = Intrinsic::riscv_vzext_mask;
20471 PolicyAttrs = 1;
20472 std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
20473 Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
20474 IntrinsicTypes = {ResultType, Ops[1]->getType(), Ops.back()->getType()};
20475 break;
20476