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}).lower();
160 {G_UADDSAT, G_SADDSAT, G_USUBSAT, G_SSUBSAT, G_SSHLSAT, G_USHLSAT})
164 .legalFor({{sXLen, sXLen}})
165 .customFor(ST.is64Bit(), {{s32, s32}})
166 .widenScalarToNextPow2(0)
170 getActionDefinitionsBuilder({G_ZEXT, G_SEXT, G_ANYEXT})
171 .legalFor({{s32, s16}})
172 .legalFor(
ST.is64Bit(), {{s64, s16}, {s64, s32}})
178 getActionDefinitionsBuilder(G_SEXT_INREG)
180 .clampScalar(0, sXLen, sXLen)
184 for (
unsigned Op : {G_MERGE_VALUES, G_UNMERGE_VALUES}) {
185 auto &MergeUnmergeActions = getActionDefinitionsBuilder(
Op);
186 unsigned BigTyIdx =
Op == G_MERGE_VALUES ? 0 : 1;
187 unsigned LitTyIdx =
Op == G_MERGE_VALUES ? 1 : 0;
188 if (XLen == 32 &&
ST.hasStdExtD()) {
189 MergeUnmergeActions.legalIf(
192 MergeUnmergeActions.widenScalarToNextPow2(LitTyIdx, XLen)
193 .widenScalarToNextPow2(BigTyIdx, XLen)
194 .clampScalar(LitTyIdx, sXLen, sXLen)
195 .clampScalar(BigTyIdx, sXLen, sXLen);
198 getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
200 getActionDefinitionsBuilder({G_ROTR, G_ROTL})
201 .legalFor(
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb(), {{sXLen, sXLen}})
202 .customFor(
ST.is64Bit() && (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb()),
206 getActionDefinitionsBuilder(G_BITREVERSE).maxScalar(0, sXLen).lower();
208 getActionDefinitionsBuilder(G_BITCAST).legalIf(
214 auto &BSWAPActions = getActionDefinitionsBuilder(G_BSWAP);
215 if (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb())
216 BSWAPActions.legalFor({sXLen}).clampScalar(0, sXLen, sXLen);
218 BSWAPActions.maxScalar(0, sXLen).lower();
220 auto &CountZerosActions = getActionDefinitionsBuilder({G_CTLZ, G_CTTZ});
221 auto &CountZerosUndefActions =
222 getActionDefinitionsBuilder({G_CTLZ_ZERO_UNDEF, G_CTTZ_ZERO_UNDEF});
223 if (
ST.hasStdExtZbb()) {
224 CountZerosActions.legalFor({{sXLen, sXLen}})
225 .customFor({{s32, s32}})
226 .clampScalar(0, s32, sXLen)
227 .widenScalarToNextPow2(0)
228 .scalarSameSizeAs(1, 0);
230 CountZerosActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
231 CountZerosUndefActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0);
233 CountZerosUndefActions.lower();
235 auto &CTPOPActions = getActionDefinitionsBuilder(G_CTPOP);
236 if (
ST.hasStdExtZbb()) {
237 CTPOPActions.legalFor({{sXLen, sXLen}})
238 .clampScalar(0, sXLen, sXLen)
239 .scalarSameSizeAs(1, 0);
241 CTPOPActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
244 getActionDefinitionsBuilder(G_CONSTANT)
246 .legalFor(!
ST.is64Bit(), {s32})
247 .customFor(
ST.is64Bit(), {s64})
248 .widenScalarToNextPow2(0)
249 .clampScalar(0, sXLen, sXLen);
252 getActionDefinitionsBuilder(G_FREEZE)
253 .legalFor({s16, s32, p0})
254 .legalFor(
ST.is64Bit(), {s64})
257 .widenScalarToNextPow2(0)
258 .clampScalar(0, s16, sXLen);
262 getActionDefinitionsBuilder(
263 {G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
264 .legalFor({s32, sXLen, p0})
267 .widenScalarToNextPow2(0)
268 .clampScalar(0, s32, sXLen);
270 getActionDefinitionsBuilder(G_ICMP)
271 .legalFor({{sXLen, sXLen}, {sXLen, p0}})
274 .widenScalarOrEltToNextPow2OrMinSize(1, 8)
275 .clampScalar(1, sXLen, sXLen)
276 .clampScalar(0, sXLen, sXLen);
278 getActionDefinitionsBuilder(G_SELECT)
279 .legalFor({{s32, sXLen}, {p0, sXLen}})
282 .legalFor(XLen == 64 ||
ST.hasStdExtD(), {{s64, sXLen}})
283 .widenScalarToNextPow2(0)
284 .clampScalar(0, s32, (XLen == 64 ||
ST.hasStdExtD()) ? s64 : s32)
285 .clampScalar(1, sXLen, sXLen);
287 auto &LoadActions = getActionDefinitionsBuilder(G_LOAD);
288 auto &StoreActions = getActionDefinitionsBuilder(G_STORE);
289 auto &ExtLoadActions = getActionDefinitionsBuilder({G_SEXTLOAD, G_ZEXTLOAD});
294 auto getScalarMemAlign = [&
ST](
unsigned Size) {
295 return ST.enableUnalignedScalarMem() ? 8 :
Size;
298 LoadActions.legalForTypesWithMemDesc(
299 {{s16, p0, s8, getScalarMemAlign(8)},
300 {s32, p0, s8, getScalarMemAlign(8)},
301 {s16, p0, s16, getScalarMemAlign(16)},
302 {s32, p0, s16, getScalarMemAlign(16)},
303 {s32, p0, s32, getScalarMemAlign(32)},
304 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
305 StoreActions.legalForTypesWithMemDesc(
306 {{s16, p0, s8, getScalarMemAlign(8)},
307 {s32, p0, s8, getScalarMemAlign(8)},
308 {s16, p0, s16, getScalarMemAlign(16)},
309 {s32, p0, s16, getScalarMemAlign(16)},
310 {s32, p0, s32, getScalarMemAlign(32)},
311 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
312 ExtLoadActions.legalForTypesWithMemDesc(
313 {{sXLen, p0, s8, getScalarMemAlign(8)},
314 {sXLen, p0, s16, getScalarMemAlign(16)}});
316 LoadActions.legalForTypesWithMemDesc(
317 {{s64, p0, s8, getScalarMemAlign(8)},
318 {s64, p0, s16, getScalarMemAlign(16)},
319 {s64, p0, s32, getScalarMemAlign(32)},
320 {s64, p0, s64, getScalarMemAlign(64)}});
321 StoreActions.legalForTypesWithMemDesc(
322 {{s64, p0, s8, getScalarMemAlign(8)},
323 {s64, p0, s16, getScalarMemAlign(16)},
324 {s64, p0, s32, getScalarMemAlign(32)},
325 {s64, p0, s64, getScalarMemAlign(64)}});
326 ExtLoadActions.legalForTypesWithMemDesc(
327 {{s64, p0, s32, getScalarMemAlign(32)}});
328 }
else if (
ST.hasStdExtD()) {
329 LoadActions.legalForTypesWithMemDesc(
330 {{s64, p0, s64, getScalarMemAlign(64)}});
331 StoreActions.legalForTypesWithMemDesc(
332 {{s64, p0, s64, getScalarMemAlign(64)}});
336 if (
ST.hasVInstructions()) {
337 LoadActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
338 {nxv4s8, p0, nxv4s8, 8},
339 {nxv8s8, p0, nxv8s8, 8},
340 {nxv16s8, p0, nxv16s8, 8},
341 {nxv32s8, p0, nxv32s8, 8},
342 {nxv64s8, p0, nxv64s8, 8},
343 {nxv2s16, p0, nxv2s16, 16},
344 {nxv4s16, p0, nxv4s16, 16},
345 {nxv8s16, p0, nxv8s16, 16},
346 {nxv16s16, p0, nxv16s16, 16},
347 {nxv32s16, p0, nxv32s16, 16},
348 {nxv2s32, p0, nxv2s32, 32},
349 {nxv4s32, p0, nxv4s32, 32},
350 {nxv8s32, p0, nxv8s32, 32},
351 {nxv16s32, p0, nxv16s32, 32}});
352 StoreActions.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}});
368 if (
ST.getELen() == 64) {
369 LoadActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
370 {nxv1s16, p0, nxv1s16, 16},
371 {nxv1s32, p0, nxv1s32, 32}});
372 StoreActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
373 {nxv1s16, p0, nxv1s16, 16},
374 {nxv1s32, p0, nxv1s32, 32}});
377 if (
ST.hasVInstructionsI64()) {
378 LoadActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
379 {nxv2s64, p0, nxv2s64, 64},
380 {nxv4s64, p0, nxv4s64, 64},
381 {nxv8s64, p0, nxv8s64, 64}});
382 StoreActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
383 {nxv2s64, p0, nxv2s64, 64},
384 {nxv4s64, p0, nxv4s64, 64},
385 {nxv8s64, p0, nxv8s64, 64}});
394 if (XLen <=
ST.getELen()) {
400 LoadActions.widenScalarToNextPow2(0, 8)
401 .lowerIfMemSizeNotByteSizePow2()
402 .clampScalar(0, s16, sXLen)
405 .clampScalar(0, s16, sXLen)
406 .lowerIfMemSizeNotByteSizePow2()
409 ExtLoadActions.widenScalarToNextPow2(0).clampScalar(0, sXLen, sXLen).lower();
411 getActionDefinitionsBuilder({G_PTR_ADD, G_PTRMASK}).legalFor({{p0, sXLen}});
413 getActionDefinitionsBuilder(G_PTRTOINT)
414 .legalFor({{sXLen, p0}})
415 .clampScalar(0, sXLen, sXLen);
417 getActionDefinitionsBuilder(G_INTTOPTR)
418 .legalFor({{p0, sXLen}})
419 .clampScalar(1, sXLen, sXLen);
421 getActionDefinitionsBuilder(G_BRCOND).legalFor({sXLen}).minScalar(0, sXLen);
423 getActionDefinitionsBuilder(G_BRJT).customFor({{p0, sXLen}});
425 getActionDefinitionsBuilder(G_BRINDIRECT).legalFor({p0});
427 getActionDefinitionsBuilder(G_PHI)
428 .legalFor({p0, s32, sXLen})
429 .widenScalarToNextPow2(0)
430 .clampScalar(0, s32, sXLen);
432 getActionDefinitionsBuilder({G_GLOBAL_VALUE, G_JUMP_TABLE, G_CONSTANT_POOL})
435 if (
ST.hasStdExtZmmul()) {
436 getActionDefinitionsBuilder(G_MUL)
438 .widenScalarToNextPow2(0)
439 .clampScalar(0, sXLen, sXLen);
442 getActionDefinitionsBuilder({G_SMULH, G_UMULH})
447 getActionDefinitionsBuilder({G_SMULO, G_UMULO}).minScalar(0, sXLen).lower();
449 getActionDefinitionsBuilder(G_MUL)
450 .libcallFor({sXLen, sDoubleXLen})
451 .widenScalarToNextPow2(0)
452 .clampScalar(0, sXLen, sDoubleXLen);
454 getActionDefinitionsBuilder({G_SMULH, G_UMULH}).lowerFor({sXLen});
456 getActionDefinitionsBuilder({G_SMULO, G_UMULO})
461 .widenScalarIf(
typeIs(0, sXLen),
466 if (
ST.hasStdExtM()) {
467 getActionDefinitionsBuilder({G_SDIV, G_UDIV, G_UREM})
470 .libcallFor({sDoubleXLen})
471 .clampScalar(0, s32, sDoubleXLen)
472 .widenScalarToNextPow2(0);
473 getActionDefinitionsBuilder(G_SREM)
475 .libcallFor({sDoubleXLen})
476 .clampScalar(0, sXLen, sDoubleXLen)
477 .widenScalarToNextPow2(0);
479 getActionDefinitionsBuilder({G_UDIV, G_SDIV, G_UREM, G_SREM})
480 .libcallFor({sXLen, sDoubleXLen})
481 .clampScalar(0, sXLen, sDoubleXLen)
482 .widenScalarToNextPow2(0);
486 getActionDefinitionsBuilder({G_SDIVREM, G_UDIVREM}).lower();
488 getActionDefinitionsBuilder(G_ABS)
489 .customFor(
ST.hasStdExtZbb(), {sXLen})
490 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
493 getActionDefinitionsBuilder({G_ABDS, G_ABDU})
494 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
497 getActionDefinitionsBuilder({G_UMAX, G_UMIN, G_SMAX, G_SMIN})
498 .legalFor(
ST.hasStdExtZbb(), {sXLen})
499 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
502 getActionDefinitionsBuilder({G_SCMP, G_UCMP}).lower();
504 getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
506 getActionDefinitionsBuilder({G_MEMCPY, G_MEMMOVE, G_MEMSET}).
libcall();
508 getActionDefinitionsBuilder({G_DYN_STACKALLOC, G_STACKSAVE, G_STACKRESTORE})
514 getActionDefinitionsBuilder({G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FMA, G_FSQRT,
515 G_FMAXNUM, G_FMINNUM, G_FMAXIMUMNUM,
517 .legalFor(
ST.hasStdExtF(), {s32})
518 .legalFor(
ST.hasStdExtD(), {s64})
519 .legalFor(
ST.hasStdExtZfh(), {s16})
520 .libcallFor({s32, s64})
521 .libcallFor(
ST.is64Bit(), {s128});
523 getActionDefinitionsBuilder({G_FNEG, G_FABS})
524 .legalFor(
ST.hasStdExtF(), {s32})
525 .legalFor(
ST.hasStdExtD(), {s64})
526 .legalFor(
ST.hasStdExtZfh(), {s16})
527 .lowerFor({s32, s64, s128});
529 getActionDefinitionsBuilder(G_FREM)
530 .libcallFor({s32, s64})
531 .libcallFor(
ST.is64Bit(), {s128})
535 getActionDefinitionsBuilder(G_FCOPYSIGN)
536 .legalFor(
ST.hasStdExtF(), {{s32, s32}})
537 .legalFor(
ST.hasStdExtD(), {{s64, s64}, {s32, s64}, {s64, s32}})
538 .legalFor(
ST.hasStdExtZfh(), {{s16, s16}, {s16, s32}, {s32, s16}})
539 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}, {s64, s16}})
543 getActionDefinitionsBuilder(G_FPTRUNC)
544 .legalFor(
ST.hasStdExtD(), {{s32, s64}})
545 .legalFor(
ST.hasStdExtZfh(), {{s16, s32}})
546 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}})
547 .libcallFor({{s32, s64}})
548 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}});
549 getActionDefinitionsBuilder(G_FPEXT)
550 .legalFor(
ST.hasStdExtD(), {{s64, s32}})
551 .legalFor(
ST.hasStdExtZfh(), {{s32, s16}})
552 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s64, s16}})
553 .libcallFor({{s64, s32}})
554 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}});
556 getActionDefinitionsBuilder(G_FCMP)
557 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
558 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
559 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
560 .clampScalar(0, sXLen, sXLen)
561 .libcallFor({{sXLen, s32}, {sXLen, s64}})
562 .libcallFor(
ST.is64Bit(), {{sXLen, s128}});
565 getActionDefinitionsBuilder(G_IS_FPCLASS)
566 .customFor(
ST.hasStdExtF(), {{s1, s32}})
567 .customFor(
ST.hasStdExtD(), {{s1, s64}})
568 .customFor(
ST.hasStdExtZfh(), {{s1, s16}})
569 .lowerFor({{s1, s32}, {s1, s64}});
571 getActionDefinitionsBuilder(G_FCONSTANT)
572 .legalFor(
ST.hasStdExtF(), {s32})
573 .legalFor(
ST.hasStdExtD(), {s64})
574 .legalFor(
ST.hasStdExtZfh(), {s16})
575 .lowerFor({s32, s64, s128});
577 getActionDefinitionsBuilder({G_FPTOSI, G_FPTOUI})
578 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
579 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
580 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
581 .customFor(
ST.is64Bit() &&
ST.hasStdExtF(), {{s32, s32}})
582 .customFor(
ST.is64Bit() &&
ST.hasStdExtD(), {{s32, s64}})
583 .customFor(
ST.is64Bit() &&
ST.hasStdExtZfh(), {{s32, s16}})
584 .widenScalarToNextPow2(0)
586 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
587 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}})
588 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}, {s128, s128}});
590 getActionDefinitionsBuilder({G_SITOFP, G_UITOFP})
591 .legalFor(
ST.hasStdExtF(), {{s32, sXLen}})
592 .legalFor(
ST.hasStdExtD(), {{s64, sXLen}})
593 .legalFor(
ST.hasStdExtZfh(), {{s16, sXLen}})
594 .widenScalarToNextPow2(1)
598 return Query.
Types[0].isScalar() && Query.
Types[1].isScalar() &&
599 (Query.
Types[1].getSizeInBits() <
ST.getXLen()) &&
600 ((
ST.hasStdExtF() && Query.
Types[0].getSizeInBits() == 32) ||
601 (
ST.hasStdExtD() && Query.
Types[0].getSizeInBits() == 64) ||
602 (
ST.hasStdExtZfh() &&
603 Query.
Types[0].getSizeInBits() == 16));
608 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
609 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}})
610 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}, {s128, s128}});
613 getActionDefinitionsBuilder({G_FCEIL, G_FFLOOR, G_FRINT, G_FNEARBYINT,
614 G_INTRINSIC_TRUNC, G_INTRINSIC_ROUND,
615 G_INTRINSIC_ROUNDEVEN})
616 .legalFor(
ST.hasStdExtZfa(), {s32})
617 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
618 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16})
619 .libcallFor({s32, s64})
620 .libcallFor(
ST.is64Bit(), {s128});
622 getActionDefinitionsBuilder({G_FMAXIMUM, G_FMINIMUM})
623 .legalFor(
ST.hasStdExtZfa(), {s32})
624 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
625 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16});
627 getActionDefinitionsBuilder({G_FCOS, G_FSIN, G_FTAN, G_FPOW, G_FLOG, G_FLOG2,
628 G_FLOG10, G_FEXP, G_FEXP2, G_FEXP10, G_FACOS,
629 G_FASIN, G_FATAN, G_FATAN2, G_FCOSH, G_FSINH,
631 .libcallFor({s32, s64})
632 .libcallFor(
ST.is64Bit(), {s128});
633 getActionDefinitionsBuilder({G_FPOWI, G_FLDEXP})
634 .libcallFor({{s32, s32}, {s64, s32}})
635 .libcallFor(
ST.is64Bit(), {s128, s32});
637 getActionDefinitionsBuilder(G_VASTART).customFor({p0});
641 getActionDefinitionsBuilder(G_VAARG)
644 .clampScalar(0, sXLen, sXLen)
645 .lowerForCartesianProduct({sXLen, p0}, {p0});
647 getActionDefinitionsBuilder(G_VSCALE)
648 .clampScalar(0, sXLen, sXLen)
652 getActionDefinitionsBuilder(G_SPLAT_VECTOR)
664 if (
ST.hasVInstructionsF64() &&
ST.hasStdExtD())
665 SplatActions.legalIf(
all(
667 else if (
ST.hasVInstructionsI64())
668 SplatActions.customIf(
all(
672 SplatActions.clampScalar(1, sXLen, sXLen);
681 getActionDefinitionsBuilder(G_EXTRACT_SUBVECTOR)
690 Query.
Types[0].getElementCount().divideCoefficientBy(8), 8);
691 return std::pair(0, CastTy);
699 getActionDefinitionsBuilder(G_INSERT_SUBVECTOR)
705 getActionDefinitionsBuilder(G_ATOMIC_CMPXCHG_WITH_SUCCESS)
708 getActionDefinitionsBuilder({G_ATOMIC_CMPXCHG, G_ATOMICRMW_ADD})
709 .legalFor(
ST.hasStdExtA(), {{sXLen, p0}})
710 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
711 .clampScalar(0, sXLen, sXLen);
713 getActionDefinitionsBuilder(G_ATOMICRMW_SUB)
714 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
715 .clampScalar(0, sXLen, sXLen)
718 getLegacyLegalizerInfo().computeTables();