[llvm] bae04a3 - [X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - remove unnecessary BITCASTs.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 21 10:41:54 PST 2021
Author: Simon Pilgrim
Date: 2021-02-21T18:40:32Z
New Revision: bae04a3e2d69d474e47ce1a23109efa0036e8cf7
URL: https://github.com/llvm/llvm-project/commit/bae04a3e2d69d474e47ce1a23109efa0036e8cf7
DIFF: https://github.com/llvm/llvm-project/commit/bae04a3e2d69d474e47ce1a23109efa0036e8cf7.diff
LOG: [X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - remove unnecessary BITCASTs.
In conjunction with the 'vperm2x128(bitcast(x),bitcast(y),c) -> bitcast(vperm2x128(x,y,c))' fold in combineTargetShuffle, this should remove any unnecessary bitcasts around vperm2x128 lane shuffles.
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 3ae706e5a139..9741db412329 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -36944,12 +36944,11 @@ static SDValue canonicalizeLaneShuffleWithRepeatedOps(SDValue V,
switch (SrcOpc0) {
case X86ISD::MOVDDUP: {
- SDValue LHS = DAG.getBitcast(VT, Src0.getOperand(0));
- SDValue RHS =
- DAG.getBitcast(VT, Src1.isUndef() ? Src1 : Src1.getOperand(0));
+ SDValue LHS = Src0.getOperand(0);
+ SDValue RHS = Src1.isUndef() ? Src1 : Src1.getOperand(0);
SDValue Res =
- DAG.getNode(X86ISD::VPERM2X128, DL, VT, LHS, RHS, V.getOperand(2));
- Res = DAG.getNode(SrcOpc0, DL, SrcVT0, DAG.getBitcast(SrcVT0, Res));
+ DAG.getNode(X86ISD::VPERM2X128, DL, SrcVT0, LHS, RHS, V.getOperand(2));
+ Res = DAG.getNode(SrcOpc0, DL, SrcVT0, Res);
return DAG.getBitcast(VT, Res);
}
case X86ISD::VPERMILPI:
@@ -36965,13 +36964,11 @@ static SDValue canonicalizeLaneShuffleWithRepeatedOps(SDValue V,
case X86ISD::VSRAI:
case X86ISD::PSHUFD:
if (Src1.isUndef() || Src0.getOperand(1) == Src1.getOperand(1)) {
- SDValue LHS = DAG.getBitcast(VT, Src0.getOperand(0));
- SDValue RHS =
- DAG.getBitcast(VT, Src1.isUndef() ? Src1 : Src1.getOperand(0));
- SDValue Res =
- DAG.getNode(X86ISD::VPERM2X128, DL, VT, LHS, RHS, V.getOperand(2));
- Res = DAG.getNode(SrcOpc0, DL, SrcVT0, DAG.getBitcast(SrcVT0, Res),
- Src0.getOperand(1));
+ SDValue LHS = Src0.getOperand(0);
+ SDValue RHS = Src1.isUndef() ? Src1 : Src1.getOperand(0);
+ SDValue Res = DAG.getNode(X86ISD::VPERM2X128, DL, SrcVT0, LHS, RHS,
+ V.getOperand(2));
+ Res = DAG.getNode(SrcOpc0, DL, SrcVT0, Res, Src0.getOperand(1));
return DAG.getBitcast(VT, Res);
}
break;
More information about the llvm-commits
mailing list