Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Alexander_Naumov:SLE-12:Update
cross-ppc-gcc48-icecream-backend.7021
gcc48-pr66306.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gcc48-pr66306.patch of Package cross-ppc-gcc48-icecream-backend.7021
this fixes a reload problem with match_dup's on commutative operands. Bootstrapped and regtested on x86-64, ppc64, and s390x. Ok? Bye, -Andreas- 2015-06-11 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-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com> PR rtl-optimization/66306 * gcc.target/s390/pr66306.c: New test. diff --git a/gcc/reload.c b/gcc/reload.c index 2546c1b..48ad99c 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -3924,6 +3924,12 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, = *recog_data.operand_loc[commutative + 1]; *recog_data.operand_loc[commutative + 1] = tem; + 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) diff --git a/gcc/testsuite/gcc.target/s390/pr66306.c b/gcc/testsuite/gcc.target/s390/pr66306.c new file mode 100644 index 0000000..73903cb --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/pr66306.c @@ -0,0 +1,26 @@ +/* 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 (); +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor