[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