aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-mudflap.c
diff options
context:
space:
mode:
authorOlatunji Ruwase <tjruwase@google.com>2009-06-26 18:10:03 +0000
committerRichard Henderson <rth@gcc.gnu.org>2009-06-26 11:10:03 -0700
commitefb303b1e80ea45e0f4595cea31f2934d7af16f8 (patch)
treec678b61dfc527900843787a7f2b7ab998a25fa29 /gcc/tree-mudflap.c
parent947e21c1fb25286b3c5e63fc3cd19c4318ee3672 (diff)
downloadgcc-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.c35
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:
;
}