Issue 152788
Summary Missed optimization: max(max(x<<C1, x+C2), C3) -> max(x<<C1, C3) when C2 <= (2^C1-1)/2^C1*C3
Labels new issue
Assignees
Reporter zxt5
    ```
define i64 @src(i32 %0) {
  %v0 = add nsw i32 %0, 1
  %v1 = shl nsw i32 %0, 1
  %v2 = tail call i32 @llvm.smax.i32(i32 %v1, i32 %v0)
  %v3 = tail call i32 @llvm.smax.i32(i32 %v2, i32 4)
  %v4 = zext nneg i32 %v3 to i64
  %v5 = shl nuw nsw i64 %v4, 3
  ret i64 %v5
}

define i64 @tgt(i32 %0) {
  %v1 = shl nsw i32 %0, 1
 %v2 = tail call i32 @llvm.smax.i32(i32 %v1, i32 4)
  %v3 = zext nneg i32 %v2 to i64
  %v4 = shl nuw nsw i64 %v3, 3
  ret i64 %v4
}
```

alive2: https://alive2.llvm.org/ce/z/BbxTr2
godbolt: https://godbolt.org/z/d557qnq49

Found this pattern in https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/opencv/optimized/repeated_ptr_field.ll

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to