[PATCH] Tweak tree-ssa-math-opts.c to solve PR target/102117

Jeff Law jeffreyalaw@gmail.com
Sat Nov 20 16:34:36 GMT 2021



On 11/20/2021 6:14 AM, Roger Sayle wrote:
> This patch resolves PR target/102117 on s390.  The problem is that
> some of the functionality of GCC's RTL expanders is no longer triggered
> following the transition to tree SSA form.  On s390, unsigned widening
> multiplications are converted into WIDEN_MULT_EXPR (aka w* in tree dumps),
> but signed widening multiplies are left in their original form, which
> alas doesn't benefit from the clever logic in expand_widening_mult.
>
> The fix is to teach convert_mult_to_widen, that RTL expansion can
> synthesize a signed widening multiplication if the target provides
> a suitable umul_widen_optab.
>
> On s390-linux-gnu with -O2 -m64, the code in the bugzilla PR currently
> generates:
>
> imul128:
>          stmg    %r12,%r13,96(%r15)
>          srag    %r0,%r4,63
>          srag    %r1,%r3,63
>          lgr     %r13,%r3
>          mlgr    %r12,%r4
>          msgr    %r1,%r4
>          msgr    %r0,%r3
>          lgr     %r4,%r12
>          agr     %r1,%r0
>          lgr     %r5,%r13
>          agr     %r4,%r1
>          stmg    %r4,%r5,0(%r2)
>          lmg     %r12,%r13,96(%r15)
>          br      %r14
>
> but with this patch should now generate the more efficient:
>
> imul128:
>          lgr     %r1,%r3
>          mlgr    %r0,%r4
>          srag    %r5,%r3,63
>          ngr     %r5,%r4
>          srag    %r4,%r4,63
>          sgr     %r0,%r5
>          ngr     %r4,%r3
>          sgr     %r0,%r4
>          stmg    %r0,%r1,0(%r2)
>          br      %r14
>
>
> This patch has been tested s390/z13 with a bootstrap and a regression
> test (thanks to Robin Dapp), and on x86_64-pc-linux-gnu with a bootstrap
> and regression test just to confirm that there are no unanticipated
> side-effects.
>
> Ok for mainline?
>
>
> 2021-11-20  Roger Sayle  <roger@nextmovesoftware.com>
>              Robin Dapp  <rdapp@linux.ibm.com>
>
> gcc/ChangeLog
> 	PR target/102117
> 	* tree-ssa-math-opts.c (convert_mult_to_widen): Recognize
> 	signed WIDEN_MULT_EXPR if the target supports umul_widen_optab.
>
> gcc/testsuite/ChangeLog
> 	PR target/102117
> 	* gcc.target/s390/mul-wide.c: New test case.
> 	* gcc.target/s390/umul-wide.c: New test case.
OK
jeff



More information about the Gcc-patches mailing list