[llvm] [InstCombine] Fold (X * 0.0) * constant => X * 0.0 #85241 (PR #92512)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 28 08:31:54 PDT 2026


dtcxzyw wrote:

The following correctness issue was found by [llvm-hackme](https://github.com/dtcxzyw/llvm-hackme).

<!-- llvm-hackme-state: bug_found -->
<!-- llvm-hackme-baseline: a9a58990edcb9db16420b9e35429b9049523b4d7 -->
<!-- llvm-hackme-head-sha: eddddb55ff61b449d7119e339825825a5c000ae9 -->
<!-- llvm-hackme-patch-sha256: 7b3692ba88a01ce8723cfebf9d1dd162c1e0a735447ab8c3fd89ef9e2202bebe -->
<!-- llvm-hackme-kind: miscompilation -->

This comment is generated by an automated correctness checking service designed to help identify critical correctness bugs (opt crashes or Alive2 miscompilations) and improve PR review efficiency under limited reviewer bandwidth.

The reproducer was generated by LLM.

This bug is a regression introduced by this PR. It does not reproduce on the baseline commit.

## Reproducer

**Kind**: miscompilation

**IR Reproducer**:
```llvm
; RUN: opt -passes=instcombine<no-verify-fixpoint> -S
define float @f(float %x) {
  %prod1 = fmul float %x, 0.000000e+00
  %prod2 = fmul ninf float %prod1, 2.000000e+00
  ret float %prod2
}
```

**Alive2 Counterexample**:
```
----------------------------------------
define float @f(float %x) {
#0:
  %prod1 = fmul float %x, 0e+00
  %prod2 = fmul ninf float %prod1, 2e+00
  ret float %prod2
}
=>
define float @f(float %x) {
#0:
  %prod2 = fmul ninf float %x, 0e+00
  ret float %prod2
}
Transformation doesn't verify!

ERROR: Target is more poisonous than source

Example:
float %x = #xff800000 (-oo)

Source:
float %prod1 = #xffc00003 (QNaN)
float %prod2 = #xffc00003 (QNaN)

Target:
float %prod2 = poison
Source value: #xffc00003 (QNaN)
Target value: poison

Summary:
  0 correct transformations
  1 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```

**Opt Output**:
```llvm
; ModuleID = '/tmp/tmp9tazbh94.ll'
source_filename = "/tmp/tmp9tazbh94.ll"

define float @f(float %x) {
  %prod2 = fmul ninf float %x, 0.000000e+00
  ret float %prod2
}
```


**Baseline Revision**: `a9a58990edcb9db16420b9e35429b9049523b4d7`
**PR Head SHA**: `eddddb55ff61b449d7119e339825825a5c000ae9`
**Patch SHA256**: `7b3692ba88a01ce8723cfebf9d1dd162c1e0a735447ab8c3fd89ef9e2202bebe`


https://github.com/llvm/llvm-project/pull/92512


More information about the llvm-commits mailing list