This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PowerPC64 non-delegitimized unspecs
- From: Alan Modra <amodra at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: David Edelsohn <dje dot gcc at gmail dot com>
- Date: Wed, 6 Apr 2011 22:06:11 +0930
- Subject: PowerPC64 non-delegitimized unspecs
I've noticed a number of tests fail on mainline with complaints about
non-delegitimized UNSPECs. The reason why rs6000_delegitimze_address
isn't working is that our insn matching doesn't allow a stack slot in
place of the REG. I could have expanded the condition to include
stack slots, but it seems silly to complicate the code like that.
Bootstrapped and regression tested powerpc64-linux. OK for mainline
and 4.6?
* config/rs6000/rs6000.c (rs6000_delegitimize_address): Relax
UNSPEC_TOCREL matching.
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c (revision 171989)
+++ gcc/config/rs6000/rs6000.c (working copy)
@@ -6367,18 +6367,7 @@ rs6000_delegitimize_address (rtx orig_x)
{
y = XEXP (XEXP (x, 1), 0);
if (GET_CODE (y) == UNSPEC
- && XINT (y, 1) == UNSPEC_TOCREL
- && ((GET_CODE (XEXP (x, 0)) == REG
- && (REGNO (XEXP (x, 0)) == TOC_REGISTER
- || TARGET_MINIMAL_TOC
- || TARGET_CMODEL != CMODEL_SMALL))
- || (TARGET_CMODEL != CMODEL_SMALL
- && GET_CODE (XEXP (x, 0)) == PLUS
- && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
- && REGNO (XEXP (XEXP (x, 0), 0)) == TOC_REGISTER
- && GET_CODE (XEXP (XEXP (x, 0), 1)) == HIGH
- && rtx_equal_p (XEXP (x, 1),
- XEXP (XEXP (XEXP (x, 0), 1), 0)))))
+ && XINT (y, 1) == UNSPEC_TOCREL)
{
y = XVECEXP (y, 0, 0);
if (!MEM_P (orig_x))
--
Alan Modra
Australia Development Lab, IBM