Commited as obvious.

        PR target/79098
        * config/rs6000/rs6000.c (rs6000_legitimate_combined_insn): Don't
        use a switch.

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 11394b2..f1d5d9d 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -9085,40 +9085,41 @@ rs6000_const_not_ok_for_debug_p (rtx x)
 static bool
 rs6000_legitimate_combined_insn (rtx_insn *insn)
 {
-  switch (INSN_CODE (insn))
-    {
-      /* Reject creating doloop insns.  Combine should not be allowed
-        to create these for a number of reasons:
-        1) In a nested loop, if combine creates one of these in an
-        outer loop and the register allocator happens to allocate ctr
-        to the outer loop insn, then the inner loop can't use ctr.
-        Inner loops ought to be more highly optimized.
-        2) Combine often wants to create one of these from what was
-        originally a three insn sequence, first combining the three
-        insns to two, then to ctrsi/ctrdi.  When ctrsi/ctrdi is not
-        allocated ctr, the splitter takes use back to the three insn
-        sequence.  It's better to stop combine at the two insn
-        sequence.
-        3) Faced with not being able to allocate ctr for ctrsi/crtdi
-        insns, the register allocator sometimes uses floating point
-        or vector registers for the pseudo.  Since ctrsi/ctrdi is a
-        jump insn and output reloads are not implemented for jumps,
-        the ctrsi/ctrdi splitters need to handle all possible cases.
-        That's a pain, and it gets to be seriously difficult when a
-        splitter that runs after reload needs memory to transfer from
-        a gpr to fpr.  See PR70098 and PR71763 which are not fixed
-        for the difficult case.  It's better to not create problems
-        in the first place.  */
-    case CODE_FOR_ctrsi_internal1:
-    case CODE_FOR_ctrdi_internal1:
-    case CODE_FOR_ctrsi_internal2:
-    case CODE_FOR_ctrdi_internal2:
-    case CODE_FOR_ctrsi_internal3:
-    case CODE_FOR_ctrdi_internal3:
-    case CODE_FOR_ctrsi_internal4:
-    case CODE_FOR_ctrdi_internal4:
-      return false;
-    }
+  int icode = INSN_CODE (insn);
+
+  /* Reject creating doloop insns.  Combine should not be allowed
+     to create these for a number of reasons:
+     1) In a nested loop, if combine creates one of these in an
+     outer loop and the register allocator happens to allocate ctr
+     to the outer loop insn, then the inner loop can't use ctr.
+     Inner loops ought to be more highly optimized.
+     2) Combine often wants to create one of these from what was
+     originally a three insn sequence, first combining the three
+     insns to two, then to ctrsi/ctrdi.  When ctrsi/ctrdi is not
+     allocated ctr, the splitter takes use back to the three insn
+     sequence.  It's better to stop combine at the two insn
+     sequence.
+     3) Faced with not being able to allocate ctr for ctrsi/crtdi
+     insns, the register allocator sometimes uses floating point
+     or vector registers for the pseudo.  Since ctrsi/ctrdi is a
+     jump insn and output reloads are not implemented for jumps,
+     the ctrsi/ctrdi splitters need to handle all possible cases.
+     That's a pain, and it gets to be seriously difficult when a
+     splitter that runs after reload needs memory to transfer from
+     a gpr to fpr.  See PR70098 and PR71763 which are not fixed
+     for the difficult case.  It's better to not create problems
+     in the first place.  */
+  if (icode != CODE_FOR_nothing
+      && (icode == CODE_FOR_ctrsi_internal1
+         || icode == CODE_FOR_ctrdi_internal1
+         || icode == CODE_FOR_ctrsi_internal2
+         || icode == CODE_FOR_ctrdi_internal2
+         || icode == CODE_FOR_ctrsi_internal3
+         || icode == CODE_FOR_ctrdi_internal3
+         || icode == CODE_FOR_ctrsi_internal4
+         || icode == CODE_FOR_ctrdi_internal4))
+    return false;
+
   return true;
 }
 

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to