aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/RISCV
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-15 03:55:37 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-15 03:55:37 +0800
commit6a53b7f8c3ce90791e3988b6cb9c4a9808e8d984 (patch)
treeac3b291efcc7493ece52e2904ff629147d174c99 /backend/lib/Target/RISCV
parentfa1214d24c8882b4314729e21c5485d889ca0e35 (diff)
downloadrcc-project-6a53b7f8c3ce90791e3988b6cb9c4a9808e8d984.tar.gz
rcc-project-6a53b7f8c3ce90791e3988b6cb9c4a9808e8d984.tar.xz
[GlobalISel] Lower byte-swap operations
Diffstat (limited to 'backend/lib/Target/RISCV')
-rw-r--r--backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
index b87eaca..0dd99da 100644
--- a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
+++ b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
@@ -363,7 +363,11 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &Subtarget) {
.customFor(HasZbb, {{S32, S32}})
.lower();
getActionDefinitionsBuilder(opcode(GenericOpcode::G_BITREVERSE)).maxScalar(0, S64).lower();
- getActionDefinitionsBuilder(opcode(GenericOpcode::G_BSWAP)).maxScalar(0, S64).lower();
+ auto &ByteSwapActions = getActionDefinitionsBuilder(opcode(GenericOpcode::G_BSWAP));
+ if (HasZbb)
+ ByteSwapActions.legalFor({S64}).clampScalar(0, S64, S64);
+ else
+ ByteSwapActions.maxScalar(0, S64).lower();
getActionDefinitionsBuilder(
{opcode(GenericOpcode::G_CTLZ), opcode(GenericOpcode::G_CTTZ), opcode(GenericOpcode::G_CTLS)})