mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
[Hexagon] Set ctlz_zero_undef/cttz_zero_undef to Expand so LegalizeDAG will convert them to ctlz/cttz. Remove the now unneccessary isel patterns. NFC
llvm-svn: 267266
This commit is contained in:
parent
0c0d9161b6
commit
aa283acffa
@ -1868,10 +1868,14 @@ HexagonTargetLowering::HexagonTargetLowering(const TargetMachine &TM,
|
||||
setOperationAction(ISD::CTLZ, MVT::i16, Promote);
|
||||
setOperationAction(ISD::CTTZ, MVT::i8, Promote);
|
||||
setOperationAction(ISD::CTTZ, MVT::i16, Promote);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i8, Promote);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i16, Promote);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i8, Promote);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i16, Promote);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i8, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i16, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i64, Expand);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i8, Expand);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i16, Expand);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i32, Expand);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i64, Expand);
|
||||
|
||||
// In V5, popcount can count # of 1s in i64 but returns i32.
|
||||
// On V4 it will be expanded (set later).
|
||||
|
@ -4137,22 +4137,16 @@ def S2_clbnorm : T_COUNT_LEADING_32<"normamt", 0b000, 0b111>;
|
||||
// Count leading zeros.
|
||||
def: Pat<(i32 (ctlz I32:$Rs)), (S2_cl0 I32:$Rs)>;
|
||||
def: Pat<(i32 (trunc (ctlz I64:$Rss))), (S2_cl0p I64:$Rss)>;
|
||||
def: Pat<(i32 (ctlz_zero_undef I32:$Rs)), (S2_cl0 I32:$Rs)>;
|
||||
def: Pat<(i32 (trunc (ctlz_zero_undef I64:$Rss))), (S2_cl0p I64:$Rss)>;
|
||||
|
||||
// Count trailing zeros: 32-bit.
|
||||
def: Pat<(i32 (cttz I32:$Rs)), (S2_ct0 I32:$Rs)>;
|
||||
def: Pat<(i32 (cttz_zero_undef I32:$Rs)), (S2_ct0 I32:$Rs)>;
|
||||
|
||||
// Count leading ones.
|
||||
def: Pat<(i32 (ctlz (not I32:$Rs))), (S2_cl1 I32:$Rs)>;
|
||||
def: Pat<(i32 (trunc (ctlz (not I64:$Rss)))), (S2_cl1p I64:$Rss)>;
|
||||
def: Pat<(i32 (ctlz_zero_undef (not I32:$Rs))), (S2_cl1 I32:$Rs)>;
|
||||
def: Pat<(i32 (trunc (ctlz_zero_undef (not I64:$Rss)))), (S2_cl1p I64:$Rss)>;
|
||||
|
||||
// Count trailing ones: 32-bit.
|
||||
def: Pat<(i32 (cttz (not I32:$Rs))), (S2_ct1 I32:$Rs)>;
|
||||
def: Pat<(i32 (cttz_zero_undef (not I32:$Rs))), (S2_ct1 I32:$Rs)>;
|
||||
|
||||
// The 64-bit counts leading/trailing are defined in HexagonInstrInfoV4.td.
|
||||
|
||||
|
@ -2318,21 +2318,15 @@ def S4_clbpnorm : T_COUNT_LEADING_64<"normamt", 0b011, 0b000>;
|
||||
|
||||
// Count trailing zeros: 64-bit.
|
||||
def: Pat<(i32 (trunc (cttz I64:$Rss))), (S2_ct0p I64:$Rss)>;
|
||||
def: Pat<(i32 (trunc (cttz_zero_undef I64:$Rss))), (S2_ct0p I64:$Rss)>;
|
||||
|
||||
// Count trailing ones: 64-bit.
|
||||
def: Pat<(i32 (trunc (cttz (not I64:$Rss)))), (S2_ct1p I64:$Rss)>;
|
||||
def: Pat<(i32 (trunc (cttz_zero_undef (not I64:$Rss)))), (S2_ct1p I64:$Rss)>;
|
||||
|
||||
// Define leading/trailing patterns that require zero-extensions to 64 bits.
|
||||
def: Pat<(i64 (ctlz I64:$Rss)), (Zext64 (S2_cl0p I64:$Rss))>;
|
||||
def: Pat<(i64 (ctlz_zero_undef I64:$Rss)), (Zext64 (S2_cl0p I64:$Rss))>;
|
||||
def: Pat<(i64 (cttz I64:$Rss)), (Zext64 (S2_ct0p I64:$Rss))>;
|
||||
def: Pat<(i64 (cttz_zero_undef I64:$Rss)), (Zext64 (S2_ct0p I64:$Rss))>;
|
||||
def: Pat<(i64 (ctlz (not I64:$Rss))), (Zext64 (S2_cl1p I64:$Rss))>;
|
||||
def: Pat<(i64 (ctlz_zero_undef (not I64:$Rss))), (Zext64 (S2_cl1p I64:$Rss))>;
|
||||
def: Pat<(i64 (cttz (not I64:$Rss))), (Zext64 (S2_ct1p I64:$Rss))>;
|
||||
def: Pat<(i64 (cttz_zero_undef (not I64:$Rss))), (Zext64 (S2_ct1p I64:$Rss))>;
|
||||
|
||||
|
||||
let hasSideEffects = 0, hasNewValue = 1 in
|
||||
|
Loading…
Reference in New Issue
Block a user