re PR rtl-optimization/78883 ([avr] ICE triggered by change to combine.c (r243578))
gcc/ PR target/78883 * config/avr/avr.c (rtl-iter.h): Include it. (TARGET_LEGITIMATE_COMBINED_INSN): New hook define... (avr_legitimate_combined_insn): ...and implementation. gcc/testsuite/ PR target/78883 * gcc.c-torture/compile/pr78883.c: New test. From-SVN: r245209
This commit is contained in:
parent
406fde6e17
commit
0898c74df4
4 changed files with 51 additions and 0 deletions
|
@ -1,3 +1,5 @@
|
|||
2017-02-06 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
2017-02-06 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||
|
||||
* config/s390/predicates.md ("larl_operand"): Use macros from hwint.h.
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include "context.h"
|
||||
#include "tree-pass.h"
|
||||
#include "print-rtl.h"
|
||||
#include "rtl-iter.h"
|
||||
|
||||
/* This file should be included last. */
|
||||
#include "target-def.h"
|
||||
|
@ -12823,6 +12824,34 @@ avr_convert_to_type (tree type, tree expr)
|
|||
}
|
||||
|
||||
|
||||
/* Implement `TARGET_LEGITIMATE_COMBINED_INSN'. */
|
||||
|
||||
/* PR78883: Filter out paradoxical SUBREGs of MEM which are not handled
|
||||
properly by following passes. As INSN_SCHEDULING is off and hence
|
||||
general_operand accepts such expressions, ditch them now. */
|
||||
|
||||
static bool
|
||||
avr_legitimate_combined_insn (rtx_insn *insn)
|
||||
{
|
||||
subrtx_iterator::array_type array;
|
||||
|
||||
FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST)
|
||||
{
|
||||
const_rtx op = *iter;
|
||||
|
||||
if (SUBREG_P (op)
|
||||
&& MEM_P (SUBREG_REG (op))
|
||||
&& (GET_MODE_SIZE (GET_MODE (op))
|
||||
> GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* PR63633: The middle-end might come up with hard regs as input operands.
|
||||
|
||||
RMASK is a bit mask representing a subset of hard registers R0...R31:
|
||||
|
@ -14364,6 +14393,9 @@ avr_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *arg,
|
|||
#define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P \
|
||||
avr_use_by_pieces_infrastructure_p
|
||||
|
||||
#undef TARGET_LEGITIMATE_COMBINED_INSN
|
||||
#define TARGET_LEGITIMATE_COMBINED_INSN avr_legitimate_combined_insn
|
||||
|
||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-02-06 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR target/78883
|
||||
* gcc.c-torture/compile/pr78883.c: New test.
|
||||
|
||||
2017-02-05 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR tree-ssa/79347
|
||||
|
|
12
gcc/testsuite/gcc.c-torture/compile/pr78883.c
Normal file
12
gcc/testsuite/gcc.c-torture/compile/pr78883.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
int foo (int *p)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (p[i] & 1)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
Loading…
Add table
Reference in a new issue