Issue |
147683
|
Summary |
[DAG] Fold trunc(abdu(x,y)) and trunc(abds(x,y)) if they have sufficient leading zero/sign bits
|
Labels |
good first issue,
llvm:SelectionDAG
|
Assignees |
|
Reporter |
RKSimon
|
https://zig.godbolt.org/z/f3ac4Moxr
```
SelectionDAG has 12 nodes:
t0: ch,glue = EntryToken
t2: v4i16,ch = CopyFromReg t0, Register:v4i16 %0
t5: v4i32 = zero_extend t2
t4: v4i16,ch = CopyFromReg t0, Register:v4i16 %1
t6: v4i32 = zero_extend t4
t13: v4i32 = abdu t5, t6
t9: v4i16 = truncate t13
t11: ch,glue = CopyToReg t0, Register:v4i16 $d0, t9
t12: ch = AArch64ISD::RET_GLUE t11, Register:v4i16 $d0, t11:1
```
If a ABD node has sufficient leading zero/sign bits then it should still work in a truncated type - it doesn't have to be from a zext/sext_extend node specifically so computeKnownBits/ComputeNumSignBits should probably be used.
- [ ] Create alive2 links to prove when abd patterns can be safely truncated
- [ ] Add test coverage (using aarch64 intrinsics is probably easiest as that will always start from ISD::ABDU/S nodes)
- [ ] Add suitable folds in DAGCombiner::visitTRUNCATE - including legality checks
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs