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();
181 getActionDefinitionsBuilder(G_SEXT_INREG)
183 .clampScalar(0, sXLen, sXLen)
187 for (
unsigned Op : {G_MERGE_VALUES, G_UNMERGE_VALUES}) {
188 auto &MergeUnmergeActions = getActionDefinitionsBuilder(
Op);
189 unsigned BigTyIdx =
Op == G_MERGE_VALUES ? 0 : 1;
190 unsigned LitTyIdx =
Op == G_MERGE_VALUES ? 1 : 0;
191 if (XLen == 32 &&
ST.hasStdExtD()) {
192 MergeUnmergeActions.legalIf(
195 MergeUnmergeActions.widenScalarToNextPow2(LitTyIdx, XLen)
196 .widenScalarToNextPow2(BigTyIdx, XLen)
197 .clampScalar(LitTyIdx, sXLen, sXLen)
198 .clampScalar(BigTyIdx, sXLen, sXLen);
201 getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
203 getActionDefinitionsBuilder({G_ROTR, G_ROTL})
204 .legalFor(
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb(), {{sXLen, sXLen}})
205 .customFor(
ST.is64Bit() && (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb()),
209 getActionDefinitionsBuilder(G_BITREVERSE)
210 .customFor(
ST.hasStdExtZbkb(), {s8})
214 getActionDefinitionsBuilder(G_BITCAST).legalIf(
220 auto &BSWAPActions = getActionDefinitionsBuilder(G_BSWAP);
221 if (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb())
222 BSWAPActions.legalFor({sXLen}).clampScalar(0, sXLen, sXLen);
224 BSWAPActions.maxScalar(0, sXLen).lower();
226 auto &CountZerosActions = getActionDefinitionsBuilder({G_CTLZ, G_CTTZ});
227 auto &CountZerosPoisonActions =
228 getActionDefinitionsBuilder({G_CTLZ_ZERO_POISON, G_CTTZ_ZERO_POISON});
229 if (
ST.hasStdExtZbb()) {
230 CountZerosActions.legalFor({{sXLen, sXLen}})
231 .customFor({{s32, s32}})
232 .clampScalar(0, s32, sXLen)
233 .widenScalarToNextPow2(0)
234 .scalarSameSizeAs(1, 0);
236 CountZerosActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
237 CountZerosPoisonActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0);
239 CountZerosPoisonActions.lower();
241 auto &CountSignActions = getActionDefinitionsBuilder(G_CTLS);
242 if (
ST.hasStdExtP()) {
243 CountSignActions.legalFor({{sXLen, sXLen}})
244 .customFor({{s32, s32}})
245 .clampScalar(0, s32, sXLen)
246 .widenScalarToNextPow2(0)
247 .scalarSameSizeAs(1, 0);
249 CountSignActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
252 auto &CTPOPActions = getActionDefinitionsBuilder(G_CTPOP);
253 if (
ST.hasStdExtZbb()) {
254 CTPOPActions.legalFor({{sXLen, sXLen}})
255 .clampScalar(0, sXLen, sXLen)
256 .scalarSameSizeAs(1, 0);
258 CTPOPActions.widenScalarToNextPow2(0, 8)
259 .clampScalar(0, s8, sXLen)
260 .scalarSameSizeAs(1, 0)
264 getActionDefinitionsBuilder(G_CONSTANT)
266 .legalFor(!
ST.is64Bit(), {s32})
267 .customFor(
ST.is64Bit(), {s64})
268 .widenScalarToNextPow2(0)
269 .clampScalar(0, sXLen, sXLen);
272 getActionDefinitionsBuilder(G_FREEZE)
273 .legalFor({s16, s32, p0})
274 .legalFor(
ST.is64Bit(), {s64})
277 .widenScalarToNextPow2(0)
278 .clampScalar(0, s16, sXLen);
282 getActionDefinitionsBuilder(
283 {G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
284 .legalFor({s32, sXLen, p0})
287 .widenScalarToNextPow2(0)
288 .clampScalar(0, s32, sXLen);
290 getActionDefinitionsBuilder(G_ICMP)
291 .legalFor({{sXLen, sXLen}, {sXLen, p0}})
294 .widenScalarOrEltToNextPow2OrMinSize(1, 8)
295 .clampScalar(1, sXLen, sXLen)
296 .clampScalar(0, sXLen, sXLen);
298 getActionDefinitionsBuilder(G_SELECT)
299 .legalFor({{s32, sXLen}, {p0, sXLen}})
302 .legalFor(XLen == 64 ||
ST.hasStdExtD(), {{s64, sXLen}})
303 .widenScalarToNextPow2(0)
304 .clampScalar(0, s32, (XLen == 64 ||
ST.hasStdExtD()) ? s64 : s32)
305 .clampScalar(1, sXLen, sXLen);
307 auto &LoadActions = getActionDefinitionsBuilder(G_LOAD);
308 auto &StoreActions = getActionDefinitionsBuilder(G_STORE);
309 auto &ExtLoadActions = getActionDefinitionsBuilder({G_SEXTLOAD, G_ZEXTLOAD});
314 auto getScalarMemAlign = [&
ST](
unsigned Size) {
315 return ST.enableUnalignedScalarMem() ? 8 :
Size;
318 LoadActions.legalForTypesWithMemDesc(
319 {{s16, p0, s8, getScalarMemAlign(8)},
320 {s32, p0, s8, getScalarMemAlign(8)},
321 {s16, p0, s16, getScalarMemAlign(16)},
322 {s32, p0, s16, getScalarMemAlign(16)},
323 {s32, p0, s32, getScalarMemAlign(32)},
324 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
325 StoreActions.legalForTypesWithMemDesc(
326 {{s16, p0, s8, getScalarMemAlign(8)},
327 {s32, p0, s8, getScalarMemAlign(8)},
328 {s16, p0, s16, getScalarMemAlign(16)},
329 {s32, p0, s16, getScalarMemAlign(16)},
330 {s32, p0, s32, getScalarMemAlign(32)},
331 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
332 ExtLoadActions.legalForTypesWithMemDesc(
333 {{sXLen, p0, s8, getScalarMemAlign(8)},
334 {sXLen, p0, s16, getScalarMemAlign(16)}});
336 LoadActions.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 StoreActions.legalForTypesWithMemDesc(
342 {{s64, p0, s8, getScalarMemAlign(8)},
343 {s64, p0, s16, getScalarMemAlign(16)},
344 {s64, p0, s32, getScalarMemAlign(32)},
345 {s64, p0, s64, getScalarMemAlign(64)}});
346 ExtLoadActions.legalForTypesWithMemDesc(
347 {{s64, p0, s32, getScalarMemAlign(32)}});
348 }
else if (
ST.hasStdExtD()) {
349 LoadActions.legalForTypesWithMemDesc(
350 {{s64, p0, s64, getScalarMemAlign(64)}});
351 StoreActions.legalForTypesWithMemDesc(
352 {{s64, p0, s64, getScalarMemAlign(64)}});
356 if (
ST.hasVInstructions()) {
357 LoadActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
358 {nxv4s8, p0, nxv4s8, 8},
359 {nxv8s8, p0, nxv8s8, 8},
360 {nxv16s8, p0, nxv16s8, 8},
361 {nxv32s8, p0, nxv32s8, 8},
362 {nxv64s8, p0, nxv64s8, 8},
363 {nxv2s16, p0, nxv2s16, 16},
364 {nxv4s16, p0, nxv4s16, 16},
365 {nxv8s16, p0, nxv8s16, 16},
366 {nxv16s16, p0, nxv16s16, 16},
367 {nxv32s16, p0, nxv32s16, 16},
368 {nxv2s32, p0, nxv2s32, 32},
369 {nxv4s32, p0, nxv4s32, 32},
370 {nxv8s32, p0, nxv8s32, 32},
371 {nxv16s32, p0, nxv16s32, 32}});
372 StoreActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
373 {nxv4s8, p0, nxv4s8, 8},
374 {nxv8s8, p0, nxv8s8, 8},
375 {nxv16s8, p0, nxv16s8, 8},
376 {nxv32s8, p0, nxv32s8, 8},
377 {nxv64s8, p0, nxv64s8, 8},
378 {nxv2s16, p0, nxv2s16, 16},
379 {nxv4s16, p0, nxv4s16, 16},
380 {nxv8s16, p0, nxv8s16, 16},
381 {nxv16s16, p0, nxv16s16, 16},
382 {nxv32s16, p0, nxv32s16, 16},
383 {nxv2s32, p0, nxv2s32, 32},
384 {nxv4s32, p0, nxv4s32, 32},
385 {nxv8s32, p0, nxv8s32, 32},
386 {nxv16s32, p0, nxv16s32, 32}});
388 if (
ST.getELen() == 64) {
389 LoadActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
390 {nxv1s16, p0, nxv1s16, 16},
391 {nxv1s32, p0, nxv1s32, 32}});
392 StoreActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
393 {nxv1s16, p0, nxv1s16, 16},
394 {nxv1s32, p0, nxv1s32, 32}});
397 if (
ST.hasVInstructionsI64()) {
398 LoadActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
399 {nxv2s64, p0, nxv2s64, 64},
400 {nxv4s64, p0, nxv4s64, 64},
401 {nxv8s64, p0, nxv8s64, 64}});
402 StoreActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
403 {nxv2s64, p0, nxv2s64, 64},
404 {nxv4s64, p0, nxv4s64, 64},
405 {nxv8s64, p0, nxv8s64, 64}});
414 if (XLen <=
ST.getELen()) {
420 LoadActions.widenScalarToNextPow2(0, 8)
421 .lowerIfMemSizeNotByteSizePow2()
422 .clampScalar(0, s16, sXLen)
425 .clampScalar(0, s16, sXLen)
426 .lowerIfMemSizeNotByteSizePow2()
429 ExtLoadActions.widenScalarToNextPow2(0).clampScalar(0, sXLen, sXLen).lower();
431 getActionDefinitionsBuilder({G_PTR_ADD, G_PTRMASK}).legalFor({{p0, sXLen}});
433 getActionDefinitionsBuilder(G_PTRTOINT)
434 .legalFor({{sXLen, p0}})
435 .clampScalar(0, sXLen, sXLen);
437 getActionDefinitionsBuilder(G_INTTOPTR)
438 .legalFor({{p0, sXLen}})
439 .clampScalar(1, sXLen, sXLen);
441 getActionDefinitionsBuilder(G_BR).alwaysLegal();
443 getActionDefinitionsBuilder(G_BRCOND).legalFor({sXLen}).minScalar(0, sXLen);
445 getActionDefinitionsBuilder(G_BRJT).customFor({{p0, sXLen}});
447 getActionDefinitionsBuilder(G_BRINDIRECT).legalFor({p0});
449 getActionDefinitionsBuilder(G_PHI)
450 .legalFor({p0, s32, sXLen})
451 .widenScalarToNextPow2(0)
452 .clampScalar(0, s32, sXLen);
454 getActionDefinitionsBuilder({G_GLOBAL_VALUE, G_JUMP_TABLE, G_CONSTANT_POOL})
457 if (
ST.hasStdExtZmmul()) {
458 getActionDefinitionsBuilder(G_MUL)
460 .widenScalarToNextPow2(0)
461 .clampScalar(0, sXLen, sXLen);
464 getActionDefinitionsBuilder({G_SMULH, G_UMULH})
469 getActionDefinitionsBuilder({G_SMULO, G_UMULO}).minScalar(0, sXLen).lower();
471 getActionDefinitionsBuilder(G_MUL)
472 .libcallFor({sXLen, sDoubleXLen})
473 .widenScalarToNextPow2(0)
474 .clampScalar(0, sXLen, sDoubleXLen);
476 getActionDefinitionsBuilder({G_SMULH, G_UMULH}).lowerFor({sXLen});
478 getActionDefinitionsBuilder({G_SMULO, G_UMULO})
483 .widenScalarIf(
typeIs(0, sXLen),
488 if (
ST.hasStdExtM()) {
489 getActionDefinitionsBuilder({G_SDIV, G_UDIV, G_UREM})
492 .libcallFor({sDoubleXLen})
493 .clampScalar(0, s32, sDoubleXLen)
494 .widenScalarToNextPow2(0);
495 getActionDefinitionsBuilder(G_SREM)
497 .libcallFor({sDoubleXLen})
498 .clampScalar(0, sXLen, sDoubleXLen)
499 .widenScalarToNextPow2(0);
501 getActionDefinitionsBuilder({G_UDIV, G_SDIV, G_UREM, G_SREM})
502 .libcallFor({sXLen, sDoubleXLen})
503 .clampScalar(0, sXLen, sDoubleXLen)
504 .widenScalarToNextPow2(0);
508 getActionDefinitionsBuilder({G_SDIVREM, G_UDIVREM}).lower();
510 getActionDefinitionsBuilder(G_ABS)
511 .customFor(
ST.hasStdExtZbb(), {sXLen})
512 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
515 getActionDefinitionsBuilder({G_ABDS, G_ABDU})
516 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
519 getActionDefinitionsBuilder({G_UMAX, G_UMIN, G_SMAX, G_SMIN})
520 .legalFor(
ST.hasStdExtZbb(), {sXLen})
521 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
524 getActionDefinitionsBuilder({G_SCMP, G_UCMP}).lower();
526 getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
528 getActionDefinitionsBuilder({G_MEMCPY, G_MEMMOVE, G_MEMSET}).
libcall();
530 getActionDefinitionsBuilder(G_MEMCPY_INLINE).lower();
532 getActionDefinitionsBuilder({G_DYN_STACKALLOC, G_STACKSAVE, G_STACKRESTORE})
538 getActionDefinitionsBuilder({G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FMA, G_FSQRT,
539 G_FMAXNUM, G_FMINNUM, G_FMAXIMUMNUM,
541 .legalFor(
ST.hasStdExtF(), {s32})
542 .legalFor(
ST.hasStdExtD(), {s64})
543 .legalFor(
ST.hasStdExtZfh(), {s16})
544 .libcallFor({s32, s64})
545 .libcallFor(
ST.is64Bit(), {s128});
547 getActionDefinitionsBuilder({G_FNEG, G_FABS})
548 .legalFor(
ST.hasStdExtF(), {s32})
549 .legalFor(
ST.hasStdExtD(), {s64})
550 .legalFor(
ST.hasStdExtZfh(), {s16})
551 .lowerFor({s32, s64, s128});
553 getActionDefinitionsBuilder(G_FREM)
554 .libcallFor({s32, s64})
555 .libcallFor(
ST.is64Bit(), {s128})
559 getActionDefinitionsBuilder(G_FCOPYSIGN)
560 .legalFor(
ST.hasStdExtF(), {{s32, s32}})
561 .legalFor(
ST.hasStdExtD(), {{s64, s64}, {s32, s64}, {s64, s32}})
562 .legalFor(
ST.hasStdExtZfh(), {{s16, s16}, {s16, s32}, {s32, s16}})
563 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}, {s64, s16}})
567 getActionDefinitionsBuilder(G_FPTRUNC)
568 .legalFor(
ST.hasStdExtD(), {{s32, s64}})
569 .legalFor(
ST.hasStdExtZfh(), {{s16, s32}})
570 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}})
571 .libcallFor({{s32, s64}})
572 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}});
573 getActionDefinitionsBuilder(G_FPEXT)
574 .legalFor(
ST.hasStdExtD(), {{s64, s32}})
575 .legalFor(
ST.hasStdExtZfh(), {{s32, s16}})
576 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s64, s16}})
577 .libcallFor({{s64, s32}})
578 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}});
580 getActionDefinitionsBuilder(G_FCMP)
581 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
582 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
583 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
584 .clampScalar(0, sXLen, sXLen)
585 .libcallFor({{sXLen, s32}, {sXLen, s64}})
586 .libcallFor(
ST.is64Bit(), {{sXLen, s128}});
589 getActionDefinitionsBuilder(G_IS_FPCLASS)
590 .customFor(
ST.hasStdExtF(), {{s1, s32}})
591 .customFor(
ST.hasStdExtD(), {{s1, s64}})
592 .customFor(
ST.hasStdExtZfh(), {{s1, s16}})
595 getActionDefinitionsBuilder(G_FCONSTANT)
596 .legalFor(
ST.hasStdExtF(), {s32})
597 .legalFor(
ST.hasStdExtD(), {s64})
598 .legalFor(
ST.hasStdExtZfh(), {s16})
599 .customFor(!
ST.is64Bit(), {s32})
600 .customFor(
ST.is64Bit(), {s32, s64})
601 .lowerFor({s64, s128});
603 getActionDefinitionsBuilder({G_FPTOSI, G_FPTOUI})
604 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
605 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
606 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
607 .customFor(
ST.is64Bit() &&
ST.hasStdExtF(), {{s32, s32}})
608 .customFor(
ST.is64Bit() &&
ST.hasStdExtD(), {{s32, s64}})
609 .customFor(
ST.is64Bit() &&
ST.hasStdExtZfh(), {{s32, s16}})
610 .widenScalarToNextPow2(0)
612 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
613 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}})
614 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}, {s128, s128}});
616 getActionDefinitionsBuilder({G_SITOFP, G_UITOFP})
617 .legalFor(
ST.hasStdExtF(), {{s32, sXLen}})
618 .legalFor(
ST.hasStdExtD(), {{s64, sXLen}})
619 .legalFor(
ST.hasStdExtZfh(), {{s16, sXLen}})
620 .widenScalarToNextPow2(1)
624 return Query.
Types[0].isScalar() && Query.
Types[1].isScalar() &&
625 (Query.
Types[1].getSizeInBits() <
ST.getXLen()) &&
626 ((
ST.hasStdExtF() && Query.
Types[0].getSizeInBits() == 32) ||
627 (
ST.hasStdExtD() && Query.
Types[0].getSizeInBits() == 64) ||
628 (
ST.hasStdExtZfh() &&
629 Query.
Types[0].getSizeInBits() == 16));
634 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
635 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}})
636 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}, {s128, s128}});
639 getActionDefinitionsBuilder({G_FCEIL, G_FFLOOR, G_FRINT, G_FNEARBYINT,
640 G_INTRINSIC_TRUNC, G_INTRINSIC_ROUND,
641 G_INTRINSIC_ROUNDEVEN})
642 .legalFor(
ST.hasStdExtZfa(), {s32})
643 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
644 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16})
645 .libcallFor({s32, s64})
646 .libcallFor(
ST.is64Bit(), {s128});
648 getActionDefinitionsBuilder({G_FMAXIMUM, G_FMINIMUM})
649 .legalFor(
ST.hasStdExtZfa(), {s32})
650 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
651 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16});
653 getActionDefinitionsBuilder({G_FCOS, G_FSIN, G_FTAN, G_FPOW, G_FLOG, G_FLOG2,
654 G_FLOG10, G_FEXP, G_FEXP2, G_FEXP10, G_FACOS,
655 G_FASIN, G_FATAN, G_FATAN2, G_FCOSH, G_FSINH,
657 .libcallFor({s32, s64})
658 .libcallFor(
ST.is64Bit(), {s128});
659 getActionDefinitionsBuilder({G_FPOWI, G_FLDEXP})
660 .libcallFor({{s32, s32}, {s64, s32}})
661 .libcallFor(
ST.is64Bit(), {s128, s32});
663 getActionDefinitionsBuilder(G_FCANONICALIZE)
664 .legalFor(
ST.hasStdExtF(), {s32})
665 .legalFor(
ST.hasStdExtD(), {s64})
666 .legalFor(
ST.hasStdExtZfh(), {s16});
668 getActionDefinitionsBuilder(G_VASTART).customFor({p0});
672 getActionDefinitionsBuilder(G_VAARG)
675 .clampScalar(0, sXLen, sXLen)
676 .lowerForCartesianProduct({sXLen, p0}, {p0});
678 getActionDefinitionsBuilder(G_VSCALE)
679 .clampScalar(0, sXLen, sXLen)
683 getActionDefinitionsBuilder(G_SPLAT_VECTOR)
695 if (
ST.hasVInstructionsF64() &&
ST.hasStdExtD())
696 SplatActions.legalIf(
all(
698 else if (
ST.hasVInstructionsI64())
699 SplatActions.customIf(
all(
703 SplatActions.clampScalar(1, sXLen, sXLen);
712 getActionDefinitionsBuilder(G_EXTRACT_SUBVECTOR)
721 Query.
Types[0].getElementCount().divideCoefficientBy(8), 8);
722 return std::pair(0, CastTy);
730 getActionDefinitionsBuilder(G_INSERT_SUBVECTOR)
736 getActionDefinitionsBuilder(G_ATOMIC_CMPXCHG_WITH_SUCCESS)
739 getActionDefinitionsBuilder({G_ATOMIC_CMPXCHG, G_ATOMICRMW_ADD})
740 .legalFor(
ST.hasStdExtA(), {{sXLen, p0}})
741 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
742 .clampScalar(0, sXLen, sXLen);
744 getActionDefinitionsBuilder(G_ATOMICRMW_SUB)
745 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
746 .clampScalar(0, sXLen, sXLen)
755 getActionDefinitionsBuilder(G_INSERT_VECTOR_ELT)
757 InsertVectorEltPred,
typeIs(2, sXLen)))
761 getActionDefinitionsBuilder({G_INTRINSIC, G_INTRINSIC_W_SIDE_EFFECTS})
764 getActionDefinitionsBuilder(G_FENCE).alwaysLegal();
766 getActionDefinitionsBuilder({G_TRAP, G_DEBUGTRAP, G_UBSANTRAP}).alwaysLegal();
768 getLegacyLegalizerInfo().computeTables();