Skip to content

Commit 0a9c6be

Browse files
committed
[RISCV][GISel] Support G_CTTZ/CTLZ with Zbb.
1 parent 9645267 commit 0a9c6be

File tree

5 files changed

+1865
-1469
lines changed

5 files changed

+1865
-1469
lines changed

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,19 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
104104
else
105105
BSWAPActions.maxScalar(0, sXLen).lower();
106106

107-
getActionDefinitionsBuilder(
108-
{G_CTLZ, G_CTLZ_ZERO_UNDEF, G_CTTZ, G_CTTZ_ZERO_UNDEF})
109-
.maxScalar(0, sXLen)
110-
.scalarSameSizeAs(1, 0)
111-
.lower();
107+
auto &CountZerosActions = getActionDefinitionsBuilder({G_CTLZ, G_CTTZ});
108+
auto &CountZerosUndefActions =
109+
getActionDefinitionsBuilder({G_CTLZ_ZERO_UNDEF, G_CTTZ_ZERO_UNDEF});
110+
if (ST.hasStdExtZbb()) {
111+
CountZerosActions.legalFor({{s32, s32}, {sXLen, sXLen}})
112+
.clampScalar(0, s32, sXLen)
113+
.widenScalarToNextPow2(0)
114+
.scalarSameSizeAs(1, 0);
115+
} else {
116+
CountZerosActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0).lower();
117+
CountZerosUndefActions.maxScalar(0, sXLen).scalarSameSizeAs(1, 0);
118+
}
119+
CountZerosUndefActions.lower();
112120

113121
auto &CTPOPActions = getActionDefinitionsBuilder(G_CTPOP);
114122
if (ST.hasStdExtZbb()) {

0 commit comments

Comments
 (0)