Hi Jeff, Indeed, Luis should have been using "umulti". The other attributes are not required. I'll fix it before pushing to the mainline.
Thanks, Claudiu On Fri, Apr 18, 2025 at 8:41 PM Jeff Law <jeffreya...@gmail.com> wrote: > > > > On 3/18/25 10:22 AM, Luis Silva wrote: > > This patch introduces two new instruction patterns: > > > > `*mulsi3_cmp0`: This pattern performs a multiplication > > and sets the CC_Z register based on the result, while > > also storing the result of the multiplication in a > > general-purpose register. > > > > `*mulsi3_cmp0_noout`: This pattern performs a > > multiplication and sets the CC_Z register based on the > > result without storing the result in a general-purpose > > register. > > > > These patterns are optimized to generate code using the `mpy.f` > > instruction, specifically used where the result is compared to zero. > > > > In addition, the previous commutative multiplication implementation > > was removed. It incorrectly took into account the negative flag, > > which is wrong. This new implementation only considers the zero > > flag. > > > > A test case has been added to verify the correctness of these > > changes. > > > > gcc/ChangeLog: > > > > * config/arc/arc.cc (arc_select_cc_mode): Handle multiplication > > results compared against zero, selecting CC_Zmode. > > * config/arc/arc.md (*mulsi3_cmp0): New define_insn. > > (*mulsi3_cmp0_noout): New define_insn. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/arc/mult-cmp0.c: New test. > So I'm not well versed in the ARC port, but a couple questions. > > First your new patterns use a new type "mpy". Do you want/need to add > that to the pipeline descriptions? It would seem advisable to do so. > > Do the new patterns need to set "cond" and "predicable" attributes? > > Jeff