aboutsummaryrefslogtreecommitdiff
path: root/gcc/internal-fn.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-11-21 08:49:14 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-11-21 08:49:14 +0100
commit644f013227facdd53e313b2cb60745cedfe0c6c8 (patch)
tree46c8f4d8d3cf8e3a1adc2878d0aa870e6bbbf709 /gcc/internal-fn.c
parentb76602dcf22ea0dd89560142d7a4d00c928f5abe (diff)
downloadgcc-644f013227facdd53e313b2cb60745cedfe0c6c8.zip
gcc-644f013227facdd53e313b2cb60745cedfe0c6c8.tar.gz
gcc-644f013227facdd53e313b2cb60745cedfe0c6c8.tar.bz2
re PR target/82981 (unnecessary __multi3 call for mips64r6 linux kernel)
PR target/82981 * internal-fn.c (expand_mul_overflow): Use OPTAB_WIDEN instead of OPTAB_DIRECT in calls to expand_simple_binop. From-SVN: r254986
Diffstat (limited to 'gcc/internal-fn.c')
-rw-r--r--gcc/internal-fn.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
index 1c00792..139dcff 100644
--- a/gcc/internal-fn.c
+++ b/gcc/internal-fn.c
@@ -1760,7 +1760,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
tem = convert_modes (mode, hmode, lopart, 1);
tem = expand_shift (LSHIFT_EXPR, mode, tem, hprec, NULL_RTX, 1);
tem = expand_simple_binop (mode, MINUS, loxhi, tem, NULL_RTX,
- 1, OPTAB_DIRECT);
+ 1, OPTAB_WIDEN);
emit_move_insn (loxhi, tem);
emit_label (after_hipart_neg);
@@ -1774,7 +1774,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
profile_probability::even ());
tem = expand_simple_binop (mode, MINUS, loxhi, larger, NULL_RTX,
- 1, OPTAB_DIRECT);
+ 1, OPTAB_WIDEN);
emit_move_insn (loxhi, tem);
emit_label (after_lopart_neg);
@@ -1783,7 +1783,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
/* loxhi += (uns) lo0xlo1 >> (bitsize / 2); */
tem = expand_shift (RSHIFT_EXPR, mode, lo0xlo1, hprec, NULL_RTX, 1);
tem = expand_simple_binop (mode, PLUS, loxhi, tem, NULL_RTX,
- 1, OPTAB_DIRECT);
+ 1, OPTAB_WIDEN);
emit_move_insn (loxhi, tem);
/* if (loxhi >> (bitsize / 2)
@@ -1810,7 +1810,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
convert_modes (hmode, mode, lo0xlo1, 1), 1);
tem = expand_simple_binop (mode, IOR, loxhishifted, tem, res,
- 1, OPTAB_DIRECT);
+ 1, OPTAB_WIDEN);
if (tem != res)
emit_move_insn (res, tem);
emit_jump (done_label);
@@ -1835,7 +1835,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
if (!op0_medium_p)
{
tem = expand_simple_binop (hmode, PLUS, hipart0, const1_rtx,
- NULL_RTX, 1, OPTAB_DIRECT);
+ NULL_RTX, 1, OPTAB_WIDEN);
do_compare_rtx_and_jump (tem, const1_rtx, GTU, true, hmode,
NULL_RTX, NULL, do_error,
profile_probability::very_unlikely ());
@@ -1844,7 +1844,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
if (!op1_medium_p)
{
tem = expand_simple_binop (hmode, PLUS, hipart1, const1_rtx,
- NULL_RTX, 1, OPTAB_DIRECT);
+ NULL_RTX, 1, OPTAB_WIDEN);
do_compare_rtx_and_jump (tem, const1_rtx, GTU, true, hmode,
NULL_RTX, NULL, do_error,
profile_probability::very_unlikely ());