forked from OSchip/llvm-project
[Power9] Remove the PPCISD::XXREVERSE as it has completely the same semantics of ISD::BSWAP
The custom node PPCISD::XXREVERSE has completely the same semantics of generic node ISD::BSWAP. We need to clean up it as we have the combine rules for bswap in the base class, while nothing for xxreverse. Differential Revision: https://reviews.llvm.org/D70657
This commit is contained in:
parent
3654ed21ee
commit
6d5e35e89d
|
@ -1348,7 +1348,6 @@ const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||
case PPCISD::VPERM: return "PPCISD::VPERM";
|
||||
case PPCISD::XXSPLT: return "PPCISD::XXSPLT";
|
||||
case PPCISD::VECINSERT: return "PPCISD::VECINSERT";
|
||||
case PPCISD::XXREVERSE: return "PPCISD::XXREVERSE";
|
||||
case PPCISD::XXPERMDI: return "PPCISD::XXPERMDI";
|
||||
case PPCISD::VECSHL: return "PPCISD::VECSHL";
|
||||
case PPCISD::CMPB: return "PPCISD::CMPB";
|
||||
|
@ -9188,19 +9187,19 @@ SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
|
|||
if (Subtarget.hasP9Vector()) {
|
||||
if (PPC::isXXBRHShuffleMask(SVOp)) {
|
||||
SDValue Conv = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, V1);
|
||||
SDValue ReveHWord = DAG.getNode(PPCISD::XXREVERSE, dl, MVT::v8i16, Conv);
|
||||
SDValue ReveHWord = DAG.getNode(ISD::BSWAP, dl, MVT::v8i16, Conv);
|
||||
return DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, ReveHWord);
|
||||
} else if (PPC::isXXBRWShuffleMask(SVOp)) {
|
||||
SDValue Conv = DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, V1);
|
||||
SDValue ReveWord = DAG.getNode(PPCISD::XXREVERSE, dl, MVT::v4i32, Conv);
|
||||
SDValue ReveWord = DAG.getNode(ISD::BSWAP, dl, MVT::v4i32, Conv);
|
||||
return DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, ReveWord);
|
||||
} else if (PPC::isXXBRDShuffleMask(SVOp)) {
|
||||
SDValue Conv = DAG.getNode(ISD::BITCAST, dl, MVT::v2i64, V1);
|
||||
SDValue ReveDWord = DAG.getNode(PPCISD::XXREVERSE, dl, MVT::v2i64, Conv);
|
||||
SDValue ReveDWord = DAG.getNode(ISD::BSWAP, dl, MVT::v2i64, Conv);
|
||||
return DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, ReveDWord);
|
||||
} else if (PPC::isXXBRQShuffleMask(SVOp)) {
|
||||
SDValue Conv = DAG.getNode(ISD::BITCAST, dl, MVT::v1i128, V1);
|
||||
SDValue ReveQWord = DAG.getNode(PPCISD::XXREVERSE, dl, MVT::v1i128, Conv);
|
||||
SDValue ReveQWord = DAG.getNode(ISD::BSWAP, dl, MVT::v1i128, Conv);
|
||||
return DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, ReveQWord);
|
||||
}
|
||||
}
|
||||
|
@ -9761,7 +9760,7 @@ SDValue PPCTargetLowering::LowerBSWAP(SDValue Op, SelectionDAG &DAG) const {
|
|||
Op = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v2i64, Op.getOperand(0),
|
||||
Op.getOperand(0));
|
||||
// XXBRD
|
||||
Op = DAG.getNode(PPCISD::XXREVERSE, dl, MVT::v2i64, Op);
|
||||
Op = DAG.getNode(ISD::BSWAP, dl, MVT::v2i64, Op);
|
||||
// MFVSRD
|
||||
int VectorIndex = 0;
|
||||
if (Subtarget.isLittleEndian())
|
||||
|
|
|
@ -102,10 +102,6 @@ namespace llvm {
|
|||
///
|
||||
VECINSERT,
|
||||
|
||||
/// XXREVERSE - The PPC VSX reverse instruction
|
||||
///
|
||||
XXREVERSE,
|
||||
|
||||
/// VECSHL - The PPC vector shift left instruction
|
||||
///
|
||||
VECSHL,
|
||||
|
|
|
@ -61,10 +61,6 @@ def SDT_PPCVecInsert : SDTypeProfile<1, 3, [ SDTCisVec<0>,
|
|||
SDTCisVec<1>, SDTCisVec<2>, SDTCisInt<3>
|
||||
]>;
|
||||
|
||||
def SDT_PPCVecReverse: SDTypeProfile<1, 1, [ SDTCisVec<0>,
|
||||
SDTCisVec<1>
|
||||
]>;
|
||||
|
||||
def SDT_PPCxxpermdi: SDTypeProfile<1, 3, [ SDTCisVec<0>,
|
||||
SDTCisVec<1>, SDTCisVec<2>, SDTCisInt<3>
|
||||
]>;
|
||||
|
@ -204,7 +200,6 @@ def PPCaddiDtprelL : SDNode<"PPCISD::ADDI_DTPREL_L", SDTIntBinOp>;
|
|||
def PPCvperm : SDNode<"PPCISD::VPERM", SDT_PPCvperm, []>;
|
||||
def PPCxxsplt : SDNode<"PPCISD::XXSPLT", SDT_PPCVecSplat, []>;
|
||||
def PPCvecinsert : SDNode<"PPCISD::VECINSERT", SDT_PPCVecInsert, []>;
|
||||
def PPCxxreverse : SDNode<"PPCISD::XXREVERSE", SDT_PPCVecReverse, []>;
|
||||
def PPCxxpermdi : SDNode<"PPCISD::XXPERMDI", SDT_PPCxxpermdi, []>;
|
||||
def PPCvecshl : SDNode<"PPCISD::VECSHL", SDT_PPCVecShift, []>;
|
||||
|
||||
|
|
|
@ -2955,16 +2955,8 @@ let AddedComplexity = 400, Predicates = [HasP9Vector] in {
|
|||
def XXBRQ : XX2_XT6_XO5_XB6<60, 31, 475, "xxbrq", vsrc, []>;
|
||||
|
||||
// Vector Reverse
|
||||
def : Pat<(v8i16 (PPCxxreverse v8i16 :$A)),
|
||||
(v8i16 (COPY_TO_REGCLASS (XXBRH (COPY_TO_REGCLASS $A, VSRC)), VRRC))>;
|
||||
def : Pat<(v8i16 (bswap v8i16 :$A)),
|
||||
(v8i16 (COPY_TO_REGCLASS (XXBRH (COPY_TO_REGCLASS $A, VSRC)), VRRC))>;
|
||||
def : Pat<(v4i32 (PPCxxreverse v4i32 :$A)),
|
||||
(v4i32 (XXBRW $A))>;
|
||||
def : Pat<(v2i64 (PPCxxreverse v2i64 :$A)),
|
||||
(v2i64 (XXBRD $A))>;
|
||||
def : Pat<(v1i128 (PPCxxreverse v1i128 :$A)),
|
||||
(v1i128 (COPY_TO_REGCLASS (XXBRQ (COPY_TO_REGCLASS $A, VSRC)), VRRC))>;
|
||||
def : Pat<(v1i128 (bswap v1i128 :$A)),
|
||||
(v1i128 (COPY_TO_REGCLASS (XXBRQ (COPY_TO_REGCLASS $A, VSRC)), VRRC))>;
|
||||
|
||||
|
|
|
@ -57,9 +57,8 @@ entry:
|
|||
define <4 x i32> @testXXBRD_With_LogicalOp(<4 x i32> %a, <4 x i32> %b) {
|
||||
; CHECK-LABEL: testXXBRD_With_LogicalOp:
|
||||
; CHECK: # %bb.0: # %entry
|
||||
; CHECK-NEXT: xxbrw 0, 34
|
||||
; CHECK-NEXT: xxbrw 1, 35
|
||||
; CHECK-NEXT: xxland 34, 0, 1
|
||||
; CHECK-NEXT: xxland 0, 34, 35
|
||||
; CHECK-NEXT: xxbrw 34, 0
|
||||
; CHECK-NEXT: blr
|
||||
entry:
|
||||
%0 = bitcast <4 x i32> %a to <16 x i8>
|
||||
|
|
Loading…
Reference in New Issue