re PR target/16494 ([3.3.2/3.4/3.5] Pessimization with FP conditional branches)
authorEric Botcazou <ebotcazou@libertysurf.fr>
Tue, 13 Jul 2004 12:08:56 +0000 (14:08 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 13 Jul 2004 12:08:56 +0000 (12:08 +0000)
PR target/16494
* config/sparc/sparc.c (output_cbranch): Properly guard
the code handling far branches with TARGET_V9.
* config/sparc/sparc.md (length attribute): Document the
side-effect of having a length greater or equal to 3.

From-SVN: r84618

gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md

index 2062462b1a5696799c13168d5acf9fd4f779becf..4191d045f1c7e59a571294be4e421f9dd64dbc4d 100644 (file)
@@ -1,3 +1,11 @@
+2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR target/16494
+       * config/sparc/sparc.c (output_cbranch): Properly guard
+       the code handling far branches with TARGET_V9.
+       * config/sparc/sparc.md (length attribute): Document the
+       side-effect of having a length greater or equal to 3.
+
 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
             Lloyd Parkes  <lloyd@must-have-coffee.gen.nz>
 
index 8f73f1b15f6af9f78ae4d8954ba04ec88b91c571..199ae0abbfc20cdc0e983e02806812b8b999400d 100644 (file)
@@ -6131,7 +6131,7 @@ output_cbranch (rtx op, rtx dest, int label, int reversed, int annul,
       nop
      ba .LC29  */
 
-  far = get_attr_length (insn) >= 3;
+  far = TARGET_V9 && (get_attr_length (insn) >= 3);
   if (reversed ^ far)
     {
       /* Reversal of FP compares takes care -- an ordered compare
@@ -6261,9 +6261,7 @@ output_cbranch (rtx op, rtx dest, int label, int reversed, int annul,
       spaces -= 2;
     }
 
-  if (! TARGET_V9)
-    labelno = "";
-  else
+  if (TARGET_V9)
     {
       rtx note;
       int v8 = 0;
@@ -6313,6 +6311,9 @@ output_cbranch (rtx op, rtx dest, int label, int reversed, int annul,
          spaces -= 3;
        }
     }
+  else
+    labelno = "";
+
   if (spaces > 0)
     *p++ = '\t';
   else
index f81482aecaa362b2cd58ff42165c15e8ff586984..fecce781b2eb52fdfbe3a9d914eebbe17f4f190c 100644 (file)
   (symbol_ref "flag_delayed_branch != 0"))
 
 ;; Length (in # of insns).
+;; Beware that setting a length greater or equal to 3 for conditional branches
+;; has a side-effect (see output_cbranch and output_v9branch).
 (define_attr "length" ""
   (cond [(eq_attr "type" "uncond_branch,call")
           (if_then_else (eq_attr "empty_delay_slot" "true")