Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Alexander_Naumov:SLE12
gcc33
nov161594.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nov161594.diff of Package gcc33
Index: gcc/gcse.c =================================================================== --- gcc/gcse.c.orig +++ gcc/gcse.c @@ -688,7 +688,6 @@ static void find_moveable_store PARAMS static int compute_store_table PARAMS ((void)); static bool load_kills_store PARAMS ((rtx, rtx, int)); static bool find_loads PARAMS ((rtx, rtx, int)); -static bool local_variable_p (struct ls_expr *ptr); static bool store_killed_in_insn PARAMS ((rtx, rtx, rtx, int)); static bool store_killed_after PARAMS ((rtx, rtx, rtx, basic_block, int *, rtx *)); @@ -7298,25 +7297,6 @@ find_loads (x, store_pattern, after) return ret; } -/* Checks if mem in PTR corresponds to a local variable. */ -static bool -local_variable_p (struct ls_expr *ptr) -{ - rtx base; - - /* This optimization is performed by faking a store to the - memory at the end of the block. This doesn't work for - unchanging memories because multiple stores to unchanging - memory is illegal and alias analysis doesn't consider it. */ - if (RTX_UNCHANGING_P (ptr->pattern)) - return 0; - base = find_base_term (XEXP (ptr->pattern, 0)); - return (base - && GET_CODE (base) == ADDRESS - && GET_MODE (base) == Pmode - && XEXP (base, 0) == frame_pointer_rtx); -} - /* Check if INSN kills the store pattern X (is aliased with it). AFTER is true if we are checking the case when store X occurs after the insn. Return true if it it does. */ @@ -7540,14 +7520,17 @@ build_store_vectors () for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr)) { - /* If this is a reference to a local variable, add the fake store - before end of function. This takes care of dead code ellimination - for them. */ - if (!local_variable_p (ptr)) - continue; - - if (!TEST_BIT (ae_kill[bb->index], ptr->index)) - SET_BIT (st_antloc[bb->index], ptr->index); + if (store_killed_after (ptr->pattern, ptr->pattern_regs, BB_HEAD (bb), + bb, regs_set_in_block, NULL)) + { + /* It should not be necessary to consider the expression + killed if it is both anticipatable and available. */ + if (!TEST_BIT (st_antloc[bb->index], ptr->index) + || !TEST_BIT (ae_gen[bb->index], ptr->index)) + SET_BIT (ae_kill[bb->index], ptr->index); + } + else + SET_BIT (transp[bb->index], ptr->index); } }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor