From: Kyrylo Tkachov <[email protected]>

A round of comments that do not match the code they document.
noce_try_cmove names noce_try_store_flag_arith, a function that has never
existed.  block_jumps_and_fallthru says it returns true, but it returns an
insn count or -1.  dead_or_predicable documents every parameter but OTHER_BB,
noce_convert_multiple_sets_1 does not document the condition this series
started passing in, and noce_emit_cmove is described only as a helper of two
of its five callers.  get_base_reg_or_constant describes only the register
case, and init_noce_multiple_sets_info never says that it fills INSN_INFO.
The noce_try_cond_arith comment is reflowed to the file's style, and the rest
are typos, a duplicated "(non-jump)", and a stray trailing space.
Comment-only.

gcc/ChangeLog:

        * ifcvt.cc (first_active_insn, find_active_insn_after, block_fallthru,
        noce_try_move, noce_try_sign_bit_splat, noce_try_store_flag_mask,
        noce_emit_cmove, noce_try_cmove, get_base_reg_or_constant,
        noce_try_cond_arith, try_emit_cmove_seq,
        noce_convert_multiple_sets_1, init_noce_multiple_sets_info,
        check_cond_move_block, find_if_header, block_jumps_and_fallthru,
        find_if_case_2, dead_or_predicable): Fix comments.

Signed-off-by: Kyrylo Tkachov <[email protected]>
---
 gcc/ifcvt.cc | 121 +++++++++++++++++++++++++++------------------------
 1 file changed, 64 insertions(+), 57 deletions(-)

diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index 1ee49e9c2d3..50244b73dc5 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -248,7 +248,7 @@ first_active_insn (basic_block bb)
   return insn;
 }
 
-/* Return the last non-jump active (non-jump) insn in the basic block.  */
+/* Return the last non-jump active insn in the basic block.  */
 
 static rtx_insn *
 last_active_insn (basic_block bb, bool skip_use_p)
@@ -316,7 +316,7 @@ find_active_insn_after (basic_block curr_bb, rtx_insn *insn)
   return insn;
 }
 
-/* Return the basic block reached by falling though the basic block BB.  */
+/* Return the basic block reached by falling through the basic block BB.  */
 
 static basic_block
 block_fallthru (basic_block bb)
@@ -1364,7 +1364,7 @@ noce_try_move (struct noce_if_info *if_info)
       || HONOR_SIGNED_ZEROS (if_info->x))
     return false;
 
-  /* Check whether the operands of the comparison are A and in
+  /* Check whether the operands of the comparison are A and B, in
      either order.  */
   if ((rtx_equal_p (if_info->a, XEXP (cond, 0))
        && rtx_equal_p (if_info->b, XEXP (cond, 1)))
@@ -1396,7 +1396,7 @@ noce_try_move (struct noce_if_info *if_info)
 
 /* If a sign bit test is selecting across constants, we may be able
    to generate efficient code utilizing the -1/0 result of a sign
-   bit splat idiom. 
+   bit splat idiom.
 
    Do this before trying the generalized conditional move as these
    (when applicable) are hopefully faster than a conditional move.  */
@@ -2285,7 +2285,11 @@ noce_try_store_flag_mask (struct noce_if_info *if_info)
   return false;
 }
 
-/* Helper function for noce_try_cmove and noce_try_cmove_arith.  */
+/* Emit a conditional move selecting VTRUE or VFALSE into X, and return the
+   destination it landed in, or NULL_RTX on failure.  CODE, CMP_A and CMP_B
+   give the canonicalized comparison.  CC_CMP and REV_CC_CMP, when given, are
+   the non-canonicalized condition and its reverse, which let a target emit
+   the move without materializing its own compare.  */
 
 static rtx
 noce_emit_cmove (struct noce_if_info *if_info, rtx x, enum rtx_code code,
@@ -2407,9 +2411,9 @@ noce_simple_cmove_operand_p (rtx x)
   return CONSTANT_P (x) || register_operand (x, VOIDmode);
 }
 
