From: Richard Henderson Date: Sat, 7 Aug 1999 18:39:03 +0000 (-0700) Subject: function.c (init_function_start): Clear prologue & epilogue. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5c7675e906021641485a90e7cc4e9171194e937e;p=gcc.git function.c (init_function_start): Clear prologue & epilogue. * function.c (init_function_start): Clear prologue & epilogue. (prologue_epilogue_contains): New function. * alias.c (init_alias_analysis): Use it. * rtl.h (prologue_epilogue_contains): Declare it. From-SVN: r28585 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a6b9b6d3a2..a1cc202bbe4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Sat Aug 7 19:37:07 1999 Richard Henderson + + * function.c (init_function_start): Clear prologue & epilogue. + (prologue_epilogue_contains): New function. + * alias.c (init_alias_analysis): Use it. + * rtl.h (prologue_epilogue_contains): Declare it. + Sat Aug 7 19:32:16 1999 Richard Henderson * jump.c (onlyjump_p): New function. diff --git a/gcc/alias.c b/gcc/alias.c index 9d8aac7832a..63c9efd1aaa 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -1468,6 +1468,8 @@ init_alias_analysis () /* Walk the insns adding values to the new_reg_base_value array. */ for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { + if (prologue_epilogue_contains (insn)) + continue; if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') { rtx note, set; diff --git a/gcc/function.c b/gcc/function.c index 3467de0c708..e25d676e579 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -376,6 +376,10 @@ struct function *current_function = 0; /* Global list of all compiled functions. */ struct function *all_functions = 0; + +/* These arrays record the INSN_UIDs of the prologue and epilogue insns. */ +static int *prologue; +static int *epilogue; /* In order to evaluate some expressions, such as function calls returning structures in memory, we need to temporarily allocate stack locations. @@ -6050,6 +6054,9 @@ init_function_start (subr, filename, line) current_function_returns_pointer = POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (subr))); + + /* No prologue/epilogue insns yet. */ + prologue = epilogue = 0; } /* Indicate that the current function uses extra args @@ -6656,11 +6663,6 @@ expand_function_end (filename, line, end_bindings) expand_fixups (get_insns ()); } -/* These arrays record the INSN_UIDs of the prologue and epilogue insns. */ - -static int *prologue; -static int *epilogue; - /* Create an array that records the INSN_UIDs of INSNS (either a sequence or a single insn). */ @@ -6715,6 +6717,17 @@ contains (insn, vec) } return 0; } + +int +prologue_epilogue_contains (insn) + rtx insn; +{ + if (prologue && contains (insn, prologue)) + return 1; + if (epilogue && contains (insn, epilogue)) + return 1; + return 0; +} #endif /* HAVE_prologue || HAVE_epilogue */ /* Generate the prologue and epilogue RTL if the machine supports it. Thread @@ -6727,7 +6740,6 @@ thread_prologue_and_epilogue_insns (f) { int insertted = 0; - prologue = 0; #ifdef HAVE_prologue if (HAVE_prologue) { @@ -6762,7 +6774,6 @@ thread_prologue_and_epilogue_insns (f) } #endif - epilogue = 0; #ifdef HAVE_epilogue if (HAVE_epilogue) { diff --git a/gcc/rtl.h b/gcc/rtl.h index a0bd720e2fb..c39bd10b1ac 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1452,6 +1452,7 @@ extern void record_excess_regs PROTO ((rtx, rtx, rtx *)); /* In function.c */ extern void reposition_prologue_and_epilogue_notes PROTO ((rtx)); extern void thread_prologue_and_epilogue_insns PROTO ((rtx)); +extern int prologue_epilogue_contains PROTO ((rtx)); extern void use_variable PROTO ((rtx)); extern HOST_WIDE_INT get_frame_size PROTO ((void)); extern void preserve_rtl_expr_result PROTO ((rtx));