Commit f303100b by Andreas Krebbel Committed by Andreas Krebbel

PR66306: Fix match_dups on swapped operands.

2015-06-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	    PR rtl-optimization/66306
	    * reload.c (find_reloads): Swap the match_dup info for
	    commutative operands.

2015-06-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	    PR rtl-optimization/66306
	    * gcc.target/s390/pr66306.c: New test.

From-SVN: r224875
parent af77d1df
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR rtl-optimization/66306
* reload.c (find_reloads): Swap the match_dup info for
commutative operands.
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/vx-builtins.md
("vec_scatter_element<mode>_<non_vec_int>")
("vec_scatter_element<V_HW_64:mode>_SI"): Replace gf mode
......
......@@ -3872,6 +3872,12 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
std::swap (*recog_data.operand_loc[commutative],
*recog_data.operand_loc[commutative + 1]);
for (i = 0; i < recog_data.n_dups; i++)
if (recog_data.dup_num[i] == commutative
|| recog_data.dup_num[i] == commutative + 1)
*recog_data.dup_loc[i]
= recog_data.operand[(int) recog_data.dup_num[i]];
for (i = 0; i < n_reloads; i++)
{
if (rld[i].opnum == commutative)
......
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR rtl-optimization/66306
* gcc.target/s390/pr66306.c: New test.
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/vector/vec-abi-1.c: Add gnu attribute check.
* gcc.target/s390/vector/vec-abi-attr-1.c: New test.
* gcc.target/s390/vector/vec-abi-attr-2.c: New test.
......
/* This caused an ICE on s390x due to a reload bug handling
commutative constraints. */
/* { dg-do compile } */
/* { dg-options "-O1" } */
struct line_map
{
unsigned start_location;
unsigned ordinary;
};
unsigned
linemap_resolve_location (struct line_map **loc_map);
unsigned
linemap_position_for_loc_and_offset (unsigned h, unsigned loc)
{
struct line_map *map = 0;
linemap_resolve_location (&map);
if (map->ordinary <= loc + map->start_location + map->ordinary)
__builtin_abort ();
if (h >= loc + map->start_location)
__builtin_abort ();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment