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]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]