Commit 0ef0421e by Caroline Tice Committed by Caroline Tice

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
parent dadda6ca
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> 2007-07-18 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/xtensa.c (xtensa_expand_mask_and_shift): New. * config/xtensa/xtensa.c (xtensa_expand_mask_and_shift): New.
......
...@@ -1806,27 +1806,33 @@ static enum var_init_status ...@@ -1806,27 +1806,33 @@ static enum var_init_status
find_src_status (dataflow_set *in, rtx loc, rtx insn) find_src_status (dataflow_set *in, rtx loc, rtx insn)
{ {
rtx src = NULL_RTX; rtx src = NULL_RTX;
rtx pattern;
tree decl = NULL_TREE; tree decl = NULL_TREE;
enum var_init_status status = VAR_INIT_STATUS_UNINITIALIZED; enum var_init_status status = VAR_INIT_STATUS_UNINITIALIZED;
if (! flag_var_tracking_uninit) if (! flag_var_tracking_uninit)
status = VAR_INIT_STATUS_INITIALIZED; status = VAR_INIT_STATUS_INITIALIZED;
if (GET_CODE (PATTERN (insn)) == SET) pattern = PATTERN (insn);
src = SET_SRC (PATTERN (insn));
else if (GET_CODE (PATTERN (insn)) == PARALLEL if (GET_CODE (pattern) == COND_EXEC)
|| GET_CODE (PATTERN (insn)) == SEQUENCE) 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; int i;
for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) for (i = XVECLEN (pattern, 0) - 1; i >= 0; i--)
if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET if (GET_CODE (XVECEXP (pattern, 0, i)) == SET
&& SET_DEST (XVECEXP (PATTERN (insn), 0, i)) == loc) && SET_DEST (XVECEXP (pattern, 0, i)) == loc)
src = SET_SRC (XVECEXP (PATTERN (insn), 0, i)); src = SET_SRC (XVECEXP (pattern, 0, i));
} }
if (REG_P (src)) if (src && REG_P (src))
decl = var_debug_decl (REG_EXPR (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)); decl = var_debug_decl (MEM_EXPR (src));
if (src && decl) if (src && decl)
...@@ -1845,26 +1851,32 @@ find_src_set_src (dataflow_set *set, rtx loc, rtx insn) ...@@ -1845,26 +1851,32 @@ find_src_set_src (dataflow_set *set, rtx loc, rtx insn)
tree decl = NULL_TREE; /* The variable being copied around. */ tree decl = NULL_TREE; /* The variable being copied around. */
rtx src = NULL_RTX; /* The location "decl" is being copied from. */ rtx src = NULL_RTX; /* The location "decl" is being copied from. */
rtx set_src = NULL_RTX; /* The value for "decl" stored in "src". */ rtx set_src = NULL_RTX; /* The value for "decl" stored in "src". */
rtx pattern;
void **slot; void **slot;
variable var; variable var;
location_chain nextp; location_chain nextp;
int i; int i;
bool found; bool found;
if (GET_CODE (PATTERN (insn)) == SET)
src = SET_SRC (PATTERN (insn)); pattern = PATTERN (insn);
else if (GET_CODE (PATTERN (insn)) == PARALLEL if (GET_CODE (pattern) == COND_EXEC)
|| GET_CODE (PATTERN (insn)) == SEQUENCE) 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--) for (i = XVECLEN (pattern, 0) - 1; i >= 0; i--)
if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET if (GET_CODE (XVECEXP (pattern, 0, i)) == SET
&& SET_DEST (XVECEXP (PATTERN (insn), 0, i)) == loc) && SET_DEST (XVECEXP (pattern, 0, i)) == loc)
src = SET_SRC (XVECEXP (PATTERN (insn), 0, i)); src = SET_SRC (XVECEXP (pattern, 0, i));
} }
if (REG_P (src)) if (src && REG_P (src))
decl = var_debug_decl (REG_EXPR (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)); decl = var_debug_decl (MEM_EXPR (src));
if (src && decl) if (src && decl)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment