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_TRUNC).
alwaysLegal();
184 if (STI.hasStdExtZbb())
185 ValidSextInRegWidth =
188 getActionDefinitionsBuilder(G_SEXT_INREG)
189 .legalIf(
all(
typeIs(0, sXLen), ValidSextInRegWidth))
190 .clampScalar(0, sXLen, sXLen)
195 for (
unsigned Op : {G_MERGE_VALUES, G_UNMERGE_VALUES}) {
196 auto &MergeUnmergeActions = getActionDefinitionsBuilder(
Op);
197 unsigned BigTyIdx =
Op == G_MERGE_VALUES ? 0 : 1;
198 unsigned LitTyIdx =
Op == G_MERGE_VALUES ? 1 : 0;
199 if (XLen == 32 &&
ST.hasStdExtD()) {
200 MergeUnmergeActions.legalIf(
203 MergeUnmergeActions.widenScalarToNextPow2(LitTyIdx, XLen)
204 .widenScalarToNextPow2(BigTyIdx, XLen)
205 .clampScalar(LitTyIdx, sXLen, sXLen)
206 .clampScalar(BigTyIdx, sXLen, sXLen);
209 getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
211 getActionDefinitionsBuilder({G_ROTR, G_ROTL})
212 .legalFor(
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb(), {{sXLen, sXLen}})
213 .customFor(
ST.is64Bit() && (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb()),
217 getActionDefinitionsBuilder(G_BITREVERSE)
218 .customFor(
ST.hasStdExtZbkb(), {s8})
222 getActionDefinitionsBuilder(G_BITCAST).legalIf(
228 auto &BSWAPActions = getActionDefinitionsBuilder(G_BSWAP);
229 if (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb())
230 BSWAPActions.legalFor({sXLen}).clampScalar(0, sXLen, sXLen);
232 BSWAPActions.maxScalar(0, sXLen).lower();
234 auto &CountZerosActions = getActionDefinitionsBuilder({G_CTLZ, G_CTTZ});
235 auto &CountZerosPoisonActions =
236 getActionDefinitionsBuilder({G_CTLZ_ZERO_POISON, G_CTTZ_ZERO_POISON});
237 if (
ST.hasStdExtZbb()) {
238 CountZerosActions.legalFor({{sXLen, sXLen}})
239 .customFor({{s32, s32}})
240 .clampScalar(0, s32, sXLen)
241 .widenScalarToNextPow2(0)
242 .scalarSameSizeAs(1, 0);
244 CountZerosActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
245 CountZerosPoisonActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0);
247 CountZerosPoisonActions.lower();
249 auto &CountSignActions = getActionDefinitionsBuilder(G_CTLS);
250 if (
ST.hasStdExtP()) {
251 CountSignActions.legalFor({{sXLen, sXLen}})
252 .customFor({{s32, s32}})
253 .clampScalar(0, s32, sXLen)
254 .widenScalarToNextPow2(0)
255 .scalarSameSizeAs(1, 0);
257 CountSignActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
260 auto &CTPOPActions = getActionDefinitionsBuilder(G_CTPOP);
261 if (
ST.hasStdExtZbb()) {
262 CTPOPActions.legalFor({{sXLen, sXLen}})
263 .clampScalar(0, sXLen, sXLen)
264 .scalarSameSizeAs(1, 0);
266 CTPOPActions.widenScalarToNextPow2(0, 8)
267 .clampScalar(0, s8, sXLen)
268 .scalarSameSizeAs(1, 0)
272 getActionDefinitionsBuilder(G_CONSTANT)
274 .legalFor(!
ST.is64Bit(), {s32})
275 .customFor(
ST.is64Bit(), {s64})
276 .widenScalarToNextPow2(0)
277 .clampScalar(0, sXLen, sXLen);
280 getActionDefinitionsBuilder(G_FREEZE)
281 .legalFor({s16, s32, p0})
282 .legalFor(
ST.is64Bit(), {s64})
285 .widenScalarToNextPow2(0)
286 .clampScalar(0, s16, sXLen);
290 getActionDefinitionsBuilder(
291 {G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
292 .legalFor({s32, sXLen, p0})
295 .widenScalarToNextPow2(0)
296 .clampScalar(0, s32, sXLen);
298 getActionDefinitionsBuilder(G_ICMP)
299 .legalFor({{sXLen, sXLen}, {sXLen, p0}})
302 .widenScalarOrEltToNextPow2OrMinSize(1, 8)
303 .clampScalar(1, sXLen, sXLen)
304 .clampScalar(0, sXLen, sXLen);
306 getActionDefinitionsBuilder(G_SELECT)
307 .legalFor({{s32, sXLen}, {p0, sXLen}})
310 .legalFor(XLen == 64 ||
ST.hasStdExtD(), {{s64, sXLen}})
311 .widenScalarToNextPow2(0)
312 .clampScalar(0, s32, (XLen == 64 ||
ST.hasStdExtD()) ? s64 : s32)
313 .clampScalar(1, sXLen, sXLen);
315 auto &LoadActions = getActionDefinitionsBuilder(G_LOAD);
316 auto &StoreActions = getActionDefinitionsBuilder(G_STORE);
317 auto &ExtLoadActions = getActionDefinitionsBuilder({G_SEXTLOAD, G_ZEXTLOAD});
322 auto getScalarMemAlign = [&
ST](
unsigned Size) {
323 return ST.enableUnalignedScalarMem() ? 8 :
Size;
326 LoadActions.legalForTypesWithMemDesc(
327 {{s16, p0, s8, getScalarMemAlign(8)},
328 {s32, p0, s8, getScalarMemAlign(8)},
329 {s16, p0, s16, getScalarMemAlign(16)},
330 {s32, p0, s16, getScalarMemAlign(16)},
331 {s32, p0, s32, getScalarMemAlign(32)},
332 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
333 StoreActions.legalForTypesWithMemDesc(
334 {{s16, p0, s8, getScalarMemAlign(8)},
335 {s32, p0, s8, getScalarMemAlign(8)},
336 {s16, p0, s16, getScalarMemAlign(16)},
337 {s32, p0, s16, getScalarMemAlign(16)},
338 {s32, p0, s32, getScalarMemAlign(32)},
339 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
340 ExtLoadActions.legalForTypesWithMemDesc(
341 {{sXLen, p0, s8, getScalarMemAlign(8)},
342 {sXLen, p0, s16, getScalarMemAlign(16)}});
344 LoadActions.legalForTypesWithMemDesc(
345 {{s64, p0, s8, getScalarMemAlign(8)},
346 {s64, p0, s16, getScalarMemAlign(16)},
347 {s64, p0, s32, getScalarMemAlign(32)},
348 {s64, p0, s64, getScalarMemAlign(64)}});
349 StoreActions.legalForTypesWithMemDesc(
350 {{s64, p0, s8, getScalarMemAlign(8)},
351 {s64, p0, s16, getScalarMemAlign(16)},
352 {s64, p0, s32, getScalarMemAlign(32)},
353 {s64, p0, s64, getScalarMemAlign(64)}});
354 ExtLoadActions.legalForTypesWithMemDesc(
355 {{s64, p0, s32, getScalarMemAlign(32)}});
356 }
else if (
ST.hasStdExtD()) {
357 LoadActions.legalForTypesWithMemDesc(
358 {{s64, p0, s64, getScalarMemAlign(64)}});
359 StoreActions.legalForTypesWithMemDesc(
360 {{s64, p0, s64, getScalarMemAlign(64)}});
364 if (
ST.hasVInstructions()) {
365 LoadActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
366 {nxv4s8, p0, nxv4s8, 8},
367 {nxv8s8, p0, nxv8s8, 8},
368 {nxv16s8, p0, nxv16s8, 8},
369 {nxv32s8, p0, nxv32s8, 8},
370 {nxv64s8, p0, nxv64s8, 8},
371 {nxv2s16, p0, nxv2s16, 16},
372 {nxv4s16, p0, nxv4s16, 16},
373 {nxv8s16, p0, nxv8s16, 16},
374 {nxv16s16, p0, nxv16s16, 16},
375 {nxv32s16, p0, nxv32s16, 16},
376 {nxv2s32, p0, nxv2s32, 32},
377 {nxv4s32, p0, nxv4s32, 32},
378 {nxv8s32, p0, nxv8s32, 32},
379 {nxv16s32, p0, nxv16s32, 32}});
380 StoreActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
381 {nxv4s8, p0, nxv4s8, 8},
382 {nxv8s8, p0, nxv8s8, 8},
383 {nxv16s8, p0, nxv16s8, 8},
384 {nxv32s8, p0, nxv32s8, 8},
385 {nxv64s8, p0, nxv64s8, 8},
386 {nxv2s16, p0, nxv2s16, 16},
387 {nxv4s16, p0, nxv4s16, 16},
388 {nxv8s16, p0, nxv8s16, 16},
389 {nxv16s16, p0, nxv16s16, 16},
390 {nxv32s16, p0, nxv32s16, 16},
391 {nxv2s32, p0, nxv2s32, 32},
392 {nxv4s32, p0, nxv4s32, 32},
393 {nxv8s32, p0, nxv8s32, 32},
394 {nxv16s32, p0, nxv16s32, 32}});
396 if (
ST.getELen() == 64) {
397 LoadActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
398 {nxv1s16, p0, nxv1s16, 16},
399 {nxv1s32, p0, nxv1s32, 32}});
400 StoreActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
401 {nxv1s16, p0, nxv1s16, 16},
402 {nxv1s32, p0, nxv1s32, 32}});
405 if (
ST.hasVInstructionsI64()) {
406 LoadActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
407 {nxv2s64, p0, nxv2s64, 64},
408 {nxv4s64, p0, nxv4s64, 64},
409 {nxv8s64, p0, nxv8s64, 64}});
410 StoreActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
411 {nxv2s64, p0, nxv2s64, 64},
412 {nxv4s64, p0, nxv4s64, 64},
413 {nxv8s64, p0, nxv8s64, 64}});
422 if (XLen <=
ST.getELen()) {
428 LoadActions.widenScalarToNextPow2(0, 8)
429 .lowerIfMemSizeNotByteSizePow2()
430 .clampScalar(0, s16, sXLen)
433 .clampScalar(0, s16, sXLen)
434 .lowerIfMemSizeNotByteSizePow2()
437 ExtLoadActions.widenScalarToNextPow2(0).clampScalar(0, sXLen, sXLen).lower();
439 getActionDefinitionsBuilder({G_PTR_ADD, G_PTRMASK}).legalFor({{p0, sXLen}});
441 getActionDefinitionsBuilder(G_PTRTOINT)
442 .legalFor({{sXLen, p0}})
443 .clampScalar(0, sXLen, sXLen);
445 getActionDefinitionsBuilder(G_INTTOPTR)
446 .legalFor({{p0, sXLen}})
447 .clampScalar(1, sXLen, sXLen);
449 getActionDefinitionsBuilder(G_BR).alwaysLegal();
451 getActionDefinitionsBuilder(G_BRCOND).legalFor({sXLen}).minScalar(0, sXLen);
453 getActionDefinitionsBuilder(G_BRJT).customFor({{p0, sXLen}});
455 getActionDefinitionsBuilder(G_BRINDIRECT).legalFor({p0});
457 getActionDefinitionsBuilder(G_PHI)
458 .legalFor({p0, s32, sXLen})
459 .widenScalarToNextPow2(0)
460 .clampScalar(0, s32, sXLen);
462 getActionDefinitionsBuilder({G_GLOBAL_VALUE, G_JUMP_TABLE, G_CONSTANT_POOL})
465 if (
ST.hasStdExtZmmul()) {
466 getActionDefinitionsBuilder(G_MUL)
468 .widenScalarToNextPow2(0)
469 .clampScalar(0, sXLen, sXLen);
472 getActionDefinitionsBuilder({G_SMULH, G_UMULH})
477 getActionDefinitionsBuilder({G_SMULO, G_UMULO}).minScalar(0, sXLen).lower();
479 getActionDefinitionsBuilder(G_MUL)
480 .libcallFor({sXLen, sDoubleXLen})
481 .widenScalarToNextPow2(0)
482 .clampScalar(0, sXLen, sDoubleXLen);
484 getActionDefinitionsBuilder({G_SMULH, G_UMULH}).lowerFor({sXLen});
486 getActionDefinitionsBuilder({G_SMULO, G_UMULO})
491 .widenScalarIf(
typeIs(0, sXLen),
496 if (
ST.hasStdExtM()) {
497 getActionDefinitionsBuilder({G_SDIV, G_UDIV, G_UREM})
500 .libcallFor({sDoubleXLen})
501 .clampScalar(0, s32, sDoubleXLen)
502 .widenScalarToNextPow2(0);
503 getActionDefinitionsBuilder(G_SREM)
505 .libcallFor({sDoubleXLen})
506 .clampScalar(0, sXLen, sDoubleXLen)
507 .widenScalarToNextPow2(0);
509 getActionDefinitionsBuilder({G_UDIV, G_SDIV, G_UREM, G_SREM})
510 .libcallFor({sXLen, sDoubleXLen})
511 .clampScalar(0, sXLen, sDoubleXLen)
512 .widenScalarToNextPow2(0);
516 getActionDefinitionsBuilder({G_SDIVREM, G_UDIVREM}).lower();
518 getActionDefinitionsBuilder(G_ABS)
519 .customFor(
ST.hasStdExtZbb(), {sXLen})
520 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
523 getActionDefinitionsBuilder({G_ABDS, G_ABDU})
524 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
527 getActionDefinitionsBuilder({G_UMAX, G_UMIN, G_SMAX, G_SMIN})
528 .legalFor(
ST.hasStdExtZbb(), {sXLen})
529 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
532 getActionDefinitionsBuilder({G_SCMP, G_UCMP}).lower();
534 getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
536 getActionDefinitionsBuilder({G_MEMCPY, G_MEMMOVE, G_MEMSET}).
libcall();
538 getActionDefinitionsBuilder({G_MEMCPY_INLINE, G_MEMSET_INLINE}).lower();
540 getActionDefinitionsBuilder({G_DYN_STACKALLOC, G_STACKSAVE, G_STACKRESTORE})
546 getActionDefinitionsBuilder({G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FMA, G_FSQRT,
547 G_FMAXNUM, G_FMINNUM, G_FMAXIMUMNUM,
549 .legalFor(
ST.hasStdExtF(), {s32})
550 .legalFor(
ST.hasStdExtD(), {s64})
551 .legalFor(
ST.hasStdExtZfh(), {s16})
552 .libcallFor({s32, s64})
553 .libcallFor(
ST.is64Bit(), {s128});
555 getActionDefinitionsBuilder({G_FNEG, G_FABS})
556 .legalFor(
ST.hasStdExtF(), {s32})
557 .legalFor(
ST.hasStdExtD(), {s64})
558 .legalFor(
ST.hasStdExtZfh(), {s16})
559 .lowerFor({s32, s64, s128});
561 getActionDefinitionsBuilder(G_FREM)
562 .libcallFor({s32, s64})
563 .libcallFor(
ST.is64Bit(), {s128})
567 getActionDefinitionsBuilder(G_FCOPYSIGN)
568 .legalFor(
ST.hasStdExtF(), {{s32, s32}})
569 .legalFor(
ST.hasStdExtD(), {{s64, s64}, {s32, s64}, {s64, s32}})
570 .legalFor(
ST.hasStdExtZfh(), {{s16, s16}, {s16, s32}, {s32, s16}})
571 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}, {s64, s16}})
575 getActionDefinitionsBuilder(G_FPTRUNC)
576 .legalFor(
ST.hasStdExtD(), {{s32, s64}})
577 .legalFor(
ST.hasStdExtZfh(), {{s16, s32}})
578 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}})
579 .libcallFor({{s32, s64}})
580 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}});
581 getActionDefinitionsBuilder(G_FPEXT)
582 .legalFor(
ST.hasStdExtD(), {{s64, s32}})
583 .legalFor(
ST.hasStdExtZfh(), {{s32, s16}})
584 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s64, s16}})
585 .libcallFor({{s64, s32}})
586 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}});
588 getActionDefinitionsBuilder(G_FCMP)
589 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
590 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
591 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
592 .clampScalar(0, sXLen, sXLen)
593 .libcallFor({{sXLen, s32}, {sXLen, s64}})
594 .libcallFor(
ST.is64Bit(), {{sXLen, s128}});
597 getActionDefinitionsBuilder(G_IS_FPCLASS)
598 .customFor(
ST.hasStdExtF(), {{s1, s32}})
599 .customFor(
ST.hasStdExtD(), {{s1, s64}})
600 .customFor(
ST.hasStdExtZfh(), {{s1, s16}})
603 getActionDefinitionsBuilder(G_FCONSTANT)
604 .legalFor(
ST.hasStdExtF(), {s32})
605 .legalFor(
ST.hasStdExtD(), {s64})
606 .legalFor(
ST.hasStdExtZfh(), {s16})
607 .customFor(!
ST.is64Bit(), {s32})
608 .customFor(
ST.is64Bit(), {s32, s64})
609 .lowerFor({s64, s128});
611 getActionDefinitionsBuilder({G_FPTOSI, G_FPTOUI})
612 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
613 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
614 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
615 .customFor(
ST.is64Bit() &&
ST.hasStdExtF(), {{s32, s32}})
616 .customFor(
ST.is64Bit() &&
ST.hasStdExtD(), {{s32, s64}})
617 .customFor(
ST.is64Bit() &&
ST.hasStdExtZfh(), {{s32, s16}})
618 .widenScalarToNextPow2(0)
620 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
621 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}})
622 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}, {s128, s128}});
624 getActionDefinitionsBuilder({G_SITOFP, G_UITOFP})
625 .legalFor(
ST.hasStdExtF(), {{s32, sXLen}})
626 .legalFor(
ST.hasStdExtD(), {{s64, sXLen}})
627 .legalFor(
ST.hasStdExtZfh(), {{s16, sXLen}})
628 .widenScalarToNextPow2(1)
632 return Query.
Types[0].isScalar() && Query.
Types[1].isScalar() &&
633 (Query.
Types[1].getSizeInBits() <
ST.getXLen()) &&
634 ((
ST.hasStdExtF() && Query.
Types[0].getSizeInBits() == 32) ||
635 (
ST.hasStdExtD() && Query.
Types[0].getSizeInBits() == 64) ||
636 (
ST.hasStdExtZfh() &&
637 Query.
Types[0].getSizeInBits() == 16));
642 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
643 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}})
644 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}, {s128, s128}});
647 getActionDefinitionsBuilder({G_FCEIL, G_FFLOOR, G_FRINT, G_FNEARBYINT,
648 G_INTRINSIC_TRUNC, G_INTRINSIC_ROUND,
649 G_INTRINSIC_ROUNDEVEN})
650 .legalFor(
ST.hasStdExtZfa(), {s32})
651 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
652 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16})
653 .libcallFor({s32, s64})
654 .libcallFor(
ST.is64Bit(), {s128});
656 getActionDefinitionsBuilder({G_FMAXIMUM, G_FMINIMUM})
657 .legalFor(
ST.hasStdExtZfa(), {s32})
658 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
659 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16});
661 getActionDefinitionsBuilder({G_FCOS, G_FSIN, G_FTAN, G_FPOW, G_FLOG, G_FLOG2,
662 G_FLOG10, G_FEXP, G_FEXP2, G_FEXP10, G_FACOS,
663 G_FASIN, G_FATAN, G_FATAN2, G_FCOSH, G_FSINH,
665 .libcallFor({s32, s64})
666 .libcallFor(
ST.is64Bit(), {s128});
667 getActionDefinitionsBuilder({G_FPOWI, G_FLDEXP})
668 .libcallFor({{s32, s32}, {s64, s32}})
669 .libcallFor(
ST.is64Bit(), {s128, s32});
671 getActionDefinitionsBuilder(G_FCANONICALIZE)
672 .legalFor(
ST.hasStdExtF(), {s32})
673 .legalFor(
ST.hasStdExtD(), {s64})
674 .legalFor(
ST.hasStdExtZfh(), {s16});
676 getActionDefinitionsBuilder(G_VASTART).customFor({p0});
680 getActionDefinitionsBuilder(G_VAARG)
683 .clampScalar(0, sXLen, sXLen)
684 .lowerForCartesianProduct({sXLen, p0}, {p0});
686 getActionDefinitionsBuilder(G_VSCALE)
687 .clampScalar(0, sXLen, sXLen)
691 getActionDefinitionsBuilder(G_SPLAT_VECTOR)
703 if (
ST.hasVInstructionsF64() &&
ST.hasStdExtD())
704 SplatActions.legalIf(
all(
706 else if (
ST.hasVInstructionsI64())
707 SplatActions.customIf(
all(
711 SplatActions.clampScalar(1, sXLen, sXLen);
720 getActionDefinitionsBuilder(G_EXTRACT_SUBVECTOR)
729 Query.
Types[0].getElementCount().divideCoefficientBy(8), 8);
730 return std::pair(0, CastTy);
738 getActionDefinitionsBuilder(G_INSERT_SUBVECTOR)
744 getActionDefinitionsBuilder(G_ATOMIC_CMPXCHG_WITH_SUCCESS)
747 getActionDefinitionsBuilder({G_ATOMIC_CMPXCHG, G_ATOMICRMW_ADD,
748 G_ATOMICRMW_XCHG, G_ATOMICRMW_AND,
749 G_ATOMICRMW_OR, G_ATOMICRMW_XOR})
750 .legalFor(
ST.hasStdExtA(), {{sXLen, p0}})
751 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
752 .clampScalar(0, sXLen, sXLen);
754 getActionDefinitionsBuilder(G_ATOMICRMW_SUB)
755 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
756 .clampScalar(0, sXLen, sXLen)
759 getActionDefinitionsBuilder(
760 {G_ATOMICRMW_MAX, G_ATOMICRMW_MIN, G_ATOMICRMW_UMAX, G_ATOMICRMW_UMIN})
761 .legalFor(
ST.hasStdExtA(), {{sXLen, p0}})
762 .clampScalar(0, sXLen, sXLen)
771 getActionDefinitionsBuilder(G_INSERT_VECTOR_ELT)
773 InsertVectorEltPred,
typeIs(2, sXLen)))
777 getActionDefinitionsBuilder({G_INTRINSIC, G_INTRINSIC_W_SIDE_EFFECTS})
780 getActionDefinitionsBuilder(G_FENCE).alwaysLegal();
782 getActionDefinitionsBuilder({G_TRAP, G_DEBUGTRAP, G_UBSANTRAP}).alwaysLegal();