[llvm] [InstCombine] Fold `(X & Mask) == 0 ? TC : FC -> TC binop (X & Mask)` (PR #100437)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 25 07:00:10 PDT 2024


dtcxzyw wrote:

> Variant with shift has a code size regression in lencod:
> 
> ```
>     CMakeFiles/lencod.dir/weighted_prediction.c.o 	17KiB 	18KiB (+5.50%)
> ```

```
Files ./artifacts/binaries/a5773f25cc5e6535f712dce9eb2c2205_bc/seg54.ll and ./artifacts/binaries/5f896abe9e087207adecb86d4abb8b82_bc/seg54.ll differ
in function estimate_weighting_factor_P_slice:
  in block %21 / %22:
    >   %23 = phi i64 [ %21, %17 ], [ 2, %8 ], [ 2, %1 ]
    <   %22 = phi i64 [ %20, %17 ], [ 2, %8 ], [ 2, %1 ]
  in block %17 / %17:
    >   %19 = shl nuw nsw i32 2, %18
    >   %20 = add nuw nsw i32 %19, 2
    >   %21 = zext nneg i32 %20 to i64
    <   %19 = icmp eq i32 %18, 0
    <   %20 = select i1 %19, i64 4, i64 6

in function estimate_weighting_factor_B_slice:
  in block %21 / %22:
    >   %23 = phi i64 [ %21, %17 ], [ 2, %8 ], [ 2, %0 ]
    <   %22 = phi i64 [ %20, %17 ], [ 2, %8 ], [ 2, %0 ]
  in block %17 / %17:
    >   %19 = shl nuw nsw i32 2, %18
    >   %20 = add nuw nsw i32 %19, 2
    >   %21 = zext nneg i32 %20 to i64
    <   %19 = icmp eq i32 %18, 0
    <   %20 = select i1 %19, i64 4, i64 6

in function test_wp_P_slice:
  in block %21 / %22:
    >   %23 = phi i64 [ %21, %17 ], [ 2, %8 ], [ 2, %1 ]
    <   %22 = phi i64 [ %20, %17 ], [ 2, %8 ], [ 2, %1 ]
  in block %17 / %17:
    >   %19 = shl nuw nsw i32 2, %18
    >   %20 = add nuw nsw i32 %19, 2
    >   %21 = zext nneg i32 %20 to i64
    <   %19 = icmp eq i32 %18, 0
    <   %20 = select i1 %19, i64 4, i64 6

in function test_wp_B_slice:
  in block %23 / %24:
    >   %25 = phi i64 [ %23, %19 ], [ 2, %10 ], [ 2, %1 ]
    <   %24 = phi i64 [ %22, %19 ], [ 2, %10 ], [ 2, %1 ]
  in block %19 / %19:
    >   %21 = shl nuw nsw i32 2, %20
    >   %22 = add nuw nsw i32 %21, 2
    >   %23 = zext nneg i32 %22 to i64
    <   %21 = icmp eq i32 %20, 0
    <   %22 = select i1 %21, i64 4, i64 6

```

https://github.com/llvm/llvm-project/pull/100437


More information about the llvm-commits mailing list