-/* Try only simple constants and registers here.  More complex cases
-   are handled in noce_try_cmove_arith after noce_try_store_flag_arith
-   has had a go at it.  */
+/* Try only simple constants and registers here.  More complex cases are
+   handled in noce_try_cmove_arith, which the dispatch table reaches after
+   the store-flag matchers have had a go.  */
 
 static bool
 noce_try_cmove (struct noce_if_info *if_info)
@@ -3463,8 +3467,9 @@ noce_operand_known_extended_p (rtx x, machine_mode 
outer_mode,
   return false;
 }
 
-/*  Helper function to return REG itself,
-    otherwise NULL_RTX for other RTX_CODE.  */
+/* Return the register or constant that EXP selects on: EXP itself for a
+   register or a constant, the inner register of a subreg, and NULL_RTX for
+   anything else.  */
 
 static rtx
 get_base_reg_or_constant (rtx exp)
@@ -3478,29 +3483,31 @@ get_base_reg_or_constant (rtx exp)
   return NULL_RTX;
 }
 
-/*  Try to covert if-then-else with conditional zero,
-    returning TURE on success or FALSE on failure.
-    IF_INFO describes the if-conversion scenario under consideration.
+/* Try to convert if-then-else with conditional zero, returning TRUE on
+   success or FALSE on failure.  IF_INFO describes the if-conversion scenario
+   under consideration.
 
-    It verifies the branch structure on left and transforms it into branchless
-    sequence on the right, with a backend provided conditional zero or orig for
-    operand z. If true, tmp is z, 0 otherwise (y op 0 is same as y for most 
op).
+   It verifies the branch structure on the left and transforms it into the
+   branchless sequence on the right, with a backend-provided conditional zero
+   or orig for operand z.  If true, tmp is z, 0 otherwise (y op 0 is the same
+   as y for most op).
 
-      if (cond)                |  tmp = cond ? z : 0
-       x = y op z      |    x = y op tmp
-      else             |
-       x = y           |
+     if (cond)         |  tmp = cond ? z : 0
+       x = y op z      |    x = y op tmp
+     else              |
+       x = y           |
 
-    AND is special as it needs to be handled differently.
+   AND is special as it needs to be handled differently.
 
-      tmp = !cond ? y : 0
-       x = (y & z) | tmp
-    Also for AND try:
-      tmp = cond ? z : -1
-       x = y op tmp
-    To see if it is cheaper to produce `!cond ? y : 0`
-    or `cond ? z : -1`.
-  */
+     tmp = !cond ? y : 0
+       x = (y & z) | tmp
+
+   Also for AND try:
+
+     tmp = cond ? z : -1
+       x = y op tmp
+
+   to see if it is cheaper to produce `!cond ? y : 0` or `cond ? z : -1`.  */
 
 static bool
 noce_try_cond_arith (struct noce_if_info *if_info)
@@ -4280,11 +4287,11 @@ noce_convert_multiple_sets (struct noce_if_info 
*if_info)
   return true;
 }
 
