Skip to content

Missed Optimization: Fold Trunc/ZExt around Unsigned Min #167096

@Leo0506

Description

@Leo0506
define i16 @src(i32 %arg1, i32 %arg2, ptr %arg0) {
  %v0 = udiv i32 %arg2, %arg1
  %v1 = load i16, ptr %arg0, align 2
  %v2 = and i32 %v0, 65535
  %v3 = zext i16 %v1 to i32
  %v4 = call i32 @llvm.umin.i32(i32 %v2, i32 %v3)
  %v5 = trunc nuw i32 %v4 to i16
  ret i16 %v5
}

define i16 @tgt(i32 %arg1, i32 %arg2, ptr %arg0) {
  %v0 = udiv i32 %arg2, %arg1
  %v1 = load i16, ptr %arg0, align 2
  %v2 = trunc i32 %v0 to i16
  %v3 = call i16 @llvm.umin.i16(i16 %v2, i16 %v1)
  ret i16 %v3
}

alive2: https://alive2.llvm.org/ce/z/CyiY6W
godbolt: https://godbolt.org/z/sffPM5f8K
Pattern found in: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/linux/optimized/tcp.ll

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions