aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-11-16 17:40:53 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-11-16 17:40:53 +0100
commit7f46559c8282d7e6e9b2b8d67cd390b7775ce1bc (patch)
tree18fdd26fe5f827be547e939f8a46e4d4a026c073 /gcc
parentfe5d12969fba426ff15afad597a3668bb18804ea (diff)
downloadgcc-7f46559c8282d7e6e9b2b8d67cd390b7775ce1bc.zip
gcc-7f46559c8282d7e6e9b2b8d67cd390b7775ce1bc.tar.gz
gcc-7f46559c8282d7e6e9b2b8d67cd390b7775ce1bc.tar.bz2
re PR middle-end/88032 (ICE in operand_subword_force, at emit-rtl.c:1793)
PR middle-end/88032 * optabs.c (expand_binop): For op0_mode use GET_MODE (op0), unless it is VOIDmode, in which case use int_mode. Similarly for op1_mode. From-SVN: r266216
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/optabs.c8
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a717107..a6881d2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/88032
+ * optabs.c (expand_binop): For op0_mode use GET_MODE (op0), unless it
+ is VOIDmode, in which case use int_mode. Similarly for op1_mode.
+
2018-11-16 Eric Botcazou <ebotcazou@adacore.com>
* tree-switch-conversion.h (switch_decision_tree::emit_case_nodes): Add
diff --git a/gcc/optabs.c b/gcc/optabs.c
index c7d1f22..130b118 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -1377,8 +1377,12 @@ expand_binop (machine_mode mode, optab binoptab, rtx op0, rtx op1,
start_sequence ();
/* Do the actual arithmetic. */
- enum machine_mode op0_mode = CONSTANT_P (op0) ? int_mode : VOIDmode;
- enum machine_mode op1_mode = CONSTANT_P (op1) ? int_mode : VOIDmode;
+ enum machine_mode op0_mode = GET_MODE (op0);
+ enum machine_mode op1_mode = GET_MODE (op1);
+ if (op0_mode == VOIDmode)
+ op0_mode = int_mode;
+ if (op1_mode == VOIDmode)
+ op1_mode = int_mode;
for (i = 0; i < GET_MODE_BITSIZE (int_mode) / BITS_PER_WORD; i++)
{
rtx target_piece = operand_subword (target, i, 1, int_mode);