re PR middle-end/82556 (internal compiler error in curr_insn_transform, at lra-constraints.c:4307)
2017-10-18 Vladimir Makarov <vmakarov@redhat.com> PR middle-end/82556 * lra-constraints.c (curr_insn_transform): Use non-input operand instead of output one for matched reload. 2017-10-18 Vladimir Makarov <vmakarov@redhat.com> PR middle-end/82556 * gcc.target/i386/pr82556.c: New. From-SVN: r253862
This commit is contained in:
parent
957f0d8faf
commit
57d69a633c
4 changed files with 44 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2017-10-18 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR middle-end/82556
|
||||
* lra-constraints.c (curr_insn_transform): Use non-input operand
|
||||
instead of output one for matched reload.
|
||||
|
||||
2017-10-18 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* tree-loop-distribution.c (INCLUDE_ALGORITHM): New header file.
|
||||
|
|
|
@ -4271,7 +4271,13 @@ curr_insn_transform (bool check_only_p)
|
|||
}
|
||||
else if (curr_static_id->operand[i].type == OP_IN
|
||||
&& (curr_static_id->operand[goal_alt_matched[i][0]].type
|
||||
== OP_OUT))
|
||||
== OP_OUT
|
||||
|| (curr_static_id->operand[goal_alt_matched[i][0]].type
|
||||
== OP_INOUT
|
||||
&& (operands_match_p
|
||||
(*curr_id->operand_loc[i],
|
||||
*curr_id->operand_loc[goal_alt_matched[i][0]],
|
||||
-1)))))
|
||||
{
|
||||
/* generate reloads for input and matched outputs. */
|
||||
match_inputs[0] = i;
|
||||
|
@ -4282,9 +4288,14 @@ curr_insn_transform (bool check_only_p)
|
|||
[goal_alt_number * n_operands + goal_alt_matched[i][0]]
|
||||
.earlyclobber);
|
||||
}
|
||||
else if (curr_static_id->operand[i].type == OP_OUT
|
||||
else if ((curr_static_id->operand[i].type == OP_OUT
|
||||
|| (curr_static_id->operand[i].type == OP_INOUT
|
||||
&& (operands_match_p
|
||||
(*curr_id->operand_loc[i],
|
||||
*curr_id->operand_loc[goal_alt_matched[i][0]],
|
||||
-1))))
|
||||
&& (curr_static_id->operand[goal_alt_matched[i][0]].type
|
||||
== OP_IN))
|
||||
== OP_IN))
|
||||
/* Generate reloads for output and matched inputs. */
|
||||
match_reload (i, goal_alt_matched[i], outputs, goal_alt[i], &before,
|
||||
&after, curr_static_id->operand_alternative
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-10-18 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR middle-end/82556
|
||||
* gcc.target/i386/pr82556.c: New.
|
||||
|
||||
2017-10-18 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* gcc.dg/tree-ssa/ldist-17.c: Adjust test string.
|
||||
|
|
19
gcc/testsuite/gcc.target/i386/pr82556.c
Normal file
19
gcc/testsuite/gcc.target/i386/pr82556.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-strict-aliasing -fwrapv -fexcess-precision=standard" } */
|
||||
extern int foo();
|
||||
typedef struct {
|
||||
char id;
|
||||
unsigned char fork_flags;
|
||||
short data_length;
|
||||
} Header;
|
||||
int a;
|
||||
void X() {
|
||||
do {
|
||||
char* b;
|
||||
Header c;
|
||||
if (a)
|
||||
c.fork_flags |= 1;
|
||||
__builtin_memcpy(b, &c, __builtin_offsetof(Header, data_length));
|
||||
b += foo();
|
||||
} while (1);
|
||||
}
|
Loading…
Add table
Reference in a new issue