mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Mark all variable shifts needing customizing
- Prepare moving logic from DAG combining into DAG lowering. There's no functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177477 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4b7ab12d93
commit
5c5f1908f0
@ -1053,23 +1053,16 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
||||
setOperationAction(ISD::SRA, MVT::v8i16, Custom);
|
||||
setOperationAction(ISD::SRA, MVT::v16i8, Custom);
|
||||
|
||||
if (Subtarget->hasInt256()) {
|
||||
setOperationAction(ISD::SRL, MVT::v2i64, Legal);
|
||||
setOperationAction(ISD::SRL, MVT::v4i32, Legal);
|
||||
// In the customized shift lowering, the legal cases in AVX2 will be
|
||||
// recognized.
|
||||
setOperationAction(ISD::SRL, MVT::v2i64, Custom);
|
||||
setOperationAction(ISD::SRL, MVT::v4i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SHL, MVT::v2i64, Legal);
|
||||
setOperationAction(ISD::SHL, MVT::v4i32, Legal);
|
||||
setOperationAction(ISD::SHL, MVT::v2i64, Custom);
|
||||
setOperationAction(ISD::SHL, MVT::v4i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SRA, MVT::v4i32, Legal);
|
||||
} else {
|
||||
setOperationAction(ISD::SRL, MVT::v2i64, Custom);
|
||||
setOperationAction(ISD::SRL, MVT::v4i32, Custom);
|
||||
setOperationAction(ISD::SRA, MVT::v4i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SHL, MVT::v2i64, Custom);
|
||||
setOperationAction(ISD::SHL, MVT::v4i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SRA, MVT::v4i32, Custom);
|
||||
}
|
||||
setOperationAction(ISD::SDIV, MVT::v8i16, Custom);
|
||||
setOperationAction(ISD::SDIV, MVT::v4i32, Custom);
|
||||
}
|
||||
@ -1186,14 +1179,6 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
||||
|
||||
setOperationAction(ISD::VSELECT, MVT::v32i8, Legal);
|
||||
|
||||
setOperationAction(ISD::SRL, MVT::v4i64, Legal);
|
||||
setOperationAction(ISD::SRL, MVT::v8i32, Legal);
|
||||
|
||||
setOperationAction(ISD::SHL, MVT::v4i64, Legal);
|
||||
setOperationAction(ISD::SHL, MVT::v8i32, Legal);
|
||||
|
||||
setOperationAction(ISD::SRA, MVT::v8i32, Legal);
|
||||
|
||||
setOperationAction(ISD::SDIV, MVT::v8i32, Custom);
|
||||
} else {
|
||||
setOperationAction(ISD::ADD, MVT::v4i64, Custom);
|
||||
@ -1210,16 +1195,18 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
||||
setOperationAction(ISD::MUL, MVT::v8i32, Custom);
|
||||
setOperationAction(ISD::MUL, MVT::v16i16, Custom);
|
||||
// Don't lower v32i8 because there is no 128-bit byte mul
|
||||
|
||||
setOperationAction(ISD::SRL, MVT::v4i64, Custom);
|
||||
setOperationAction(ISD::SRL, MVT::v8i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SHL, MVT::v4i64, Custom);
|
||||
setOperationAction(ISD::SHL, MVT::v8i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SRA, MVT::v8i32, Custom);
|
||||
}
|
||||
|
||||
// In the customized shift lowering, the legal cases in AVX2 will be
|
||||
// recognized.
|
||||
setOperationAction(ISD::SRL, MVT::v4i64, Custom);
|
||||
setOperationAction(ISD::SRL, MVT::v8i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SHL, MVT::v4i64, Custom);
|
||||
setOperationAction(ISD::SHL, MVT::v8i32, Custom);
|
||||
|
||||
setOperationAction(ISD::SRA, MVT::v8i32, Custom);
|
||||
|
||||
// Custom lower several nodes for 256-bit types.
|
||||
for (int i = MVT::FIRST_VECTOR_VALUETYPE;
|
||||
i <= MVT::LAST_VECTOR_VALUETYPE; ++i) {
|
||||
@ -11626,6 +11613,20 @@ SDValue X86TargetLowering::LowerShift(SDValue Op, SelectionDAG &DAG) const {
|
||||
if (V.getNode())
|
||||
return V;
|
||||
|
||||
// AVX2 has VPSLLV/VPSRAV/VPSRLV.
|
||||
if (Subtarget->hasInt256()) {
|
||||
if (Op.getOpcode() == ISD::SRL &&
|
||||
(VT == MVT::v2i64 || VT == MVT::v4i32 ||
|
||||
VT == MVT::v4i64 || VT == MVT::v8i32))
|
||||
return Op;
|
||||
if (Op.getOpcode() == ISD::SHL &&
|
||||
(VT == MVT::v2i64 || VT == MVT::v4i32 ||
|
||||
VT == MVT::v4i64 || VT == MVT::v8i32))
|
||||
return Op;
|
||||
if (Op.getOpcode() == ISD::SRA && (VT == MVT::v4i32 || VT == MVT::v8i32))
|
||||
return Op;
|
||||
}
|
||||
|
||||
// Lower SHL with variable shift amount.
|
||||
if (VT == MVT::v4i32 && Op->getOpcode() == ISD::SHL) {
|
||||
Op = DAG.getNode(ISD::SHL, dl, VT, Amt, DAG.getConstant(23, VT));
|
||||
|
Loading…
Reference in New Issue
Block a user