[llvm-branch-commits] [llvm] release/22.x: [AArch64] Fix `shufflevector` miscompilation on `aarch64_be` (#193076) (PR #193744)
Folkert de Vries via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Apr 23 14:07:49 PDT 2026
================
@@ -24487,6 +24460,33 @@ static SDValue performUzpCombine(SDNode *N, SelectionDAG &DAG,
if (!DAG.getDataLayout().isLittleEndian())
return SDValue();
+ // uzp1(x, undef) -> concat(truncate(x), undef)
+ if (Op1.isUndef()) {
+ EVT BCVT = MVT::Other, HalfVT = MVT::Other;
+ switch (ResVT.getSimpleVT().SimpleTy) {
+ default:
+ break;
+ case MVT::v16i8:
+ BCVT = MVT::v8i16;
+ HalfVT = MVT::v8i8;
+ break;
+ case MVT::v8i16:
+ BCVT = MVT::v4i32;
+ HalfVT = MVT::v4i16;
+ break;
+ case MVT::v4i32:
+ BCVT = MVT::v2i64;
+ HalfVT = MVT::v2i32;
+ break;
+ }
+ if (BCVT != MVT::Other) {
+ SDValue BC = DAG.getBitcast(BCVT, Op0);
+ SDValue Trunc = DAG.getNode(ISD::TRUNCATE, DL, HalfVT, BC);
+ return DAG.getNode(ISD::CONCAT_VECTORS, DL, ResVT, Trunc,
+ DAG.getPOISON(HalfVT));
----------------
folkertdev wrote:
Ah, makes sense. Fixed.
https://github.com/llvm/llvm-project/pull/193744
More information about the llvm-branch-commits
mailing list