[PATCH] D120287: [RISCV] Add isel patterns for masked RISCVISD::FMA_VL with RISCVISD::FNEG_VL.
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 24 10:00:35 PST 2022
craig.topper added a comment.
In D120287#3342552 <https://reviews.llvm.org/D120287#3342552>, @frasercrmck wrote:
> In D120287#3342330 <https://reviews.llvm.org/D120287#3342330>, @rogfer01 wrote:
>
>> It seems a bit hacky at first and I guess it works because those patterns are kind of skipped during matching, right?
>>
>>> If we don't think srcvalue is ok, we'll need to change to true_mask or use C++ code to match.
>>
>> Does it make sense to have `riscv_fmsub_vl`, `riscv_fnmsub_vl`, ... nodes that we combine earlier using `riscv_fma_vl` and others? I understand this would make the patterns straightforward but maybe it is not feasible.
>
> I was thinking we'd (have to) go down the `srcvalue` route, personally. It should be correct and I can't think of a reason we'd want more control over this kind of thing while pattern matching.
>
> I fear that adding more custom combined nodes would get unwieldy as they don't scale particularly well: we'd probably want corresponding ones for integer madd/macc, for narrowing operations, etc. They may inhibit theoretical optimizations we can perform on generic VP nodes. But the key word is "theoretical" and so that's just a gut reaction. We do have custom nodes for all of the widening operations, so it's feasible.
We are already using `srcvalue` to skip VL for splats nodes.
The other option I can think of is to create a ComplexPattern that takes the Root nodes as an input. The ComplexPattern matching code could find the mask on the root node and make sure it matches the operand the ComplexPattern is used for.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D120287/new/
https://reviews.llvm.org/D120287
More information about the llvm-commits
mailing list