Skip to content

Commit c196033

Browse files
committed
Add back i32 pattern since the instruction is also usable in 32-bit mode
Created using spr 1.3.5
1 parent 6e86581 commit c196033

File tree

3 files changed

+420
-169
lines changed

3 files changed

+420
-169
lines changed

llvm/lib/Target/Sparc/SparcISelLowering.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1753,9 +1753,7 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,
17531753

17541754
setOperationAction(ISD::CTPOP, MVT::i64,
17551755
Subtarget->usePopc() ? Legal : Expand);
1756-
setOperationAction(ISD::CTTZ , MVT::i64, Expand);
1757-
setOperationAction(ISD::CTLZ, MVT::i64,
1758-
Subtarget->isVIS3() ? Legal : Expand);
1756+
setOperationAction(ISD::CTTZ, MVT::i64, Expand);
17591757
setOperationAction(ISD::BSWAP, MVT::i64, Expand);
17601758
setOperationAction(ISD::ROTL , MVT::i64, Expand);
17611759
setOperationAction(ISD::ROTR , MVT::i64, Expand);
@@ -1816,9 +1814,7 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,
18161814
setOperationAction(ISD::FSINCOS, MVT::f32, Expand);
18171815
setOperationAction(ISD::FREM , MVT::f32, Expand);
18181816
setOperationAction(ISD::FMA , MVT::f32, Expand);
1819-
setOperationAction(ISD::CTTZ , MVT::i32, Expand);
1820-
setOperationAction(ISD::CTLZ, MVT::i32,
1821-
Subtarget->isVIS3() ? Promote : Expand);
1817+
setOperationAction(ISD::CTTZ, MVT::i32, Expand);
18221818
setOperationAction(ISD::ROTL , MVT::i32, Expand);
18231819
setOperationAction(ISD::ROTR , MVT::i32, Expand);
18241820
setOperationAction(ISD::BSWAP, MVT::i32, Expand);
@@ -1990,12 +1986,18 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,
19901986
setOperationAction(ISD::READCYCLECOUNTER, MVT::i64, Custom);
19911987

19921988
if (Subtarget->isVIS3()) {
1993-
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, Promote);
1989+
setOperationAction(ISD::CTLZ, MVT::i32, Legal);
1990+
setOperationAction(ISD::CTLZ, MVT::i64, Legal);
1991+
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, Legal);
19941992
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i64, Legal);
19951993
} else if (Subtarget->usePopc()) {
1994+
setOperationAction(ISD::CTLZ, MVT::i32, Expand);
1995+
setOperationAction(ISD::CTLZ, MVT::i64, Expand);
19961996
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, Expand);
19971997
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i64, Expand);
19981998
} else {
1999+
setOperationAction(ISD::CTLZ, MVT::i32, Expand);
2000+
setOperationAction(ISD::CTLZ, MVT::i64, Expand);
19992001
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32,
20002002
Subtarget->is64Bit() ? Promote : LibCall);
20012003
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i64, LibCall);

llvm/lib/Target/Sparc/SparcInstrVIS.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,4 +297,11 @@ def : Pat<(i64 (adde i64:$lhs, i64:$rhs)), (ADDXCCC $lhs, $rhs)>;
297297

298298
def : Pat<(i64 (ctlz i64:$src)), (LZCNT $src)>;
299299
def : Pat<(i64 (ctlz_zero_undef i64:$src)), (LZCNT $src)>;
300+
// 32-bit LZCNT.
301+
// The zero extension will leave us with 32 extra leading zeros,
302+
// so we need to compensate for it.
303+
// FIXME remove this when the codegen supports using 64-bit values directly
304+
// in V8+ mode.
305+
def : Pat<(i32 (ctlz i32:$src)), (ADDri (LZCNT (SRLri $src, 0)), (i32 -32))>;
306+
def : Pat<(i32 (ctlz_zero_undef i32:$src)), (ADDri (LZCNT (SRLri $src, 0)), (i32 -32))>;
300307
} // Predicates = [HasVIS3]

0 commit comments

Comments
 (0)