diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2010-07-23 19:37:40 +0000 |
---|---|---|
committer | H.J. Lu <hongjiu.lu@intel.com> | 2010-07-23 19:37:40 +0000 |
commit | e59b0ef2e7a1fb44791d473ee416aeb01fcb169c (patch) | |
tree | 437dca120093cc7b1f6debf6f6b31779526c7192 /gcc/tree-mudflap.c | |
parent | f25b023a0d9de6a6c1e1965d93ba6028cb03fc7d (diff) | |
parent | 92ac755201aad4366eaff2b75b3239637bee3590 (diff) |
Merged with trunk at revision 162480.ifunc
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ifunc@162483 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-mudflap.c')
-rw-r--r-- | gcc/tree-mudflap.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index 2437bc48470..99c5bce1726 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -322,7 +322,7 @@ mf_make_mf_cache_struct_type (tree field_type) tree struct_type = make_node (RECORD_TYPE); DECL_CONTEXT (fieldlo) = struct_type; DECL_CONTEXT (fieldhi) = struct_type; - TREE_CHAIN (fieldlo) = fieldhi; + DECL_CHAIN (fieldlo) = fieldhi; TYPE_FIELDS (struct_type) = fieldlo; TYPE_NAME (struct_type) = get_identifier ("__mf_cache"); layout_type (struct_type); @@ -622,7 +622,7 @@ mf_build_check_statement_for (tree base, tree limit, u = build3 (COMPONENT_REF, mf_uintptr_type, build1 (INDIRECT_REF, mf_cache_struct_type, mf_elem), - TREE_CHAIN (TYPE_FIELDS (mf_cache_struct_type)), NULL_TREE); + DECL_CHAIN (TYPE_FIELDS (mf_cache_struct_type)), NULL_TREE); v = mf_limit; @@ -790,7 +790,8 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, } else if (TREE_CODE (var) == COMPONENT_REF) var = TREE_OPERAND (var, 0); - else if (INDIRECT_REF_P (var)) + else if (INDIRECT_REF_P (var) + || TREE_CODE (var) == MEM_REF) { base = TREE_OPERAND (var, 0); break; @@ -868,6 +869,18 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, size_int (-1)); break; + case MEM_REF: + addr = build2 (POINTER_PLUS_EXPR, TREE_TYPE (TREE_OPERAND (t, 1)), + TREE_OPERAND (t, 0), + fold_convert (sizetype, TREE_OPERAND (t, 1))); + base = addr; + limit = fold_build2_loc (location, POINTER_PLUS_EXPR, ptr_type_node, + fold_build2_loc (location, + POINTER_PLUS_EXPR, ptr_type_node, base, + size), + size_int (-1)); + break; + case TARGET_MEM_REF: addr = tree_mem_ref_addr (ptr_type_node, t); base = addr; @@ -1061,7 +1074,7 @@ mx_register_decls (tree decl, gimple_seq seq, location_t location) unregister_fncall = gimple_build_call (mf_unregister_fndecl, 3, unregister_fncall_param, size, - build_int_cst (NULL_TREE, 3)); + integer_three_node); variable_name = mf_varname_tree (decl); @@ -1074,7 +1087,7 @@ mx_register_decls (tree decl, gimple_seq seq, location_t location) register_fncall = gimple_build_call (mf_register_fndecl, 4, register_fncall_param, size, - build_int_cst (NULL_TREE, 3), + integer_three_node, variable_name); @@ -1101,7 +1114,7 @@ mx_register_decls (tree decl, gimple_seq seq, location_t location) mf_mark (decl); } - decl = TREE_CHAIN (decl); + decl = DECL_CHAIN (decl); } /* Actually, (initially_stmts!=NULL) <=> (finally_stmts!=NULL) */ |