llvm/llvm-project

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

Open

#141,479 创建于 2025年5月26日

在 GitHub 查看
 (7 评论) (0 反应) (1 负责人)C++ (10,782 fork)batch import
good first issuellvm:instcombinemissed-optimization

仓库指标

Star
 (26,378 star)
PR 合并指标
 (平均合并 1天 2小时) (30 天内合并 1,000 个 PR)

描述

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
}

贡献者指南