[AVX512] Remove separate instruction and patterns for lowering ctlz_zero_undef. Change the operation for CTLZ_ZERO_UNDEF to Expand so SelectionDAG will convert them to CTLZ before lowering.
llvm-svn: 256477
This commit is contained in:
parent
4b1808d8e7
commit
f3ed5c115c
|
|
@ -1525,17 +1525,17 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
if (Subtarget->hasCDI()) {
|
||||
setOperationAction(ISD::CTLZ, MVT::v8i64, Legal);
|
||||
setOperationAction(ISD::CTLZ, MVT::v16i32, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i64, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v16i32, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i64, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v16i32, Expand);
|
||||
|
||||
setOperationAction(ISD::CTLZ, MVT::v8i16, Custom);
|
||||
setOperationAction(ISD::CTLZ, MVT::v16i8, Custom);
|
||||
setOperationAction(ISD::CTLZ, MVT::v16i16, Custom);
|
||||
setOperationAction(ISD::CTLZ, MVT::v32i8, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i16, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v16i8, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v16i16, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v32i8, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i16, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v16i8, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v16i16, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v32i8, Expand);
|
||||
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::v8i64, Custom);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::v16i32, Custom);
|
||||
|
|
@ -1545,10 +1545,10 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
setOperationAction(ISD::CTLZ, MVT::v8i32, Legal);
|
||||
setOperationAction(ISD::CTLZ, MVT::v2i64, Legal);
|
||||
setOperationAction(ISD::CTLZ, MVT::v4i32, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i64, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i32, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v2i64, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i32, Legal);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i64, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i32, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v2i64, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i32, Expand);
|
||||
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::v4i64, Custom);
|
||||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::v8i32, Custom);
|
||||
|
|
@ -1559,10 +1559,10 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
setOperationAction(ISD::CTLZ, MVT::v8i32, Custom);
|
||||
setOperationAction(ISD::CTLZ, MVT::v2i64, Custom);
|
||||
setOperationAction(ISD::CTLZ, MVT::v4i32, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i64, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i32, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v2i64, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i32, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i64, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v8i32, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v2i64, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v4i32, Expand);
|
||||
}
|
||||
} // Subtarget->hasCDI()
|
||||
|
||||
|
|
@ -1682,8 +1682,8 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
if (Subtarget->hasCDI()) {
|
||||
setOperationAction(ISD::CTLZ, MVT::v32i16, Custom);
|
||||
setOperationAction(ISD::CTLZ, MVT::v64i8, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v32i16, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v64i8, Custom);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v32i16, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::v64i8, Expand);
|
||||
}
|
||||
|
||||
for (auto VT : { MVT::v64i8, MVT::v32i16 }) {
|
||||
|
|
@ -18001,9 +18001,6 @@ static SDValue LowerCTLZ_ZERO_UNDEF(SDValue Op, const X86Subtarget *Subtarget,
|
|||
unsigned NumBits = VT.getSizeInBits();
|
||||
SDLoc dl(Op);
|
||||
|
||||
if (VT.isVector() && Subtarget->hasAVX512())
|
||||
return LowerVectorCTLZ_AVX512(Op, DAG);
|
||||
|
||||
Op = Op.getOperand(0);
|
||||
if (VT == MVT::i8) {
|
||||
// Zero extend to i32 since there is not an i8 bsr.
|
||||
|
|
|
|||
|
|
@ -7184,9 +7184,6 @@ def : Pat<(xor
|
|||
multiclass avx512_ctlz<bits<8> opc, string OpcodeStr, Predicate prd>{
|
||||
|
||||
defm NAME : avx512_unary_rm_vl_dq<opc, opc, OpcodeStr, ctlz, prd>;
|
||||
let isCodeGenOnly = 1 in
|
||||
defm NAME#_UNDEF : avx512_unary_rm_vl_dq<opc, opc, OpcodeStr,
|
||||
ctlz_zero_undef, prd>;
|
||||
}
|
||||
|
||||
defm VPLZCNT : avx512_ctlz<0x44, "vplzcnt", HasCDI>;
|
||||
|
|
|
|||
Loading…
Reference in New Issue