llvm/llvm-project

Missed optimization: (%1 <= ~%0) && (%0 > ~%1) ==> false

Open

#141 479 ouverte le 26 mai 2025

Voir sur GitHub
 (7 commentaires) (0 réactions) (1 assigné)C++ (10 782 forks)batch import
good first issuellvm:instcombinemissed-optimization

Métriques du dépôt

Stars
 (26 378 stars)
Métriques de merge PR
 (Merge moyen 1j 2h) (1 000 PRs mergées en 30 j)

Description

The following reduced IR is derived from https://github.com/Cisco-Talos/clamav/blob/6c508107355bca613ffe7b0d2a4deb7636940a87/libclamav/pe.c#L2765

Godbolt: https://godbolt.org/z/d441Gcjdr alive2 proof: https://alive2.llvm.org/ce/z/7BfGRs

define i1 @src(i32 %0, i32 %1) local_unnamed_addr #0 {
common.ret:
  %2 = xor i32 %0, -1
  %3 = icmp ule i32 %1, %2
  %4 = xor i32 %1, -1
  %5 = icmp ugt i32 %0, %4
  %common.ret.op = and i1 %3, %5
  ret i1 %common.ret.op
}

expected:

define noundef i1 @tgt(i32 %0, i32 %1) local_unnamed_addr #0 {
common.ret:
  ret i1 false
}

opt-trunk -O3 generates:

define i1 @src(i32 %0, i32 %1) local_unnamed_addr #0 {
common.ret:
  %2 = xor i32 %0, -1
  %3 = icmp ule i32 %1, %2
  %4 = xor i32 %1, -1
  %5 = icmp ugt i32 %0, %4
  %common.ret.op = and i1 %3, %5
  ret i1 %common.ret.op
}

Guide contributeur