Skip to content

Commit b5ff75b

Browse files
committed
Fix: seperated legalIf for G_CTTZ_ZERO_UNDEF and G_ANYEXT
1 parent b9127bf commit b5ff75b

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
4545
bool UseX87 = !Subtarget.useSoftFloat() && Subtarget.hasX87();
4646
bool HasPOPCNT = Subtarget.hasPOPCNT();
4747
bool HasLZCNT = Subtarget.hasLZCNT();
48+
bool HasBMI = Subtarget.hasBMI();
4849

4950
const LLT p0 = LLT::pointer(0, TM.getPointerSizeInBits(0));
5051
const LLT s1 = LLT::scalar(1);
@@ -264,15 +265,19 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
264265
.scalarSameSizeAs(0, 1);
265266

266267
// count trailing zeros
267-
getActionDefinitionsBuilder({G_CTTZ_ZERO_UNDEF, G_CTTZ})
268-
.legalIf([=](const LegalityQuery &Query) -> bool {
269-
return (Query.Opcode == G_CTTZ_ZERO_UNDEF || Subtarget.hasBMI()) &&
270-
(typePairInSet(0, 1, {{s16, s16}, {s32, s32}})(Query) ||
271-
(Is64Bit && typePairInSet(0, 1, {{s64, s64}})(Query)));
272-
})
268+
getActionDefinitionsBuilder(G_CTTZ_ZERO_UNDEF)
269+
.legalFor({{s16, s16}, {s32, s32}})
270+
.legalFor(Is64Bit, {{s64, s64}})
273271
.widenScalarToNextPow2(1, /*Min=*/16)
274272
.clampScalar(1, s16, sMaxScalar)
275273
.scalarSameSizeAs(0, 1);
274+
275+
getActionDefinitionsBuilder(G_CTTZ)
276+
.legalFor(HasBMI, {{s16, s16}, {s32, s32}})
277+
.legalFor(HasBMI && Is64Bit, {{s64, s64}})
278+
.widenScalarToNextPow2(1, /*Min=*/16)
279+
.clampScalar(1, s16, sMaxScalar)
280+
.scalarSameSizeAs(0, 1);
276281

277282
// control flow
278283
getActionDefinitionsBuilder(G_PHI)
@@ -379,12 +384,18 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
379384
}
380385

381386
// sext, zext, and anyext
382-
getActionDefinitionsBuilder({G_SEXT, G_ZEXT, G_ANYEXT})
383-
.legalIf([=](const LegalityQuery &Query) {
384-
return typeInSet(0, {s8, s16, s32})(Query) ||
385-
(Query.Opcode == G_ANYEXT && Query.Types[0] == s128) ||
386-
(Is64Bit && Query.Types[0] == s64);
387-
})
387+
getActionDefinitionsBuilder(G_ANYEXT)
388+
.legalFor({s8, s16, s32, s128})
389+
.legalFor(Is64Bit, {s64})
390+
.widenScalarToNextPow2(0, /*Min=*/8)
391+
.clampScalar(0, s8, sMaxScalar)
392+
.widenScalarToNextPow2(1, /*Min=*/8)
393+
.clampScalar(1, s8, sMaxScalar)
394+
.scalarize(0);
395+
396+
getActionDefinitionsBuilder({G_SEXT, G_ZEXT})
397+
.legalFor({s8, s16, s32})
398+
.legalFor(Is64Bit, {s64})
388399
.widenScalarToNextPow2(0, /*Min=*/8)
389400
.clampScalar(0, s8, sMaxScalar)
390401
.widenScalarToNextPow2(1, /*Min=*/8)

0 commit comments

Comments
 (0)