Skip to content
Snippets Groups Projects
  • Richard Earnshaw's avatar
    64ce76d9
    cselib: add function to check if SET is redundant [PR106187] · 64ce76d9
    Richard Earnshaw authored
    A SET operation that writes memory may have the same value as an
    earlier store but if the alias sets of the new and earlier store do
    not conflict then the set is not truly redundant.  This can happen,
    for example, if objects of different types share a stack slot.
    
    To fix this we define a new function in cselib that first checks for
    equality and if that is successful then finds the earlier store in the
    value history and checks the alias sets.
    
    The routine is used in two places elsewhere in the compiler:
    cfgcleanup and postreload.
    
    gcc/ChangeLog:
    
    	PR rtl-optimization/106187
    	* alias.h (mems_same_for_tbaa_p): Declare.
    	* alias.cc (mems_same_for_tbaa_p): New function.
    	* dse.cc (record_store): Use it instead of open-coding
    	alias check.
    	* cselib.h (cselib_redundant_set_p): Declare.
    	* cselib.cc: Include alias.h
    	(cselib_redundant_set_p): New function.
    	* cfgcleanup.cc: (mark_effect): Use cselib_redundant_set_p instead
    	of rtx_equal_for_cselib_p.
    	* postreload.cc (reload_cse_simplify): Use cselib_redundant_set_p.
    	(reload_cse_noop_set_p): Delete.
    64ce76d9
    History
    cselib: add function to check if SET is redundant [PR106187]
    Richard Earnshaw authored
    A SET operation that writes memory may have the same value as an
    earlier store but if the alias sets of the new and earlier store do
    not conflict then the set is not truly redundant.  This can happen,
    for example, if objects of different types share a stack slot.
    
    To fix this we define a new function in cselib that first checks for
    equality and if that is successful then finds the earlier store in the
    value history and checks the alias sets.
    
    The routine is used in two places elsewhere in the compiler:
    cfgcleanup and postreload.
    
    gcc/ChangeLog:
    
    	PR rtl-optimization/106187
    	* alias.h (mems_same_for_tbaa_p): Declare.
    	* alias.cc (mems_same_for_tbaa_p): New function.
    	* dse.cc (record_store): Use it instead of open-coding
    	alias check.
    	* cselib.h (cselib_redundant_set_p): Declare.
    	* cselib.cc: Include alias.h
    	(cselib_redundant_set_p): New function.
    	* cfgcleanup.cc: (mark_effect): Use cselib_redundant_set_p instead
    	of rtx_equal_for_cselib_p.
    	* postreload.cc (reload_cse_simplify): Use cselib_redundant_set_p.
    	(reload_cse_noop_set_p): Delete.