Fix sh port WRT fallthru
Jeff Law
law@redhat.com
Wed Oct 26 20:26:00 GMT 2016
This adjusts existing fallthru comments and adds some new ones. I
couldn't convince myself the original code in movsicc was correct, It
looks like we properly reverse the condition, but not the operands in
the case of LT/LE/LEU/LTU. But then we do almost the same th ing in
sh_emit_scc_to_t as well. So I just kept the existing semantics and
added fallthru comments.
In gen_shl_and, I'm pretty sure we ended to fallthru.
Installing on the trunk.
Jeff
-------------- next part --------------
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3e7704c..0eb5f88 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2016-10-26 Jeff Law <law@redhat.com>
+ * config/sh/sh.c (output_branch): Add missing fallthru comments.
+ (gen_shl_and): Likewise.
+ * config/sh/sh.md (movsicc): Add missing fallthru comments.
+
* config/mips/mips.c (mips16_constant_cost): Add missing
fallthru comments.
(mips16_build_call_stub): Increase buffer size. Adjust
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index cf5231e..4ca4b74 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -2665,6 +2665,7 @@ output_branch (int logic, rtx_insn *insn, rtx *operands)
return "";
}
+ /* FALLTHRU */
/* When relaxing, handle this like a short branch. The linker
will fix it up if it still doesn't fit after relaxation. */
case 2:
@@ -2690,7 +2691,7 @@ output_branch (int logic, rtx_insn *insn, rtx *operands)
return "";
}
- /* When relaxing, fall through. */
+ /* FALLTHRU */
case 4:
{
char buffer[10];
@@ -3461,7 +3462,7 @@ sh_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED, int outer_code,
*total = COSTS_N_INSNS (1);
return true;
}
- /* Fall through to shiftcosts. */
+ /* FALLTHRU */
case ASHIFT:
case ASHIFTRT:
{
@@ -4069,12 +4070,14 @@ gen_shl_and (rtx dest, rtx left_rtx, rtx mask_rtx, rtx source)
}
case 4:
shift_gen_fun = gen_shifty_op;
+ /* FALLTHRU */
case 3:
/* If the topmost bit that matters is set, set the topmost bits
that don't matter. This way, we might be able to get a shorter
signed constant. */
if (mask & ((HOST_WIDE_INT) 1 << (31 - total_shift)))
mask |= (HOST_WIDE_INT) ((HOST_WIDE_INT_M1U) << (31 - total_shift));
+ /* FALLTHRU */
case 2:
/* Don't expand fine-grained when combining, because that will
make the pattern fail. */
@@ -4647,6 +4650,7 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
align_insn = scan;
need_align = false;
}
+ /* FALLTHRU */
case DImode:
for (lab = p->label; lab; lab = LABEL_REFS (lab))
scan = emit_label_after (lab, scan);
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index dcb31eb..e80ef58 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -1509,6 +1509,7 @@
case LT: case LE: case LEU: case LTU:
if (GET_MODE_CLASS (GET_MODE (op0)) != MODE_INT)
break;
+ /* FALLTHRU */
case NE:
new_code = reverse_condition (code);
break;
More information about the Gcc-patches
mailing list