diff options
author | Olatunji Ruwase <tjruwase@google.com> | 2009-06-26 18:10:03 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2009-06-26 11:10:03 -0700 |
commit | efb303b1e80ea45e0f4595cea31f2934d7af16f8 (patch) | |
tree | c678b61dfc527900843787a7f2b7ab998a25fa29 /gcc/tree-mudflap.c | |
parent | 947e21c1fb25286b3c5e63fc3cd19c4318ee3672 (diff) | |
download | gcc-efb303b1e80ea45e0f4595cea31f2934d7af16f8.zip gcc-efb303b1e80ea45e0f4595cea31f2934d7af16f8.tar.gz gcc-efb303b1e80ea45e0f4595cea31f2934d7af16f8.tar.bz2 |
builtins.c (expand_builtin_alloca): Handle builtin alloca that is marked not to be inlined.
* builtins.c (expand_builtin_alloca): Handle builtin alloca
that is marked not to be inlined. Remove flag_mudflap use.
* tree-mudflap.c: Rename mf_xform_derefs to mf_xfrom_statements.
(mf_xform_statements): Mark builtin alloca calls as un-inlineable.
From-SVN: r148980
Diffstat (limited to 'gcc/tree-mudflap.c')
-rw-r--r-- | gcc/tree-mudflap.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index cfba33d..8fcafca 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -62,7 +62,7 @@ static tree mf_file_function_line_tree (location_t); /* Indirection-related instrumentation. */ static void mf_decl_cache_locals (void); static void mf_decl_clear_locals (void); -static void mf_xform_derefs (void); +static void mf_xform_statements (void); static unsigned int execute_mudflap_function_ops (void); /* Addressable variables instrumentation. */ @@ -416,13 +416,19 @@ mudflap_init (void) /* ------------------------------------------------------------------------ */ -/* Memory reference transforms. Perform the mudflap indirection-related - tree transforms on the current function. - - This is the second part of the mudflap instrumentation. It works on +/* This is the second part of the mudflap instrumentation. It works on low-level GIMPLE using the CFG, because we want to run this pass after tree optimizations have been performed, but we have to preserve the CFG - for expansion from trees to RTL. */ + for expansion from trees to RTL. + Below is the list of transformations performed on statements in the + current function. + + 1) Memory reference transforms: Perform the mudflap indirection-related + tree transforms on memory references. + + 2) Mark BUILTIN_ALLOCA calls not inlineable. + + */ static unsigned int execute_mudflap_function_ops (void) @@ -441,7 +447,7 @@ execute_mudflap_function_ops (void) if (! flag_mudflap_threads) mf_decl_cache_locals (); - mf_xform_derefs (); + mf_xform_statements (); if (! flag_mudflap_threads) mf_decl_clear_locals (); @@ -934,9 +940,12 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, mf_build_check_statement_for (base, limit, iter, location, dirflag); } - +/* Transform + 1) Memory references. + 2) BUILTIN_ALLOCA calls. +*/ static void -mf_xform_derefs (void) +mf_xform_statements (void) { basic_block bb, next; gimple_stmt_iterator i; @@ -974,6 +983,14 @@ mf_xform_derefs (void) } break; + case GIMPLE_CALL: + { + tree fndecl = gimple_call_fndecl (s); + if (fndecl && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA)) + gimple_call_set_cannot_inline (s, true); + } + break; + default: ; } |