Skip to content

Missed Optimization: simplify smax/smin+icmp eq to unsigned bound check #157315

@Leo0506

Description

@Leo0506
define i1 @src(i32 %arg0, i32 %arg1) {
  %v0 = add i32 %arg1, -60
  %v1 = add i32 %v0, %arg0
  %v2 = tail call i32 @llvm.smax.i32(i32 %v1, i32 -155)
  %v3 = tail call i32 @llvm.smin.i32(i32 %v2, i32 100)
  %v4 = icmp eq i32 %v1, %v3
  ret i1 %v4
}


define i1 @tgt(i32 %arg0, i32 %arg1) {
  %sum = add i32 %arg0, 95
  %1 = add i32 %sum, %arg1
  %result = icmp ult i32 %1, 256
  ret i1 %result
}

godbolt: https://godbolt.org/z/a8TK65GEj
alive2: https://alive2.llvm.org/ce/z/MPkRit

Pattern found in: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/ffmpeg/optimized/aacdec.ll

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions