Issue 143957
Summary Missed optimization: fold (icmp eq a, c1) | (icmp ult f(a), c2) to icmp ult f(a), c2
Labels new issue
Assignees
Reporter Cancelll
    ```llvm
define i1 @src(i64 %arg0) {
  %1 = lshr i64 %arg0, 32
  %2 = trunc nuw i64 %1 to i32
  %3 = xor i32 %2, 55296
  %4 = add i32 %3, -1114112
  %5 = icmp ult i32 %4, -1112064
  %6 = icmp eq i64 %1, 1114112
  %7 = or i1 %6, %5
  ret i1 %7
}

define i1 @tgt(i64 %arg0) {
  %1 = lshr i64 %arg0, 32
  %2 = trunc nuw i64 %1 to i32
  %3 = xor i32 %2, 55296
  %4 = add i32 %3, -1114112
  %5 = icmp ult i32 %4, -1112064
  ret i1 %5
}
```
alive2: https://alive2.llvm.org/ce/z/wc2PXT
godbolt: https://godbolt.org/z/o8nqYz577

Occurrences in llvm-opt-benchmarks:
typst-rs/optimized/18cop7j4xops9f9h.ll
%1 = lshr i64 %arg0, %c0  ->  %.sroa.510.0.extract.shift = lshr i64 %.fr39, 32
%2 = trunc nuw i64 %1 to i32  ->  %.sroa.510.0.extract.trunc = trunc nuw i64 %.sroa.510.0.extract.shift to i32
%3 = xor i32 %2, %c1  ->  %130 = xor i32 %.sroa.510.0.extract.trunc, 55296
%4 = add i32 %3, %c2  ->  %131 = add i32 %130, -1114112
%5 = icmp ult i32 %4, %c3  ->  %132 = icmp ult i32 %131, -1112064
%6 = icmp eq i64 %1, %c4  ->  %133 = icmp eq i64 %.sroa.510.0.extract.shift, 1114112
%7 = or i1 %6, %5  ->  %or.cond38 = or i1 %132, %133

typst-rs/optimized/1mrwywpkq81cby93.ll
%1 = lshr i64 %arg0, %c0  ->  %.sroa.514.0.extract.shift = lshr i64 %142, 32
%2 = trunc nuw i64 %1 to i32  ->  %.sroa.514.0.extract.trunc = trunc nuw i64 %.sroa.514.0.extract.shift to i32
%3 = xor i32 %2, %c1  ->  %145 = xor i32 %.sroa.514.0.extract.trunc, 55296
%4 = add i32 %3, %c2  ->  %146 = add i32 %145, -1114112
%5 = icmp ult i32 %4, %c3  ->  %147 = icmp ult i32 %146, -1112064
%6 = icmp eq i64 %1, %c4  ->  %.not27 = icmp eq i64 %.sroa.514.0.extract.shift, 1114112
%7 = or i1 %6, %5  ->  %.not = or i1 %.not27, %147

regex-rs/optimized/1rguw48xrsv49k4z.ll
%1 = lshr i64 %arg0, %c0  ->  %.sroa.6.0.extract.shift.i.i = lshr i64 %754, 32
%2 = trunc nuw i64 %1 to i32  ->  %.sroa.6.0.extract.trunc.i.i = trunc nuw i64 %.sroa.6.0.extract.shift.i.i to i32
%3 = xor i32 %2, %c1  ->  %756 = xor i32 %.sroa.6.0.extract.trunc.i.i, 55296
%4 = add i32 %3, %c2  ->  %757 = add i32 %756, -1114112
%5 = icmp ult i32 %4, %c3  ->  %758 = icmp ult i32 %757, -1112064
%6 = icmp eq i64 %1, %c4  ->  %759 = icmp eq i64 %.sroa.6.0.extract.shift.i.i, 1114112
%7 = or i1 %6, %5  ->  %760 = or i1 %759, %758

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

Reply via email to