params.def (PARAM_MIN_CROSSJUMP_INSNS): New.
authorPat Haugen <pthaugen@us.ibm.com>
Fri, 6 Aug 2004 17:20:53 +0000 (17:20 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Fri, 6 Aug 2004 17:20:53 +0000 (13:20 -0400)
2004-08-06  Pat Haugen  <pthaugen@us.ibm.com>

        * params.def (PARAM_MIN_CROSSJUMP_INSNS): New.
        * cfgcleanup.c (try_crossjump_to_edge): Add minimum insn match
        threshhold.
        * doc/invoke.texi (param): Document min-crossjump-insns.

From-SVN: r85646

gcc/ChangeLog
gcc/cfgcleanup.c
gcc/doc/invoke.texi
gcc/params.def

index 0c189c61c958a03c7e78b367ae2ae26c2fcd3b45..1318c7cd2c228bdbdcb09cf34ec516f255b787e7 100644 (file)
@@ -1,3 +1,10 @@
+2004-08-06  Pat Haugen  <pthaugen@us.ibm.com>
+
+       * params.def (PARAM_MIN_CROSSJUMP_INSNS): New.
+       * cfgcleanup.c (try_crossjump_to_edge): Add minimum insn match
+       threshhold.
+       * doc/invoke.texi (param): Document min-crossjump-insns.
+
 2004-08-06  Richard Sandiford  <rsandifo@redhat.com>
 
        PR c/13282
index 517f0eddfb65308167b5f4823af3fffc60edce92..648c4a4f7c34252b797119067f6254d57b0be223 100644 (file)
@@ -1507,7 +1507,13 @@ try_crossjump_to_edge (int mode, edge e1, edge e2)
 
   /* ... and part the second.  */
   nmatch = flow_find_cross_jump (mode, src1, src2, &newpos1, &newpos2);
-  if (!nmatch)
+
+  /* Don't proceed with the crossjump unless we found a sufficient number
+     of matching instructions or the 'from' block was totally matched
+     (such that its predecessors will hopefully be redirected and the
+     block removed).  */
+  if ((nmatch < PARAM_VALUE (PARAM_MIN_CROSSJUMP_INSNS))
+      && (newpos1 != BB_HEAD (src1)))
     return false;
 
 #ifndef CASE_DROPS_THROUGH
index 154dc976fb29b948e84cf1387e59c28140c34e71..f1988b0b8565489fe9d46e45e9f0d6fbe4dabde6 100644 (file)
@@ -5094,6 +5094,12 @@ the number of edges incoming to each block.  Increasing values mean
 more aggressive optimization, making the compile time increase with
 probably small improvement in executable size.
 
+@item min-crossjump-insns
+The minimum number of instructions which must be matched at the end
+of two blocks before crossjumping will be performed on them.  This
+value is ignored in the case where all instructions in the block being
+crossjumped from are matched.  The default value is 5.
+
 @item max-delay-slot-insn-search
 The maximum number of instructions to consider when looking for an
 instruction to fill a delay slot.  If more than this arbitrary number of
index 4b5a9ce7b932d76f2d24ba1f21234350f3e95898..aed7655c9a45df4506dda95855130306f272d2ba 100644 (file)
@@ -306,6 +306,12 @@ DEFPARAM(PARAM_MAX_CROSSJUMP_EDGES,
         "The maximum number of incoming edges to consider for crossjumping",
         100)
 
+/* The minimum number of matching instructions to consider for crossjumping.  */
+DEFPARAM(PARAM_MIN_CROSSJUMP_INSNS,
+     "min-crossjump-insns",
+     "The minimum number of matching instructions to consider for crossjumping",
+     5)
+
 /* The maximum length of path considered in cse.  */
 DEFPARAM(PARAM_MAX_CSE_PATH_LENGTH,
         "max-cse-path-length",