summaryrefslogtreecommitdiff
path: root/packages/gcc/gcc-3.3.3/reverse-compare.patch
blob: 7b6c1b6425f4f5b28252a8080700cdba0f442011 (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
--- gcc-3.3.3/gcc/flow.c~	2003-07-30 01:57:24.000000000 +0100
+++ gcc-3.3.3/gcc/flow.c	2004-04-23 19:23:43.000000000 +0100
@@ -1904,6 +1904,7 @@
       regset diff = INITIALIZE_REG_SET (diff_head);
       basic_block bb_true, bb_false;
       rtx cond_true, cond_false, set_src;
+      enum rtx_code reversed_code;
       int i;
 
       /* Identify the successor blocks.  */
@@ -1934,7 +1935,11 @@
       /* Extract the condition from the branch.  */
       set_src = SET_SRC (pc_set (bb->end));
       cond_true = XEXP (set_src, 0);
-      cond_false = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
+      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)
@@ -1980,6 +1985,7 @@
 	     });
 	}
 
+    skip:
       FREE_REG_SET (diff);
     }
 #endif