diff options
author | Caroline Tice <ctice@apple.com> | 2007-07-18 21:08:05 +0000 |
---|---|---|
committer | Caroline Tice <ctice@gcc.gnu.org> | 2007-07-18 14:08:05 -0700 |
commit | 0ef0421e82f875cdb88620605dbd7ff42e9c5632 (patch) | |
tree | 51d879b746fd960e201cbfce4abd84fca7bfc7a6 /gcc | |
parent | dadda6caba15b21a03e9522ca5cce41e2c2d270b (diff) | |
download | gcc-0ef0421e82f875cdb88620605dbd7ff42e9c5632.zip gcc-0ef0421e82f875cdb88620605dbd7ff42e9c5632.tar.gz gcc-0ef0421e82f875cdb88620605dbd7ff42e9c5632.tar.bz2 |
Fix bootstrap on ia64, PR32764
2007-07-18 Caroline Tice <ctice@apple.com>
* var-tracking.c (find_src_status): Check for COND_EXEC insns
and handle them correctly; check that src is not NULL before
trying to use it.
(find_src_set_src): Likewise.
From-SVN: r126731
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/var-tracking.c | 52 |
2 files changed, 39 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 484d9b5..893789d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-07-18 Caroline Tice <ctice@apple.com> + + * var-tracking.c (find_src_status): Check for COND_EXEC insns + and handle them correctly; check that src is not NULL before + trying to use it. + (find_src_set_src): Likewise. + 2007-07-18 Bob Wilson <bob.wilson@acm.org> * config/xtensa/xtensa.c (xtensa_expand_mask_and_shift): New. diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 56dcc19..bdc173e 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -1806,27 +1806,33 @@ static enum var_init_status find_src_status (dataflow_set *in, rtx loc, rtx insn) { rtx src = NULL_RTX; + rtx pattern; tree decl = NULL_TREE; enum var_init_status status = VAR_INIT_STATUS_UNINITIALIZED; if (! flag_var_tracking_uninit) status = VAR_INIT_STATUS_INITIALIZED; - if (GET_CODE (PATTERN (insn)) == SET) - src = SET_SRC (PATTERN (insn)); - else if (GET_CODE (PATTERN (insn)) == PARALLEL - || GET_CODE (PATTERN (insn)) == SEQUENCE) + pattern = PATTERN (insn); + + if (GET_CODE (pattern) == COND_EXEC) + pattern = COND_EXEC_CODE (pattern); + + if (GET_CODE (pattern) == SET) + src = SET_SRC (pattern); + else if (GET_CODE (pattern) == PARALLEL + || GET_CODE (pattern) == SEQUENCE) { int i; - for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) - if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET - && SET_DEST (XVECEXP (PATTERN (insn), 0, i)) == loc) - src = SET_SRC (XVECEXP (PATTERN (insn), 0, i)); + for (i = XVECLEN (pattern, 0) - 1; i >= 0; i--) + if (GET_CODE (XVECEXP (pattern, 0, i)) == SET + && SET_DEST (XVECEXP (pattern, 0, i)) == loc) + src = SET_SRC (XVECEXP (pattern, 0, i)); } - if (REG_P (src)) + if (src && REG_P (src)) decl = var_debug_decl (REG_EXPR (src)); - else if (MEM_P (src)) + else if (src && MEM_P (src)) decl = var_debug_decl (MEM_EXPR (src)); if (src && decl) @@ -1845,26 +1851,32 @@ find_src_set_src (dataflow_set *set, rtx loc, rtx insn) tree decl = NULL_TREE; /* The variable being copied around. */ rtx src = NULL_RTX; /* The location "decl" is being copied from. */ rtx set_src = NULL_RTX; /* The value for "decl" stored in "src". */ + rtx pattern; void **slot; variable var; location_chain nextp; int i; bool found; - if (GET_CODE (PATTERN (insn)) == SET) - src = SET_SRC (PATTERN (insn)); - else if (GET_CODE (PATTERN (insn)) == PARALLEL - || GET_CODE (PATTERN (insn)) == SEQUENCE) + + pattern = PATTERN (insn); + if (GET_CODE (pattern) == COND_EXEC) + pattern = COND_EXEC_CODE (pattern); + + if (GET_CODE (pattern) == SET) + src = SET_SRC (pattern); + else if (GET_CODE (pattern) == PARALLEL + || GET_CODE (pattern) == SEQUENCE) { - for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) - if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET - && SET_DEST (XVECEXP (PATTERN (insn), 0, i)) == loc) - src = SET_SRC (XVECEXP (PATTERN (insn), 0, i)); + for (i = XVECLEN (pattern, 0) - 1; i >= 0; i--) + if (GET_CODE (XVECEXP (pattern, 0, i)) == SET + && SET_DEST (XVECEXP (pattern, 0, i)) == loc) + src = SET_SRC (XVECEXP (pattern, 0, i)); } - if (REG_P (src)) + if (src && REG_P (src)) decl = var_debug_decl (REG_EXPR (src)); - else if (MEM_P (src)) + else if (src && MEM_P (src)) decl = var_debug_decl (MEM_EXPR (src)); if (src && decl) |