summaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1999-06-25 04:38:30 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1999-06-25 04:38:30 +0000
commitb63c70f71251b5a08b47b480ad4ee12f0c2fee36 (patch)
tree5e7677b33c51460ade41ced78e7ed71d6175aba3 /gcc/loop.c
parentb995d979920ff4283412d9d71e6171a84924ddf8 (diff)
downloadgcc-b63c70f71251b5a08b47b480ad4ee12f0c2fee36.tar.gz
h
* loop.c (verify_dominator): Properly handle ADDR_VEC and ADDR_DIFF_VEC insns that appear inside loops. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@27760 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/loop.c')
-rw-r--r--gcc/loop.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index b616be0d524..ef64fd08be7 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -2564,14 +2564,21 @@ verify_dominator (loop_number)
&& GET_CODE (PATTERN (insn)) != RETURN)
{
rtx label = JUMP_LABEL (insn);
- int label_luid = INSN_LUID (label);
-
- if (! condjump_p (insn)
- && ! condjump_in_parallel_p (insn))
+ int label_luid;
+
+ /* If it is not a jump we can easily understand or for
+ which we do not have jump target information in the JUMP_LABEL
+ field (consider ADDR_VEC and ADDR_DIFF_VEC insns), then clear
+ LOOP_NUMBER_CONT_DOMINATOR. */
+ if ((! condjump_p (insn)
+ && ! condjump_in_parallel_p (insn))
+ || label == NULL_RTX)
{
loop_number_cont_dominator[loop_number] = NULL_RTX;
return;
}
+
+ label_luid = INSN_LUID (label);
if (label_luid < INSN_LUID (loop_number_loop_cont[loop_number])
&& (label_luid
> INSN_LUID (loop_number_cont_dominator[loop_number])))