Blame SOURCES/gcc32-pr12799.patch

6f1b0c
2005-10-02  Jakub Jelinek  <jakub@redhat.com>
6f1b0c
6f1b0c
	PR optimization/12799
6f1b0c
	* gcc.c-torture/execute/20051002-1.c: New test.
6f1b0c
6f1b0c
2003-11-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
6f1b0c
6f1b0c
	PR optimization/12799
6f1b0c
	* reload1.c (reload_cse_move2add): Generate the add2
6f1b0c
	patterns manually.
6f1b0c
6f1b0c
	* gcc.dg/20031102-1.c: New test.
6f1b0c
6f1b0c
--- gcc/reload1.c.jj	2003-10-31 11:42:15.000000000 +0100
6f1b0c
+++ gcc/reload1.c	2005-10-02 21:52:08.000000000 +0200
6f1b0c
@@ -9176,8 +9176,13 @@ reload_cse_move2add (first)
6f1b0c
 		    success = validate_change (insn, &SET_SRC (pat), reg, 0);
6f1b0c
 		  else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET)
6f1b0c
 			   && have_add2_insn (reg, new_src))
6f1b0c
-		    success = validate_change (insn, &PATTERN (insn),
6f1b0c
-					       gen_add2_insn (reg, new_src), 0);
6f1b0c
+		    {
6f1b0c
+		      rtx newpat = gen_rtx_SET (VOIDmode, reg,
6f1b0c
+						gen_rtx_PLUS (GET_MODE (reg),
6f1b0c
+							      reg, new_src));
6f1b0c
+		      success
6f1b0c
+			= validate_change (insn, &PATTERN (insn), newpat, 0);
6f1b0c
+		    }
6f1b0c
 		  reg_set_luid[regno] = move2add_luid;
6f1b0c
 		  reg_mode[regno] = GET_MODE (reg);
6f1b0c
 		  reg_offset[regno] = INTVAL (src);
6f1b0c
@@ -9227,9 +9232,15 @@ reload_cse_move2add (first)
6f1b0c
 		      else if ((rtx_cost (new_src, PLUS)
6f1b0c
 				< COSTS_N_INSNS (1) + rtx_cost (src3, SET))
6f1b0c
 			       && have_add2_insn (reg, new_src))
6f1b0c
-			success
6f1b0c
-			  = validate_change (next, &PATTERN (next),
6f1b0c
-					     gen_add2_insn (reg, new_src), 0);
6f1b0c
+			{
6f1b0c
+			  rtx newpat
6f1b0c
+			    = gen_rtx_SET (VOIDmode, reg,
6f1b0c
+					   gen_rtx_PLUS (GET_MODE (reg),
6f1b0c
+							 reg, new_src));
6f1b0c
+			  success
6f1b0c
+			    = validate_change (next, &PATTERN (next),
6f1b0c
+					       newpat, 0);
6f1b0c
+			}
6f1b0c
 		      if (success)
6f1b0c
 			delete_insn (insn);
6f1b0c
 		      insn = next;
6f1b0c
--- gcc/testsuite/gcc.dg/20031102-1.c.jj	1 Jan 1970 00:00:00 -0000
6f1b0c
+++ gcc/testsuite/gcc.dg/20031102-1.c	2 Nov 2003 08:32:23 -0000	1.1
6f1b0c
@@ -0,0 +1,37 @@
6f1b0c
+/* PR optimization/12799 */
6f1b0c
+/* Origin: Pratap Subrahmanyam <pratap@vmware.com> */
6f1b0c
+
6f1b0c
+/* { dg-do run } */
6f1b0c
+/* { dg-options "-O2" } */
6f1b0c
+/* { dg-options "-O2 -march=i686" { target i686-*-* } } */
6f1b0c
+
6f1b0c
+/* Verify that reload_cse_move2add doesn't add unexpected CLOBBERs. */
6f1b0c
+
6f1b0c
+extern void abort(void);
6f1b0c
+
6f1b0c
+int loo = 1;
6f1b0c
+
6f1b0c
+__inline__ char InlineFunc(void)
6f1b0c
+{
6f1b0c
+  return __builtin_expect(!!(loo == 1), 1);
6f1b0c
+}
6f1b0c
+
6f1b0c
+int FooBar(void)
6f1b0c
+{
6f1b0c
+  int i;
6f1b0c
+  int var1 = InlineFunc() ? 2046 : 1023;
6f1b0c
+  int var2 = InlineFunc() ? 512 : 1024;
6f1b0c
+
6f1b0c
+  for (i = 0; i < var1; i++)
6f1b0c
+    ;
6f1b0c
+
6f1b0c
+  if (InlineFunc() && var2 != 512)
6f1b0c
+    abort();
6f1b0c
+
6f1b0c
+  return 0;
6f1b0c
+}
6f1b0c
+
6f1b0c
+int main(void)
6f1b0c
+{
6f1b0c
+  return FooBar();
6f1b0c
+}
6f1b0c
--- gcc/testsuite/gcc.c-torture/execute/20051002-1.c.jj	2005-09-19 08:33:21.659531528 +0200
6f1b0c
+++ gcc/testsuite/gcc.c-torture/execute/20051002-1.c	2005-10-02 20:38:54.000000000 +0200
6f1b0c
@@ -0,0 +1,18 @@
6f1b0c
+/* PR optimization/12799 */
6f1b0c
+extern void abort (void);
6f1b0c
+
6f1b0c
+unsigned int
6f1b0c
+foo (unsigned long a)
6f1b0c
+{
6f1b0c
+  if (a >= 0xffffffffUL)
6f1b0c
+    return 0xffffffff;
6f1b0c
+  return a;
6f1b0c
+}
6f1b0c
+
6f1b0c
+int
6f1b0c
+main ()
6f1b0c
+{
6f1b0c
+  if (foo (0) != 0)
6f1b0c
+    abort ();
6f1b0c
+  return 0;
6f1b0c
+}