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
|
@ -1,3 +1,5 @@
|
||||||
|
2017-02-06 Georg-Johann Lay <avr@gjlay.de>
|
||||||
|
|
||||||
2017-02-06 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
2017-02-06 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||||
|
|
||||||
* config/s390/predicates.md ("larl_operand"): Use macros from hwint.h.
|
* config/s390/predicates.md ("larl_operand"): Use macros from hwint.h.
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "tree-pass.h"
|
#include "tree-pass.h"
|
||||||
#include "print-rtl.h"
|
#include "print-rtl.h"
|
||||||
|
#include "rtl-iter.h"
|
||||||
|
|
||||||
/* This file should be included last. */
|
/* This file should be included last. */
|
||||||
#include "target-def.h"
|
#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.
|
/* 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:
|
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 \
|
#define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P \
|
||||||
avr_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;
|
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>
|
2017-02-05 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
PR tree-ssa/79347
|
PR tree-ssa/79347
|
||||||
|
|
|
@ -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…
Reference in New Issue