summaryrefslogtreecommitdiff
path: root/gcc-csl/gcc-csl-2004-q1a/gcc34-reverse-compare.patch
blob: c3c40dd1832e4d606df89ed62651d3061ba0d1d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
--- gcc-3.4.0/gcc/flow.c.reverse-compare	2004-02-27 22:39:19.000000000 -0500
+++ gcc-3.4.0/gcc/flow.c	2004-04-24 16:36:00.000000000 -0400
@@ -1843,6 +1843,7 @@
       regset_head diff_head;
       regset diff = INITIALIZE_REG_SET (diff_head);
       basic_block bb_true, bb_false;
+      enum rtx_code reversed_code;
       int i;
 
       /* Identify the successor blocks.  */
@@ -1889,8 +1890,11 @@
 	  if (GET_CODE (reg) == REG
 	      && XEXP (cond_true, 1) == const0_rtx)
 	    {
-	      rtx cond_false
-		= gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
+	      rtx cond_false;
+	      reversed_code = reverse_condition (GET_CODE (cond_true));
+	      if (reversed_code == UNKNOWN)
+		goto skip;
+	      cond_false = gen_rtx_fmt_ee (reversed_code,
 				  GET_MODE (cond_true), XEXP (cond_true, 0),
 				  XEXP (cond_true, 1));
 	      if (GET_CODE (XEXP (set_src, 1)) == PC)
@@ -1925,6 +1929,7 @@
 	    }
 	}
 
+    skip:
       FREE_REG_SET (diff);
     }
 #endif