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();
158 {G_UADDSAT, G_SADDSAT, G_USUBSAT, G_SSUBSAT, G_SSHLSAT, G_USHLSAT})
162 .legalFor({{sXLen, sXLen}})
163 .customFor(ST.is64Bit(), {{s32, s32}})
164 .widenScalarToNextPow2(0)
168 getActionDefinitionsBuilder({G_ZEXT, G_SEXT, G_ANYEXT})
169 .legalFor({{s32, s16}})
170 .legalFor(
ST.is64Bit(), {{s64, s16}, {s64, s32}})
176 getActionDefinitionsBuilder(G_SEXT_INREG)
178 .clampScalar(0, sXLen, sXLen)
182 for (
unsigned Op : {G_MERGE_VALUES, G_UNMERGE_VALUES}) {
183 auto &MergeUnmergeActions = getActionDefinitionsBuilder(
Op);
184 unsigned BigTyIdx =
Op == G_MERGE_VALUES ? 0 : 1;
185 unsigned LitTyIdx =
Op == G_MERGE_VALUES ? 1 : 0;
186 if (XLen == 32 &&
ST.hasStdExtD()) {
187 MergeUnmergeActions.legalIf(
190 MergeUnmergeActions.widenScalarToNextPow2(LitTyIdx, XLen)
191 .widenScalarToNextPow2(BigTyIdx, XLen)
192 .clampScalar(LitTyIdx, sXLen, sXLen)
193 .clampScalar(BigTyIdx, sXLen, sXLen);
196 getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
198 getActionDefinitionsBuilder({G_ROTR, G_ROTL})
199 .legalFor(
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb(), {{sXLen, sXLen}})
200 .customFor(
ST.is64Bit() && (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb()),
204 getActionDefinitionsBuilder(G_BITREVERSE).maxScalar(0, sXLen).lower();
206 getActionDefinitionsBuilder(G_BITCAST).legalIf(
212 auto &BSWAPActions = getActionDefinitionsBuilder(G_BSWAP);
213 if (
ST.hasStdExtZbb() ||
ST.hasStdExtZbkb())
214 BSWAPActions.legalFor({sXLen}).clampScalar(0, sXLen, sXLen);
216 BSWAPActions.maxScalar(0, sXLen).lower();
218 auto &CountZerosActions = getActionDefinitionsBuilder({G_CTLZ, G_CTTZ});
219 auto &CountZerosUndefActions =
220 getActionDefinitionsBuilder({G_CTLZ_ZERO_UNDEF, G_CTTZ_ZERO_UNDEF});
221 if (
ST.hasStdExtZbb()) {
222 CountZerosActions.legalFor({{sXLen, sXLen}})
223 .customFor({{s32, s32}})
224 .clampScalar(0, s32, sXLen)
225 .widenScalarToNextPow2(0)
226 .scalarSameSizeAs(1, 0);
228 CountZerosActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
229 CountZerosUndefActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0);
231 CountZerosUndefActions.lower();
233 auto &CTPOPActions = getActionDefinitionsBuilder(G_CTPOP);
234 if (
ST.hasStdExtZbb()) {
235 CTPOPActions.legalFor({{sXLen, sXLen}})
236 .clampScalar(0, sXLen, sXLen)
237 .scalarSameSizeAs(1, 0);
239 CTPOPActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
242 getActionDefinitionsBuilder(G_CONSTANT)
244 .legalFor(!
ST.is64Bit(), {s32})
245 .customFor(
ST.is64Bit(), {s64})
246 .widenScalarToNextPow2(0)
247 .clampScalar(0, sXLen, sXLen);
250 getActionDefinitionsBuilder(G_FREEZE)
251 .legalFor({s16, s32, p0})
252 .legalFor(
ST.is64Bit(), {s64})
255 .widenScalarToNextPow2(0)
256 .clampScalar(0, s16, sXLen);
260 getActionDefinitionsBuilder(
261 {G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
262 .legalFor({s32, sXLen, p0})
265 .widenScalarToNextPow2(0)
266 .clampScalar(0, s32, sXLen);
268 getActionDefinitionsBuilder(G_ICMP)
269 .legalFor({{sXLen, sXLen}, {sXLen, p0}})
272 .widenScalarOrEltToNextPow2OrMinSize(1, 8)
273 .clampScalar(1, sXLen, sXLen)
274 .clampScalar(0, sXLen, sXLen);
276 getActionDefinitionsBuilder(G_SELECT)
277 .legalFor({{s32, sXLen}, {p0, sXLen}})
280 .legalFor(XLen == 64 ||
ST.hasStdExtD(), {{s64, sXLen}})
281 .widenScalarToNextPow2(0)
282 .clampScalar(0, s32, (XLen == 64 ||
ST.hasStdExtD()) ? s64 : s32)
283 .clampScalar(1, sXLen, sXLen);
285 auto &LoadActions = getActionDefinitionsBuilder(G_LOAD);
286 auto &StoreActions = getActionDefinitionsBuilder(G_STORE);
287 auto &ExtLoadActions = getActionDefinitionsBuilder({G_SEXTLOAD, G_ZEXTLOAD});
292 auto getScalarMemAlign = [&
ST](
unsigned Size) {
293 return ST.enableUnalignedScalarMem() ? 8 :
Size;
296 LoadActions.legalForTypesWithMemDesc(
297 {{s16, p0, s8, getScalarMemAlign(8)},
298 {s32, p0, s8, getScalarMemAlign(8)},
299 {s16, p0, s16, getScalarMemAlign(16)},
300 {s32, p0, s16, getScalarMemAlign(16)},
301 {s32, p0, s32, getScalarMemAlign(32)},
302 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
303 StoreActions.legalForTypesWithMemDesc(
304 {{s16, p0, s8, getScalarMemAlign(8)},
305 {s32, p0, s8, getScalarMemAlign(8)},
306 {s16, p0, s16, getScalarMemAlign(16)},
307 {s32, p0, s16, getScalarMemAlign(16)},
308 {s32, p0, s32, getScalarMemAlign(32)},
309 {p0, p0, sXLen, getScalarMemAlign(XLen)}});
310 ExtLoadActions.legalForTypesWithMemDesc(
311 {{sXLen, p0, s8, getScalarMemAlign(8)},
312 {sXLen, p0, s16, getScalarMemAlign(16)}});
314 LoadActions.legalForTypesWithMemDesc(
315 {{s64, p0, s8, getScalarMemAlign(8)},
316 {s64, p0, s16, getScalarMemAlign(16)},
317 {s64, p0, s32, getScalarMemAlign(32)},
318 {s64, p0, s64, getScalarMemAlign(64)}});
319 StoreActions.legalForTypesWithMemDesc(
320 {{s64, p0, s8, getScalarMemAlign(8)},
321 {s64, p0, s16, getScalarMemAlign(16)},
322 {s64, p0, s32, getScalarMemAlign(32)},
323 {s64, p0, s64, getScalarMemAlign(64)}});
324 ExtLoadActions.legalForTypesWithMemDesc(
325 {{s64, p0, s32, getScalarMemAlign(32)}});
326 }
else if (
ST.hasStdExtD()) {
327 LoadActions.legalForTypesWithMemDesc(
328 {{s64, p0, s64, getScalarMemAlign(64)}});
329 StoreActions.legalForTypesWithMemDesc(
330 {{s64, p0, s64, getScalarMemAlign(64)}});
334 if (
ST.hasVInstructions()) {
335 LoadActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
336 {nxv4s8, p0, nxv4s8, 8},
337 {nxv8s8, p0, nxv8s8, 8},
338 {nxv16s8, p0, nxv16s8, 8},
339 {nxv32s8, p0, nxv32s8, 8},
340 {nxv64s8, p0, nxv64s8, 8},
341 {nxv2s16, p0, nxv2s16, 16},
342 {nxv4s16, p0, nxv4s16, 16},
343 {nxv8s16, p0, nxv8s16, 16},
344 {nxv16s16, p0, nxv16s16, 16},
345 {nxv32s16, p0, nxv32s16, 16},
346 {nxv2s32, p0, nxv2s32, 32},
347 {nxv4s32, p0, nxv4s32, 32},
348 {nxv8s32, p0, nxv8s32, 32},
349 {nxv16s32, p0, nxv16s32, 32}});
350 StoreActions.legalForTypesWithMemDesc({{nxv2s8, p0, nxv2s8, 8},
351 {nxv4s8, p0, nxv4s8, 8},
352 {nxv8s8, p0, nxv8s8, 8},
353 {nxv16s8, p0, nxv16s8, 8},
354 {nxv32s8, p0, nxv32s8, 8},
355 {nxv64s8, p0, nxv64s8, 8},
356 {nxv2s16, p0, nxv2s16, 16},
357 {nxv4s16, p0, nxv4s16, 16},
358 {nxv8s16, p0, nxv8s16, 16},
359 {nxv16s16, p0, nxv16s16, 16},
360 {nxv32s16, p0, nxv32s16, 16},
361 {nxv2s32, p0, nxv2s32, 32},
362 {nxv4s32, p0, nxv4s32, 32},
363 {nxv8s32, p0, nxv8s32, 32},
364 {nxv16s32, p0, nxv16s32, 32}});
366 if (
ST.getELen() == 64) {
367 LoadActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
368 {nxv1s16, p0, nxv1s16, 16},
369 {nxv1s32, p0, nxv1s32, 32}});
370 StoreActions.legalForTypesWithMemDesc({{nxv1s8, p0, nxv1s8, 8},
371 {nxv1s16, p0, nxv1s16, 16},
372 {nxv1s32, p0, nxv1s32, 32}});
375 if (
ST.hasVInstructionsI64()) {
376 LoadActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
377 {nxv2s64, p0, nxv2s64, 64},
378 {nxv4s64, p0, nxv4s64, 64},
379 {nxv8s64, p0, nxv8s64, 64}});
380 StoreActions.legalForTypesWithMemDesc({{nxv1s64, p0, nxv1s64, 64},
381 {nxv2s64, p0, nxv2s64, 64},
382 {nxv4s64, p0, nxv4s64, 64},
383 {nxv8s64, p0, nxv8s64, 64}});
392 if (XLen <=
ST.getELen()) {
398 LoadActions.widenScalarToNextPow2(0, 8)
399 .lowerIfMemSizeNotByteSizePow2()
400 .clampScalar(0, s16, sXLen)
403 .clampScalar(0, s16, sXLen)
404 .lowerIfMemSizeNotByteSizePow2()
407 ExtLoadActions.widenScalarToNextPow2(0).clampScalar(0, sXLen, sXLen).lower();
409 getActionDefinitionsBuilder({G_PTR_ADD, G_PTRMASK}).legalFor({{p0, sXLen}});
411 getActionDefinitionsBuilder(G_PTRTOINT)
412 .legalFor({{sXLen, p0}})
413 .clampScalar(0, sXLen, sXLen);
415 getActionDefinitionsBuilder(G_INTTOPTR)
416 .legalFor({{p0, sXLen}})
417 .clampScalar(1, sXLen, sXLen);
419 getActionDefinitionsBuilder(G_BRCOND).legalFor({sXLen}).minScalar(0, sXLen);
421 getActionDefinitionsBuilder(G_BRJT).customFor({{p0, sXLen}});
423 getActionDefinitionsBuilder(G_BRINDIRECT).legalFor({p0});
425 getActionDefinitionsBuilder(G_PHI)
426 .legalFor({p0, s32, sXLen})
427 .widenScalarToNextPow2(0)
428 .clampScalar(0, s32, sXLen);
430 getActionDefinitionsBuilder({G_GLOBAL_VALUE, G_JUMP_TABLE, G_CONSTANT_POOL})
433 if (
ST.hasStdExtZmmul()) {
434 getActionDefinitionsBuilder(G_MUL)
436 .widenScalarToNextPow2(0)
437 .clampScalar(0, sXLen, sXLen);
440 getActionDefinitionsBuilder({G_SMULH, G_UMULH})
445 getActionDefinitionsBuilder({G_SMULO, G_UMULO}).minScalar(0, sXLen).lower();
447 getActionDefinitionsBuilder(G_MUL)
448 .libcallFor({sXLen, sDoubleXLen})
449 .widenScalarToNextPow2(0)
450 .clampScalar(0, sXLen, sDoubleXLen);
452 getActionDefinitionsBuilder({G_SMULH, G_UMULH}).lowerFor({sXLen});
454 getActionDefinitionsBuilder({G_SMULO, G_UMULO})
459 .widenScalarIf(
typeIs(0, sXLen),
464 if (
ST.hasStdExtM()) {
465 getActionDefinitionsBuilder({G_SDIV, G_UDIV, G_UREM})
468 .libcallFor({sDoubleXLen})
469 .clampScalar(0, s32, sDoubleXLen)
470 .widenScalarToNextPow2(0);
471 getActionDefinitionsBuilder(G_SREM)
473 .libcallFor({sDoubleXLen})
474 .clampScalar(0, sXLen, sDoubleXLen)
475 .widenScalarToNextPow2(0);
477 getActionDefinitionsBuilder({G_UDIV, G_SDIV, G_UREM, G_SREM})
478 .libcallFor({sXLen, sDoubleXLen})
479 .clampScalar(0, sXLen, sDoubleXLen)
480 .widenScalarToNextPow2(0);
484 getActionDefinitionsBuilder({G_SDIVREM, G_UDIVREM}).lower();
486 getActionDefinitionsBuilder(G_ABS)
487 .customFor(
ST.hasStdExtZbb(), {sXLen})
488 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
491 getActionDefinitionsBuilder({G_ABDS, G_ABDU})
492 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
495 getActionDefinitionsBuilder({G_UMAX, G_UMIN, G_SMAX, G_SMIN})
496 .legalFor(
ST.hasStdExtZbb(), {sXLen})
497 .minScalar(
ST.hasStdExtZbb(), 0, sXLen)
500 getActionDefinitionsBuilder({G_SCMP, G_UCMP}).lower();
502 getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
504 getActionDefinitionsBuilder({G_MEMCPY, G_MEMMOVE, G_MEMSET}).
libcall();
506 getActionDefinitionsBuilder({G_DYN_STACKALLOC, G_STACKSAVE, G_STACKRESTORE})
512 getActionDefinitionsBuilder(
513 {G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FMA, G_FSQRT, G_FMAXNUM, G_FMINNUM})
514 .legalFor(
ST.hasStdExtF(), {s32})
515 .legalFor(
ST.hasStdExtD(), {s64})
516 .legalFor(
ST.hasStdExtZfh(), {s16})
517 .libcallFor({s32, s64})
518 .libcallFor(
ST.is64Bit(), {s128});
520 getActionDefinitionsBuilder({G_FNEG, G_FABS})
521 .legalFor(
ST.hasStdExtF(), {s32})
522 .legalFor(
ST.hasStdExtD(), {s64})
523 .legalFor(
ST.hasStdExtZfh(), {s16})
524 .lowerFor({s32, s64, s128});
526 getActionDefinitionsBuilder(G_FREM)
527 .libcallFor({s32, s64})
528 .libcallFor(
ST.is64Bit(), {s128})
532 getActionDefinitionsBuilder(G_FCOPYSIGN)
533 .legalFor(
ST.hasStdExtF(), {{s32, s32}})
534 .legalFor(
ST.hasStdExtD(), {{s64, s64}, {s32, s64}, {s64, s32}})
535 .legalFor(
ST.hasStdExtZfh(), {{s16, s16}, {s16, s32}, {s32, s16}})
536 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}, {s64, s16}})
540 getActionDefinitionsBuilder(G_FPTRUNC)
541 .legalFor(
ST.hasStdExtD(), {{s32, s64}})
542 .legalFor(
ST.hasStdExtZfh(), {{s16, s32}})
543 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s16, s64}})
544 .libcallFor({{s32, s64}})
545 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}});
546 getActionDefinitionsBuilder(G_FPEXT)
547 .legalFor(
ST.hasStdExtD(), {{s64, s32}})
548 .legalFor(
ST.hasStdExtZfh(), {{s32, s16}})
549 .legalFor(
ST.hasStdExtZfh() &&
ST.hasStdExtD(), {{s64, s16}})
550 .libcallFor({{s64, s32}})
551 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}});
553 getActionDefinitionsBuilder(G_FCMP)
554 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
555 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
556 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
557 .clampScalar(0, sXLen, sXLen)
558 .libcallFor({{sXLen, s32}, {sXLen, s64}})
559 .libcallFor(
ST.is64Bit(), {{sXLen, s128}});
562 getActionDefinitionsBuilder(G_IS_FPCLASS)
563 .customFor(
ST.hasStdExtF(), {{s1, s32}})
564 .customFor(
ST.hasStdExtD(), {{s1, s64}})
565 .customFor(
ST.hasStdExtZfh(), {{s1, s16}})
566 .lowerFor({{s1, s32}, {s1, s64}});
568 getActionDefinitionsBuilder(G_FCONSTANT)
569 .legalFor(
ST.hasStdExtF(), {s32})
570 .legalFor(
ST.hasStdExtD(), {s64})
571 .legalFor(
ST.hasStdExtZfh(), {s16})
572 .lowerFor({s32, s64, s128});
574 getActionDefinitionsBuilder({G_FPTOSI, G_FPTOUI})
575 .legalFor(
ST.hasStdExtF(), {{sXLen, s32}})
576 .legalFor(
ST.hasStdExtD(), {{sXLen, s64}})
577 .legalFor(
ST.hasStdExtZfh(), {{sXLen, s16}})
578 .customFor(
ST.is64Bit() &&
ST.hasStdExtF(), {{s32, s32}})
579 .customFor(
ST.is64Bit() &&
ST.hasStdExtD(), {{s32, s64}})
580 .customFor(
ST.is64Bit() &&
ST.hasStdExtZfh(), {{s32, s16}})
581 .widenScalarToNextPow2(0)
583 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
584 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}})
585 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}, {s128, s128}});
587 getActionDefinitionsBuilder({G_SITOFP, G_UITOFP})
588 .legalFor(
ST.hasStdExtF(), {{s32, sXLen}})
589 .legalFor(
ST.hasStdExtD(), {{s64, sXLen}})
590 .legalFor(
ST.hasStdExtZfh(), {{s16, sXLen}})
591 .widenScalarToNextPow2(1)
595 return Query.
Types[0].isScalar() && Query.
Types[1].isScalar() &&
596 (Query.
Types[1].getSizeInBits() <
ST.getXLen()) &&
597 ((
ST.hasStdExtF() && Query.
Types[0].getSizeInBits() == 32) ||
598 (
ST.hasStdExtD() && Query.
Types[0].getSizeInBits() == 64) ||
599 (
ST.hasStdExtZfh() &&
600 Query.
Types[0].getSizeInBits() == 16));
605 .libcallFor({{s32, s32}, {s64, s32}, {s32, s64}, {s64, s64}})
606 .libcallFor(
ST.is64Bit(), {{s128, s32}, {s128, s64}})
607 .libcallFor(
ST.is64Bit(), {{s32, s128}, {s64, s128}, {s128, s128}});
610 getActionDefinitionsBuilder({G_FCEIL, G_FFLOOR, G_FRINT, G_FNEARBYINT,
611 G_INTRINSIC_TRUNC, G_INTRINSIC_ROUND,
612 G_INTRINSIC_ROUNDEVEN})
613 .legalFor(
ST.hasStdExtZfa(), {s32})
614 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
615 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16})
616 .libcallFor({s32, s64})
617 .libcallFor(
ST.is64Bit(), {s128});
619 getActionDefinitionsBuilder({G_FMAXIMUM, G_FMINIMUM})
620 .legalFor(
ST.hasStdExtZfa(), {s32})
621 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtD(), {s64})
622 .legalFor(
ST.hasStdExtZfa() &&
ST.hasStdExtZfh(), {s16});
624 getActionDefinitionsBuilder({G_FCOS, G_FSIN, G_FTAN, G_FPOW, G_FLOG, G_FLOG2,
625 G_FLOG10, G_FEXP, G_FEXP2, G_FEXP10, G_FACOS,
626 G_FASIN, G_FATAN, G_FATAN2, G_FCOSH, G_FSINH,
628 .libcallFor({s32, s64})
629 .libcallFor(
ST.is64Bit(), {s128});
630 getActionDefinitionsBuilder({G_FPOWI, G_FLDEXP})
631 .libcallFor({{s32, s32}, {s64, s32}})
632 .libcallFor(
ST.is64Bit(), {s128, s32});
634 getActionDefinitionsBuilder(G_VASTART).customFor({p0});
638 getActionDefinitionsBuilder(G_VAARG)
641 .clampScalar(0, sXLen, sXLen)
642 .lowerForCartesianProduct({sXLen, p0}, {p0});
644 getActionDefinitionsBuilder(G_VSCALE)
645 .clampScalar(0, sXLen, sXLen)
649 getActionDefinitionsBuilder(G_SPLAT_VECTOR)
661 if (
ST.hasVInstructionsF64() &&
ST.hasStdExtD())
662 SplatActions.legalIf(
all(
664 else if (
ST.hasVInstructionsI64())
665 SplatActions.customIf(
all(
669 SplatActions.clampScalar(1, sXLen, sXLen);
678 getActionDefinitionsBuilder(G_EXTRACT_SUBVECTOR)
687 Query.
Types[0].getElementCount().divideCoefficientBy(8), 8);
688 return std::pair(0, CastTy);
696 getActionDefinitionsBuilder(G_INSERT_SUBVECTOR)
702 getActionDefinitionsBuilder(G_ATOMICRMW_ADD)
703 .legalFor(
ST.hasStdExtA(), {{sXLen, p0}})
704 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
705 .clampScalar(0, sXLen, sXLen);
707 getActionDefinitionsBuilder(G_ATOMICRMW_SUB)
708 .libcallFor(!
ST.hasStdExtA(), {{s8, p0}, {s16, p0}, {s32, p0}, {s64, p0}})
709 .clampScalar(0, sXLen, sXLen)
712 getLegacyLegalizerInfo().computeTables();