re PR target/82981 (unnecessary __multi3 call for mips64r6 linux kernel)
authorJakub Jelinek <jakub@redhat.com>
Wed, 15 Nov 2017 09:01:42 +0000 (10:01 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 15 Nov 2017 09:01:42 +0000 (10:01 +0100)
commit0b99f25372431148e637b98f02e7cbe03feef7f9
tree63d30374d3cf9bdc2b71e04db9d013a8c15c009c
parent65205a116a8d1c076f0709d92acad2453caa1efb
re PR target/82981 (unnecessary __multi3 call for mips64r6 linux kernel)

PR target/82981
* internal-fn.c: Include gimple-ssa.h, tree-phinodes.h and
ssa-iterators.h.
(can_widen_mult_without_libcall): New function.
(expand_mul_overflow): If only checking unsigned mul overflow,
not result, and can do efficiently MULT_HIGHPART_EXPR, emit that.
Don't use WIDEN_MULT_EXPR if it would involve a libcall, unless
no other way works.  Add MULT_HIGHPART_EXPR + MULT_EXPR support.
(expand_DIVMOD): Formatting fix.
* expmed.h (expand_mult): Add NO_LIBCALL argument.
* expmed.c (expand_mult): Likewise.  Use OPTAB_WIDEN rather
than OPTAB_LIB_WIDEN if NO_LIBCALL is true, and allow it to fail.

* gcc.target/mips/pr82981.c: New test.

From-SVN: r254758
gcc/ChangeLog
gcc/expmed.c
gcc/expmed.h
gcc/internal-fn.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/pr82981.c [new file with mode: 0644]