This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/28690] [4.2 Regression] Performace problem with indexed load/stores on powerpc
- From: "bergner at vnet dot ibm dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Oct 2006 03:30:12 -0000
- Subject: [Bug middle-end/28690] [4.2 Regression] Performace problem with indexed load/stores on powerpc
- References: <bug-28690-5233@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #17 from bergner at vnet dot ibm dot com 2006-10-03 03:30 -------
Created an attachment (id=12375)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=12375&action=view)
Patch to swap_commutative_operands_p and gen_addr_rtx to force base pointers
into rA position of indexed load/store instructions.
We propagated the MEM_POINTER/REG_POINTER flags fine. The problem is that the
memory reference we're handed is a REG + REG which looks legitimate to us, so
we never call LEGITIMIZE_ADDRESS, so we never have a chance to swap the
operands.
Since we cannot fixup the latest test case in LEGITIMIZE_ADDRESS, I've decided
to attempt another swap_commutative_operands_p() /
commutative_operand_precedence() change. However, I'm a little more selective
on when we change swap_commutative_operands_p()'s return value. With this
patch, I'm able to transform each of the test cases so that the base address if
the first operand of the indexed load.
* rtlanal.c (swap_commutative_operands_p): Preference a REG_POINTER
over a non REG_POINTER.
* tree-ssa-address.c (gen_addr_rtx): Force a REG_POINTER to be
the first operand of a PLUS.
--
bergner at vnet dot ibm dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #12305|0 |1
is obsolete| |
Attachment #12306|0 |1
is obsolete| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28690