aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-15 19:17:55 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-15 19:17:55 +0800
commitb5fb607fa3f54e791baf7ab39faf77d925dd53b7 (patch)
treea81594ee7dc8fb38604423df2e8422958f168f43
parent220c9cd426ec0590f6a43550b28fb344d8dfd8fd (diff)
downloadrcc-project-b5fb607fa3f54e791baf7ab39faf77d925dd53b7.tar.gz
rcc-project-b5fb607fa3f54e791baf7ab39faf77d925dd53b7.tar.xz
[RISCV][GlobalISel] Widen integer-to-floating conversions to XLEN
-rw-r--r--backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
index 864aca5..3f8f4cb 100644
--- a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
+++ b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
@@ -618,6 +618,17 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &Subtarget) : Subtar
.legalFor(HasF, {{S32, S64}})
.legalFor(HasD, {{S64, S64}})
.widenScalarToNextPow2(1)
+ .widenScalarIf(
+ [HasF, HasD](const LegalizationQuery &Query) {
+ if (Query.Types.size() < 2 || !Query.Types[0].isCategoryNeutralScalar() ||
+ !Query.Types[1].isCategoryNeutralScalar() ||
+ Query.Types[1].scalarBitWidth() >= 64) {
+ return false;
+ }
+ return (HasF && Query.Types[0].scalarBitWidth() == 32) ||
+ (HasD && Query.Types[0].scalarBitWidth() == 64);
+ },
+ [S64](const LegalizationQuery &) { return std::pair{std::size_t{1}, S64}; })
.minScalar(1, S32)
.libcallFor({{S32, S32},
{S64, S32},