77 : STI(ST), XLen(STI.getXLen()), sXLen(
LLT::scalar(XLen)) {
129 auto BoolVecTys = {nxv1s1, nxv2s1, nxv4s1, nxv8s1, nxv16s1, nxv32s1, nxv64s1};
131 auto IntOrFPVecTys = {nxv1s8, nxv2s8, nxv4s8, nxv8s8, nxv16s8, nxv32s8,
132 nxv64s8, nxv1s16, nxv2s16, nxv4s16, nxv8s16, nxv16s16,
133 nxv32s16, nxv1s32, nxv2s32, nxv4s32, nxv8s32, nxv16s32,
134 nxv1s64, nxv2s64, nxv4s64, nxv8s64};
136 auto PtrVecTys = {nxv1p0, nxv2p0, nxv4p0, nxv8p0, nxv16p0};
152 {G_UADDE, G_UADDO, G_USUBE, G_USUBO, G_READ_REGISTER, G_WRITE_REGISTER})
161 {G_UADDSAT, G_SADDSAT, G_USUBSAT, G_SSUBSAT, G_SSHLSAT, G_USHLSAT})
165 .legalFor({{sXLen, sXLen}})
166 .customFor(ST.is64Bit(), {{s32, s32}})
167 .widenScalarToNextPow2(0)
171 getActionDefinitionsBuilder({G_ZEXT, G_SEXT, G_ANYEXT})
172 .legalFor({{s32, s16}})
173 .legalFor(
ST.is64Bit(), {{s64, s16}, {s64, s32}})
179 getActionDefinitionsBuilder(G_SEXT_INREG)
181 .clampScalar(0, sXLen, sXLen)
185 for (
unsigned Op : {G_MERGE_VALUES, G_UNMERGE_VALUES}) {
186 auto &MergeUnmergeActions = getActionDefinitionsBuilder(
Op);
187 unsigned BigTyIdx =
Op == G_MERGE_VALUES ? 0 : 1;
188 unsigned LitTyIdx =
Op == G_MERGE_VALUES ? 1 : 0;
189 if (XLen == 32 &&
ST.hasStdExtD()) {
190 MergeUnmergeActions.legalIf(
193 MergeUnmergeActions.widenScalarToNextPow2(LitTyIdx, XLen)
194 .widenScalarToNextPow2(BigTyIdx, XLen)
195 .clampScalar(LitTyIdx, sXLen, sXLen)
196 .clampScalar(BigTyIdx, sXLen, sXLen);
199 getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
201 getActionDefinitionsBuilder({G_ROTR, G_ROTL})
202 .legalFor(
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb(), {{sXLen, sXLen}})
203 .customFor(
ST.is64Bit() && (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb()),
207 getActionDefinitionsBuilder(G_BITREVERSE).maxScalar(0, sXLen).lower();
209 getActionDefinitionsBuilder(G_BITCAST).legalIf(
215 auto &BSWAPActions = getActionDefinitionsBuilder(G_BSWAP);
216 if (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb())
217 BSWAPActions.legalFor({sXLen}).clampScalar(0, sXLen, sXLen);
219 BSWAPActions.maxScalar(0, sXLen).lower();
221 auto &CountZerosActions = getActionDefinitionsBuilder({G_CTLZ, G_CTTZ});
222 auto &CountZerosUndefActions =
223 getActionDefinitionsBuilder({G_CTLZ_ZERO_UNDEF, G_CTTZ_ZERO_UNDEF});
224 if (
ST.hasStdExtZbb()) {
225 CountZerosActions.legalFor({{sXLen, sXLen}})
226 .customFor({{s32, s32}})
227 .clampScalar(0, s32, sXLen)
228 .widenScalarToNextPow2(0)
229 .scalarSameSizeAs(1, 0);
231 CountZerosActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
232 CountZerosUndefActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0);
234 CountZerosUndefActions.lower();
236 auto &CountSignActions = getActionDefinitionsBuilder(G_CTLS);
237 if (
ST.hasStdExtP()) {
238 CountSignActions.legalFor({{sXLen, sXLen}})
239 .customFor({{s32, s32}})
240 .clampScalar(0, s32, sXLen)
241 .widenScalarToNextPow2(0)
242 .scalarSameSizeAs(1, 0);
244 CountSignActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
247 auto &CTPOPActions = getActionDefinitionsBuilder(G_CTPOP);
248 if (
ST.hasStdExtZbb()) {
249 CTPOPActions.legalFor({{sXLen, sXLen}})
250 .clampScalar(0, sXLen, sXLen)
251 .scalarSameSizeAs(1, 0);
253 CTPOPActions.widenScalarToNextPow2(0, 8)
254 .clampScalar(0, s8, sXLen)
255 .scalarSameSizeAs(1, 0)
259 getActionDefinitionsBuilder(G_CONSTANT)
261 .legalFor(!
ST.is64Bit(), {s32})
262 .customFor(
ST.is64Bit(), {s64})
263 .widenScalarToNextPow2(0)
264 .clampScalar(0, sXLen, sXLen);
267 getActionDefinitionsBuilder(G_FREEZE)
268 .legalFor({s16, s32, p0})
269 .legalFor(
ST.is64Bit(), {s64})
272 .widenScalarToNextPow2(0)
273 .clampScalar(0, s16, sXLen);
277 getActionDefinitionsBuilder(
278 {G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
279 .legalFor({s32, sXLen, p0})
282 .widenScalarToNextPow2(0)
283 .clampScalar(0, s32, sXLen);
285 getActionDefinitionsBuilder(G_ICMP)
286 .legalFor({{sXLen, sXLen}, {sXLen, p0}})
289 .widenScalarOrEltToNextPow2OrMinSize(1, 8)
290 .clampScalar(1, sXLen, sXLen)
291 .clampScalar(0, sXLen, sXLen);
293 getActionDefinitionsBuilder(G_SELECT)
294 .legalFor({{s32, sXLen}, {p0, sXLen}})
297 .legalFor(XLen == 64 ||
ST.hasStdExtD(), {{s64, sXLen}})
298 .widenScalarToNextPow2(0)
299 .clampScalar(0, s32, (XLen == 64 ||
ST.hasStdExtD()) ? s64 : s32)
300 .clampScalar(1, sXLen, sXLen);
302 auto &LoadActions = getActionDefinitionsBuilder(G_LOAD);
303 auto &StoreActions = getActionDefinitionsBuilder(G_STORE);
304 auto &ExtLoadActions = getActionDefinitionsBuilder({G_SEXTLOAD, G_ZEXTLOAD});
309 auto getScalarMemAlign = [&
ST](
unsigned Size) {
310 return ST.enableUnalignedScalarMem() ? 8 :
Size;
313 LoadActions.legalForTypesWithMemDesc(
314 {{s16, p0, s8, getScalarMemAlign(8)},
315 {s32, p0, s8, getScalarMemAlign(8)},
316 {s16, p0, s16, getScalarMemAlign(16)},
317 {s32, p0, s16, getScalarMemAlign(16)},
318 {s32, p0, s32, getScalarMemAlign(32)},
319 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
320 StoreActions.legalForTypesWithMemDesc(
321 {{s16, p0, s8, getScalarMemAlign(8)},
322 {s32, p0, s8, getScalarMemAlign(8)},
323 {s16, p0, s16, getScalarMemAlign(16)},
324 {s32, p0, s16, getScalarMemAlign(16)},
325 {s32, p0, s32, getScalarMemAlign(32)},
326 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
327 ExtLoadActions.legalForTypesWithMemDesc(
328 {{sXLen, p0, s8, getScalarMemAlign(8)},
329 {sXLen, p0, s16, getScalarMemAlign(16)}});
331 LoadActions.legalForTypesWithMemDesc(
332 {{s64, p0, s8, getScalarMemAlign(8)},
333 {s64, p0, s16, getScalarMemAlign(16)},
334 {s64, p0, s32, getScalarMemAlign(32)},
335 {s64, p0, s64, getScalarMemAlign(64)}});
336 StoreActions.legalForTypesWithMemDesc(
337 {{s64, p0, s8, getScalarMemAlign(8)},
338 {s64, p0, s16, getScalarMemAlign(16)},
339 {s64, p0, s32, getScalarMemAlign(32)},
340 {s64, p0, s64, getScalarMemAlign(64)}});
341 ExtLoadActions.legalForTypesWithMemDesc(
342 {{s64, p0, s32, getScalarMemAlign(32)}});
343 }
else if (
ST.hasStdExtD()) {
344 LoadActions.legalForTypesWithMemDesc(
345 {{s64, p0, s64, getScalarMemAlign(64)}});
346 StoreActions.legalForTypesWithMemDesc(
347 {{s64, p0, s64, getScalarMemAlign(64)}});
351 if (
ST.hasVInstructions()) {
352 LoadActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
353 {nxv4s8, p0, nxv4s8, 8},
354 {nxv8s8, p0, nxv8s8, 8},
355 {nxv16s8, p0, nxv16s8, 8},
356 {nxv32s8, p0, nxv32s8, 8},
357 {nxv64s8, p0, nxv64s8, 8},
358 {nxv2s16, p0, nxv2s16, 16},
359 {nxv4s16, p0, nxv4s16, 16},
360 {nxv8s16, p0, nxv8s16, 16},
361 {nxv16s16, p0, nxv16s16, 16},
362 {nxv32s16, p0, nxv32s16, 16},
363 {nxv2s32, p0, nxv2s32, 32},
364 {nxv4s32, p0, nxv4s32, 32},
365 {nxv8s32, p0, nxv8s32, 32},
366 {nxv16s32, p0, nxv16s32, 32}});
367 StoreActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
368 {nxv4s8, p0, nxv4s8, 8},
369 {nxv8s8, p0, nxv8s8, 8},
370 {nxv16s8, p0, nxv16s8, 8},
371 {nxv32s8, p0, nxv32s8, 8},
372 {nxv64s8, p0, nxv64s8, 8},
373 {nxv2s16, p0, nxv2s16, 16},
374 {nxv4s16, p0, nxv4s16, 16},
375 {nxv8s16, p0, nxv8s16, 16},
376 {nxv16s16, p0, nxv16s16, 16},
377 {nxv32s16, p0, nxv32s16, 16},
378 {nxv2s32, p0, nxv2s32, 32},
379 {nxv4s32, p0, nxv4s32, 32},
380 {nxv8s32, p0, nxv8s32, 32},
381 {nxv16s32, p0, nxv16s32, 32}});
383 if (
ST.getELen() == 64) {
384 LoadActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
385 {nxv1s16, p0, nxv1s16, 16},
386 {nxv1s32, p0, nxv1s32, 32}});
387 StoreActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
388 {nxv1s16, p0, nxv1s16, 16},
389 {nxv1s32, p0, nxv1s32, 32}});
392 if (
ST.hasVInstructionsI64()) {
393 LoadActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
394 {nxv2s64, p0, nxv2s64, 64},
395 {nxv4s64, p0, nxv4s64, 64},
396 {nxv8s64, p0, nxv8s64, 64}});
397 StoreActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
398 {nxv2s64, p0, nxv2s64, 64},
399 {nxv4s64, p0, nxv4s64, 64},
400 {nxv8s64, p0, nxv8s64, 64}});
409 if (XLen <=
ST.getELen()) {
415 LoadActions.widenScalarToNextPow2(0, 8)
416 .lowerIfMemSizeNotByteSizePow2()
417 .clampScalar(0, s16, sXLen)
420 .clampScalar(0, s16, sXLen)
421 .lowerIfMemSizeNotByteSizePow2()
424 ExtLoadActions.widenScalarToNextPow2(0).clampScalar(0, sXLen, sXLen).lower();
426 getActionDefinitionsBuilder({G_PTR_ADD, G_PTRMASK}).legalFor({{p0, sXLen}});
428 getActionDefinitionsBuilder(G_PTRTOINT)
429 .legalFor({{sXLen, p0}})
430 .clampScalar(0, sXLen, sXLen);
432 getActionDefinitionsBuilder(G_INTTOPTR)
433 .legalFor({{p0, sXLen}})
434 .clampScalar(1, sXLen, sXLen);
436 getActionDefinitionsBuilder(G_BRCOND).legalFor({sXLen}).minScalar(0, sXLen);
438 getActionDefinitionsBuilder(G_BRJT).customFor({{p0, sXLen}});
440 getActionDefinitionsBuilder(G_BRINDIRECT).legalFor({p0});
442 getActionDefinitionsBuilder(G_PHI)
443 .legalFor({p0, s32, sXLen})
444 .widenScalarToNextPow2(0)
445 .clampScalar(0, s32, sXLen);
447 getActionDefinitionsBuilder({G_GLOBAL_VALUE, G_JUMP_TABLE, G_CONSTANT_POOL})
450 if (
ST.hasStdExtZmmul()) {
451 getActionDefinitionsBuilder(G_MUL)
453 .widenScalarToNextPow2(0)
454 .clampScalar(0, sXLen, sXLen);
457 getActionDefinitionsBuilder({G_SMULH, G_UMULH})
462 getActionDefinitionsBuilder({G_SMULO, G_UMULO}).minScalar(0, sXLen).lower();
464 getActionDefinitionsBuilder(G_MUL)
465 .libcallFor({sXLen, sDoubleXLen})
466 .widenScalarToNextPow2(0)
467 .clampScalar(0, sXLen, sDoubleXLen);
469 getActionDefinitionsBuilder({G_SMULH, G_UMULH}).lowerFor({sXLen});
471 getActionDefinitionsBuilder({G_SMULO, G_UMULO})
476 .widenScalarIf(
typeIs(0, sXLen),
481 if (
ST.hasStdExtM()) {
482 getActionDefinitionsBuilder({G_SDIV, G_UDIV, G_UREM})
485 .libcallFor({sDoubleXLen})
486 .clampScalar(0, s32, sDoubleXLen)
487 .widenScalarToNextPow2(0);
488 getActionDefinitionsBuilder(G_SREM)
490 .libcallFor({sDoubleXLen})
491 .clampScalar(0, sXLen, sDoubleXLen)
492 .widenScalarToNextPow2(0);
494 getActionDefinitionsBuilder({G_UDIV, G_SDIV, G_UREM, G_SREM})
495 .libcallFor({sXLen, sDoubleXLen})
496 .clampScalar(0, sXLen, sDoubleXLen)
497 .widenScalarToNextPow2(0);
501 getActionDefinitionsBuilder({G_SDIVREM, G_UDIVREM}).lower();
503 getActionDefinitionsBuilder(G_ABS)
504 .customFor(
ST.hasStdExtZbb(), {sXLen})
505 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
508 getActionDefinitionsBuilder({G_ABDS, G_ABDU})
509 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
512 getActionDefinitionsBuilder({G_UMAX, G_UMIN, G_SMAX, G_SMIN})
513 .legalFor(
ST.hasStdExtZbb(), {sXLen})
514 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
517 getActionDefinitionsBuilder({G_SCMP, G_UCMP}).lower();
519 getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
521 getActionDefinitionsBuilder({G_MEMCPY, G_MEMMOVE, G_MEMSET}).
libcall();
523 getActionDefinitionsBuilder({G_DYN_STACKALLOC, G_STACKSAVE, G_STACKRESTORE})
529 getActionDefinitionsBuilder({G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FMA, G_FSQRT,
530 G_FMAXNUM, G_FMINNUM, G_FMAXIMUMNUM,
532 .legalFor(
ST.hasStdExtF(), {s32})
533 .legalFor(
ST.hasStdExtD(), {s64})
534 .legalFor(
ST.hasStdExtZfh(), {s16})
535 .libcallFor({s32, s64})
536 .libcallFor(
ST.is64Bit(), {s128});
538 getActionDefinitionsBuilder({G_FNEG, G_FABS})
539 .legalFor(
ST.hasStdExtF(), {s32})
540 .legalFor(
ST.hasStdExtD(), {s64})
541 .legalFor(
ST.hasStdExtZfh(), {s16})
542 .lowerFor({s32, s64, s128});
544 getActionDefinitionsBuilder(G_FREM)
545 .libcallFor({s32, s64})
546 .libcallFor(
ST.is64Bit(), {s128})
550 getActionDefinitionsBuilder(G_FCOPYSIGN)
551 .legalFor(
ST.hasStdExtF(), {{s32, s32}})
552 .legalFor(
ST.hasStdExtD(), {{s64, s64}, {s32, s64}, {s64, s32}})
553 .legalFor(
ST.hasStdExtZfh(), {{s16, s16}, {s16, s32}, {s32, s16}})
554 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}, {s64, s16}})
558 getActionDefinitionsBuilder(G_FPTRUNC)
559 .legalFor(
ST.hasStdExtD(), {{s32, s64}})
560 .legalFor(
ST.hasStdExtZfh(), {{s16, s32}})
561 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}})
562 .libcallFor({{s32, s64}})
563 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}});
564 getActionDefinitionsBuilder(G_FPEXT)
565 .legalFor(
ST.hasStdExtD(), {{s64, s32}})
566 .legalFor(
ST.hasStdExtZfh(), {{s32, s16}})
567 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s64, s16}})
568 .libcallFor({{s64, s32}})
569 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}});
571 getActionDefinitionsBuilder(G_FCMP)
572 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
573 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
574 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
575 .clampScalar(0, sXLen, sXLen)
576 .libcallFor({{sXLen, s32}, {sXLen, s64}})
577 .libcallFor(
ST.is64Bit(), {{sXLen, s128}});
580 getActionDefinitionsBuilder(G_IS_FPCLASS)
581 .customFor(
ST.hasStdExtF(), {{s1, s32}})
582 .customFor(
ST.hasStdExtD(), {{s1, s64}})
583 .customFor(
ST.hasStdExtZfh(), {{s1, s16}})
584 .lowerFor({{s1, s32}, {s1, s64}});
586 getActionDefinitionsBuilder(G_FCONSTANT)
587 .legalFor(
ST.hasStdExtF(), {s32})
588 .legalFor(
ST.hasStdExtD(), {s64})
589 .legalFor(
ST.hasStdExtZfh(), {s16})
590 .customFor(!
ST.is64Bit(), {s32})
591 .customFor(
ST.is64Bit(), {s32, s64})
592 .lowerFor({s64, s128});
594 getActionDefinitionsBuilder({G_FPTOSI, G_FPTOUI})
595 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
596 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
597 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
598 .customFor(
ST.is64Bit() &&
ST.hasStdExtF(), {{s32, s32}})
599 .customFor(
ST.is64Bit() &&
ST.hasStdExtD(), {{s32, s64}})
600 .customFor(
ST.is64Bit() &&
ST.hasStdExtZfh(), {{s32, s16}})
601 .widenScalarToNextPow2(0)
603 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
604 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}})
605 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}, {s128, s128}});
607 getActionDefinitionsBuilder({G_SITOFP, G_UITOFP})
608 .legalFor(
ST.hasStdExtF(), {{s32, sXLen}})
609 .legalFor(
ST.hasStdExtD(), {{s64, sXLen}})
610 .legalFor(
ST.hasStdExtZfh(), {{s16, sXLen}})
611 .widenScalarToNextPow2(1)
615 return Query.
Types[0].isScalar() && Query.
Types[1].isScalar() &&
616 (Query.
Types[1].getSizeInBits() <
ST.getXLen()) &&
617 ((
ST.hasStdExtF() && Query.
Types[0].getSizeInBits() == 32) ||
618 (
ST.hasStdExtD() && Query.
Types[0].getSizeInBits() == 64) ||
619 (
ST.hasStdExtZfh() &&
620 Query.
Types[0].getSizeInBits() == 16));
625 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
626 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}})
627 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}, {s128, s128}});
630 getActionDefinitionsBuilder({G_FCEIL, G_FFLOOR, G_FRINT, G_FNEARBYINT,
631 G_INTRINSIC_TRUNC, G_INTRINSIC_ROUND,
632 G_INTRINSIC_ROUNDEVEN})
633 .legalFor(
ST.hasStdExtZfa(), {s32})
634 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
635 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16})
636 .libcallFor({s32, s64})
637 .libcallFor(
ST.is64Bit(), {s128});
639 getActionDefinitionsBuilder({G_FMAXIMUM, G_FMINIMUM})
640 .legalFor(
ST.hasStdExtZfa(), {s32})
641 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
642 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16});
644 getActionDefinitionsBuilder({G_FCOS, G_FSIN, G_FTAN, G_FPOW, G_FLOG, G_FLOG2,
645 G_FLOG10, G_FEXP, G_FEXP2, G_FEXP10, G_FACOS,
646 G_FASIN, G_FATAN, G_FATAN2, G_FCOSH, G_FSINH,
648 .libcallFor({s32, s64})
649 .libcallFor(
ST.is64Bit(), {s128});
650 getActionDefinitionsBuilder({G_FPOWI, G_FLDEXP})
651 .libcallFor({{s32, s32}, {s64, s32}})
652 .libcallFor(
ST.is64Bit(), {s128, s32});
654 getActionDefinitionsBuilder(G_FCANONICALIZE)
655 .legalFor(
ST.hasStdExtF(), {s32})
656 .legalFor(
ST.hasStdExtD(), {s64})
657 .legalFor(
ST.hasStdExtZfh(), {s16});
659 getActionDefinitionsBuilder(G_VASTART).customFor({p0});
663 getActionDefinitionsBuilder(G_VAARG)
666 .clampScalar(0, sXLen, sXLen)
667 .lowerForCartesianProduct({sXLen, p0}, {p0});
669 getActionDefinitionsBuilder(G_VSCALE)
670 .clampScalar(0, sXLen, sXLen)
674 getActionDefinitionsBuilder(G_SPLAT_VECTOR)
686 if (
ST.hasVInstructionsF64() &&
ST.hasStdExtD())
687 SplatActions.legalIf(
all(
689 else if (
ST.hasVInstructionsI64())
690 SplatActions.customIf(
all(
694 SplatActions.clampScalar(1, sXLen, sXLen);
703 getActionDefinitionsBuilder(G_EXTRACT_SUBVECTOR)
712 Query.
Types[0].getElementCount().divideCoefficientBy(8), 8);
713 return std::pair(0, CastTy);
721 getActionDefinitionsBuilder(G_INSERT_SUBVECTOR)
727 getActionDefinitionsBuilder(G_ATOMIC_CMPXCHG_WITH_SUCCESS)
730 getActionDefinitionsBuilder({G_ATOMIC_CMPXCHG, G_ATOMICRMW_ADD})
731 .legalFor(
ST.hasStdExtA(), {{sXLen, p0}})
732 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
733 .clampScalar(0, sXLen, sXLen);
735 getActionDefinitionsBuilder(G_ATOMICRMW_SUB)
736 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
737 .clampScalar(0, sXLen, sXLen)
746 getActionDefinitionsBuilder(G_INSERT_VECTOR_ELT)
748 InsertVectorEltPred,
typeIs(2, sXLen)))
752 getLegacyLegalizerInfo().computeTables();