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

XChy via All-commits all-commits at lists.llvm.org
Fri Aug 15 11:38:26 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3a4a60deffdf5bbe622326b2813583acc37cccce
      https://github.com/llvm/llvm-project/commit/3a4a60deffdf5bbe622326b2813583acc37cccce
  Author: XChy <xxs_chy at outlook.com>
  Date:   2025-08-15 (Fri, 15 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.



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