From 913e07ea5acf2148e3748b45ddfe3fac3b2d051c Mon Sep 17 00:00:00 2001 From: Naveen Saini Date: Fri, 27 Aug 2021 10:56:57 +0800 Subject: [PATCH 2/2] This patch is a fix for #2111 It ensures that shuffle is lowered for this particular case correctly. Upstream-Status: Backport [https://github.com/llvm/llvm-project/commit/9ab99f773fec7da4183495a3fdc655a797d3bea2] Signed-off-by: Naveen Saini --- llvm/lib/Target/X86/X86ISelLowering.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 6b816c710f98..3121b0e818ac 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -43192,9 +43192,10 @@ static SDValue combineHorizOpWithShuffle(SDNode *N, SelectionDAG &DAG, ShuffleVectorSDNode::commuteMask(ShuffleMask1); } if ((Op00 == Op10) && (Op01 == Op11)) { - SmallVector ShuffleMask; - ShuffleMask.append(ShuffleMask0.begin(), ShuffleMask0.end()); - ShuffleMask.append(ShuffleMask1.begin(), ShuffleMask1.end()); + const int Map[4] = {0, 2, 1, 3}; + SmallVector ShuffleMask( + {Map[ShuffleMask0[0]], Map[ShuffleMask1[0]], Map[ShuffleMask0[1]], + Map[ShuffleMask1[1]]}); SDLoc DL(N); MVT ShufVT = VT.isFloatingPoint() ? MVT::v4f64 : MVT::v4i64; SDValue Res = DAG.getNode(Opcode, DL, VT, Op00, Op01); -- 2.17.1