Skip to content

Missed Optimization: Convert float clamp pattern to llvm.minnum/llvm.maxnum #157486

@Leo0506

Description

@Leo0506
define float @src(float %arg0) {
  %v0 = fcmp nsz ogt float %arg0, 0.000000e+00
  %v1 = select nsz i1 %v0, float %arg0, float 0.000000e+00
  %v2 = fcmp nsz ogt float %v1, 0x3FE96C8000000000
  %v3 = select nsz i1 %v2, float 0x3FE96C8000000000, float %v1
  ret float %v3
}

define float @tgt(float %arg0) {
  %v0 = call float @llvm.maxnum.f32(float %arg0, float 0.000000e+00)
  %v1 = call float @llvm.minnum.f32(float %v0, float 0x3FE96C8000000000)
  ret float %v1
}

godbolt: https://godbolt.org/z/f8h4e9rhd
alive2: https://alive2.llvm.org/ce/z/gRp79d

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

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions