Skip to content

Missed Optimization: Failure to simplify ((x << 2) + 31) & -4 to (x << 2) + 28 #167183

@Leo0506

Description

@Leo0506
define i32 @src(ptr %arg0) {
  %v0 = load i32, ptr %arg0, align 4
  %v1 = shl i32 %v0, 2
  %v2 = add i32 %v1, 31
  %v3 = and i32 %v2, -4
  ret i32 %v3
}


define i32 @tgt(ptr %arg0) {
  %v0 = load i32, ptr %arg0, align 4
  %v1 = shl i32 %v0, 2
  %v2 = add i32 %v1, 28
  ret i32 %v2
}

alive2: https://alive2.llvm.org/ce/z/a-NFt_
godbolt: https://godbolt.org/z/3jb6xKr8n
Pattern found in: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/linux/optimized/xfrm_user.ll

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions