diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2013-03-09 07:54:02 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2013-03-09 07:54:02 +0000 |
commit | 4b1baac81ff353bf0e3cea5c972a864db361355c (patch) | |
tree | 6f0f3cdaa7c97b4ffb3074c195483271e15c9cc5 /gcc/tree.h | |
parent | cc107acf8d31160a54c0ba669fc3db0aec6548aa (diff) | |
download | gcc-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.h | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -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. */ |