This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
This checkin makes Spec2006 build again for -O3 -fpeel-loops -funroll-loops -mcpu=power7. I'm not entirely happy with the fix, as I think the real fix is to find the place that is rewriting the address in reload and teach it not to do the substitution inside of a const. The patch also continues on my last checkin to move the -mdebug=addr output to a separate function, and make the address support infrastructure closer to the original code, so that it is easier to compare what the differences are. I added more checks to make sure we don't allow invalid addresses for Altivec/VSX modes that only support reg+reg addressing. The spec code references static memory. This is an invalid address for VSX, so it pushes the address to a separate register, and then creates a TOC entry for the address. The address has the note: (reg_equal (const:DI (plus:DI (symbol_ref:DI) (const_int)))) to represent where it actually points to, which is expected. However, inside of IRA/reload, because (reg+int) addressing is not allowed, this gets changed to move the int to a register and then to (reg+reg). However, it also changes the note to: (reg_equal (const:DI (plus:DI (symbol_ref:DI) (reg:DI)))) which is illegal having a register inside of the const. I fixed this inside of r6000_emit_move to recognize this, and convert it back to loading the symbol_ref and then doing the add separately. -- Michael Meissner, IBM 4 Technology Place Drive, MS 2203A, Westford, MA, 01886, USA meissner@linux.vnet.ibm.com
Attachment:
gcc-power7.patch48
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |