aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2013-03-09 07:54:02 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2013-03-09 07:54:02 +0000
commit4b1baac81ff353bf0e3cea5c972a864db361355c (patch)
tree6f0f3cdaa7c97b4ffb3074c195483271e15c9cc5 /gcc/tree.h
parentcc107acf8d31160a54c0ba669fc3db0aec6548aa (diff)
downloadgcc-4b1baac81ff353bf0e3cea5c972a864db361355c.zip
gcc-4b1baac81ff353bf0e3cea5c972a864db361355c.tar.gz
gcc-4b1baac81ff353bf0e3cea5c972a864db361355c.tar.bz2
re PR middle-end/56524 (Compiler ICE when compiling with -mips16)
gcc/ PR middle-end/56524 * tree.h (tree_optimization_option): Rename target_optabs to optabs. Add base_optabs. (TREE_OPTIMIZATION_OPTABS): Update after previous field change. (TREE_OPTIMIZATION_BASE_OPTABS): New macro. (save_optabs_if_changed): Replace with... (init_tree_optimization_optabs): ...this. * optabs.c (save_optabs_if_changed): Rename to... (init_tree_optimization_optabs): ...this. Take the optimization node as argument. Do nothing if the base optabs are already correct. Reuse the existing TREE_OPTIMIZATION_OPTABS memory if we need to recompute optabs. * function.h (function): Remove optabs field. * function.c (invoke_set_current_function_hook): Call init_tree_optimization_optabs. Use the result to initialize this_fn_optabs. gcc/c-family/ PR middle-end/56524 * c-common.c (handle_optimize_attribute): Don't call save_optabs_if_changed. gcc/testsuite/ PR middle-end/56524 * gcc.target/mips/pr56524.c: New test. From-SVN: r196570
Diffstat (limited to 'gcc/tree.h')
-rw-r--r--gcc/tree.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/tree.h b/gcc/tree.h
index 740d438..b852f1d 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -3589,21 +3589,26 @@ struct GTY(()) tree_optimization_option {
/* Target optabs for this set of optimization options. This is of
type `struct target_optabs *'. */
- unsigned char *GTY ((atomic)) target_optabs;
+ unsigned char *GTY ((atomic)) optabs;
+
+ /* The value of this_target_optabs against which the optabs above were
+ generated. */
+ struct target_optabs *GTY ((skip)) base_optabs;
};
#define TREE_OPTIMIZATION(NODE) \
(&OPTIMIZATION_NODE_CHECK (NODE)->optimization.opts)
#define TREE_OPTIMIZATION_OPTABS(NODE) \
- (OPTIMIZATION_NODE_CHECK (NODE)->optimization.target_optabs)
+ (OPTIMIZATION_NODE_CHECK (NODE)->optimization.optabs)
+
+#define TREE_OPTIMIZATION_BASE_OPTABS(NODE) \
+ (OPTIMIZATION_NODE_CHECK (NODE)->optimization.base_optabs)
/* Return a tree node that encapsulates the current optimization options. */
extern tree build_optimization_node (void);
-/* Save a new set of target_optabs in a TREE_OPTIMIZATION node if the
- current set of optabs has changed. */
-extern void save_optabs_if_changed (tree);
+extern void init_tree_optimization_optabs (tree);
/* Target options used by a function. */