[llvm] [X86][GlobalISel] Enable scalar versions of G_UITOFP and G_FPTOUI (PR #100079)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 16 05:27:24 PDT 2024
================
@@ -498,6 +498,54 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
.clampScalar(0, s32, sMaxScalar)
.widenScalarToNextPow2(1);
+ // For G_UITOFP and G_FPTOUI without AVX512, we have to custom legalize types
+ // <= s32 manually. Otherwise, in custom handler there is no way to
+ // understand whether s32 is an original type and we need to promote it to
+ // s64 or s32 is obtained after widening and we shouldn't widen it to s64.
+ //
+ // For AVX512 we simply widen types as there is direct mapping from opcodes
+ // to asm instructions.
+ getActionDefinitionsBuilder(G_UITOFP)
+ .legalIf([=](const LegalityQuery &Query) {
+ return HasAVX512 && typeInSet(0, {s32, s64})(Query) &&
+ typeInSet(1, {s32, s64})(Query);
+ })
+ .lowerIf([=](const LegalityQuery &Query) {
+ // Lower conversions from s64
+ return !HasAVX512 &&
+ ((HasSSE1 && typeIs(0, s32)(Query)) ||
+ (HasSSE2 && typeIs(0, s64)(Query))) &&
+ (Is64Bit && typeIs(1, s64)(Query));
+ })
+ .customIf([=](const LegalityQuery &Query) {
----------------
arsenm wrote:
Move customIf before lowerIf and after legalIf
https://github.com/llvm/llvm-project/pull/100079
More information about the llvm-commits
mailing list