[PATCH] D120216: [DAG] try to convert multiply to shift via demanded bits

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 20 17:57:38 PST 2022


spatel marked 2 inline comments as done.
spatel added inline comments.


================
Comment at: llvm/test/CodeGen/PowerPC/urem-seteq-illegal-types.ll:261
 ; PPC64LE-NEXT:    sldi 3, 3, 1
-; PPC64LE-NEXT:    add 3, 6, 3
+; PPC64LE-NEXT:    sub 3, 6, 3
 ; PPC64LE-NEXT:    add 3, 3, 4
----------------
xbolva00 wrote:
> also interesting change
Yes - this is the same test as for Mips above here.

After legalization, we have:

```
       t56: i64 = mul t2, Constant:i64<2>
      t58: i64 = add t55, t56
...
    t59: i64 = add t58, t57
  t65: i64 = and t59, Constant:i64<3>

```

So we are shifting a single meaningful demanded bit to bit 1, and I think the code is correct as shown here:
https://alive2.llvm.org/ce/z/cqL3SC

Notice that the `sub` becomes an `add` in IR with instcombine. 

I fixed a similar gap in DAG folding with:
a2963d871ee5
...but we need yet another demanded bits fold or some other sub->add fold.

I suspect it's a rare case, and it didn't seem harmful in these tests at least, so I figured it could be another follow-up if needed.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120216/new/

https://reviews.llvm.org/D120216



More information about the llvm-commits mailing list