-/* Try to emit the multiple-set conversion described by IF_INFO.  INSN_INFO
-   holds THEN_COUNT then-arm entries followed by entries for the else-only
-   definitions recorded in ELSE_ONLY_INDICES.  For a diamond,
-   evaluate ELSE_INSN_INFO first and retain its final values for the
-   conditional moves.
+/* Try to emit the multiple-set conversion described by IF_INFO, selecting on
+   the already decoded jump condition COND.  INSN_INFO holds THEN_COUNT
+   then-arm entries followed by entries for the else-only definitions recorded
+   in ELSE_ONLY_INDICES.  For a diamond, evaluate ELSE_INSN_INFO first and
+   retain its final values for the conditional moves.
 
    LAST_NEEDS_COMPARISON is -1 on the first attempt.  Record in it the last set
    that needs a temporary to preserve the comparison, then use that boundary
@@ -4627,9 +4634,9 @@ noce_convert_multiple_sets_1 (noce_if_info *if_info, rtx 
cond,
   return true;
 }
 
-/* Find local swap-style idioms in BB and mark the first insn (1)
-   that is only a temporary as not needing a conditional move as
-   it is going to be dead afterwards anyway.
+/* Fill INSN_INFO with one entry per active insn in BB.  Find local swap-style
+   idioms and mark the first insn (1) that is only a temporary as not needing
+   a conditional move, as it is going to be dead afterwards anyway.
 
      (1) int tmp = a;
         a = b;
@@ -4642,18 +4649,17 @@ noce_convert_multiple_sets_1 (noce_if_info *if_info, 
rtx cond,
         a = cond ? b : a_old;
         b = cond ? tmp : b_old;
 
-    Additionally, store the index of insns like (2) when a subsequent
-    SET reads from their destination.
+   Additionally, store the index of insns like (2) when a subsequent
+   SET reads from their destination.
 
-    (2) int c = a;
-       int d = c;
+     (2) int c = a;
+        int d = c;
 
-       ifcvt
-       -->
+        ifcvt
+        -->
 
-       c = cond ? a : c_old;
-       d = cond ? d : c;     // Need to use c rather than c_old here.
-*/
+        c = cond ? a : c_old;
+        d = cond ? d : c;     // Need to use c rather than c_old here.  */
 
 static void
 init_noce_multiple_sets_info (basic_block bb,
@@ -5198,8 +5204,8 @@ noce_process_if_block (struct noce_if_info *if_info)
 /* Check whether a block is suitable for conditional move conversion.
    Every insn must be a simple set of a register to a constant or a
    register.  For each assignment, store the value in the pointer map
-   VALS, keyed indexed by register pointer, then store the register
-   pointer in REGS.  COND is the condition we will test.  */
+   VALS, keyed by register pointer, then store the register pointer in
+   REGS.  COND is the condition we will test.  */
 
 static bool
 check_cond_move_block (basic_block bb,
@@ -5822,10 +5828,10 @@ find_if_header (basic_block test_bb, int pass)
   return ce_info.test_bb;
 }
 
-/* Return true if a block has two edges, one of which falls through to the next
-   block, and the other jumps to a specific block, so that we can tell if the
-   block is part of an && test or an || test.  Returns either -1 or the number
-   of non-note, non-jump, non-USE/CLOBBER insns in the block.  */
+/* CUR_BB has two edges, one falling through to the next block and one
+   jumping to TARGET_BB, so it can be part of an && test or an || test.
+   Return the number of non-note, non-jump, non-USE/CLOBBER insns in it, or
+   -1 if CUR_BB is not of that form.  */
 
 static int
 block_jumps_and_fallthru (basic_block cur_bb, basic_block target_bb)
@@ -6555,11 +6561,12 @@ find_if_case_2 (basic_block test_bb, edge then_edge, 
edge else_edge)
 /* Used by the code above to perform the actual rtl transformations.
    Return TRUE if successful.
 
-   TEST_BB is the block containing the conditional branch.  MERGE_BB
-   is the block containing the code to manipulate.  DEST_EDGE is an
-   edge representing a jump to the join block; after the conversion,
-   TEST_BB should be branching to its destination.
-   REVERSEP is true if the sense of the branch should be reversed.  */
+   TEST_BB is the block containing the conditional branch.  MERGE_BB is the
+   block containing the code to manipulate.  OTHER_BB is the other successor
+   of TEST_BB, the one the code is being moved past.  DEST_EDGE is an edge
+   representing a jump to the join block; after the conversion, TEST_BB should
+   be branching to its destination.  REVERSEP is true if the sense of the
+   branch should be reversed.  */
 
 static bool
 dead_or_predicable (basic_block test_bb, basic_block merge_bb,
-- 
2.50.1 (Apple Git-155)

Reply via email to