[all-commits] [llvm/llvm-project] 547669: [VectorCombine] Apply InstSimplify in scalarizeOpO...

XChy via All-commits all-commits at lists.llvm.org
Sun Aug 17 22:56:01 PDT 2025


  Branch: refs/heads/release/21.x
  Home:   https://github.com/llvm/llvm-project
  Commit: 54766969b28bdd53211a3f14819095180a9fd6bc
      https://github.com/llvm/llvm-project/commit/54766969b28bdd53211a3f14819095180a9fd6bc
  Author: XChy <xxs_chy at outlook.com>
  Date:   2025-08-18 (Mon, 18 Aug 2025)

  Changed paths:
    M llvm/lib/Transforms/Vectorize/VectorCombine.cpp
    M llvm/test/Transforms/VectorCombine/X86/intrinsic-scalarize.ll
    M llvm/test/Transforms/VectorCombine/binop-scalarize.ll
    M llvm/test/Transforms/VectorCombine/intrinsic-scalarize.ll

  Log Message:
  -----------
  [VectorCombine] Apply InstSimplify in scalarizeOpOrCmp to avoid infinite loop (#153069)

Fixes #153012

As we tolerate unfoldable constant expressions in `scalarizeOpOrCmp`, we
may fold
```llvm
define void @bug(ptr %ptr1, ptr %ptr2, i64 %idx) #0 {
entry:
  %158 = insertelement <2 x i64> <i64 5, i64 ptrtoint (ptr @val to i64)>, i64 %idx, i32 0
  %159 = or disjoint <2 x i64> splat (i64 2), %158
  store <2 x i64> %159, ptr %ptr2
  ret void
}
```

to

```llvm
define void @bug(ptr %ptr1, ptr %ptr2, i64 %idx) {
entry:
  %.scalar = or disjoint i64 2, %idx
  %0 = or <2 x i64> splat (i64 2), <i64 5, i64 ptrtoint (ptr @val to i64)>
  %1 = insertelement <2 x i64> %0, i64 %.scalar, i64 0
  store <2 x i64> %1, ptr %ptr2, align 16
  ret void
}
```
And it would be folded back in `foldInsExtBinop`, resulting in an
infinite loop.

This patch forces scalarization iff InstSimplify can fold the constant
expression.

(cherry picked from commit 3a4a60deffdf5bbe622326b2813583acc37cccce)



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list