[PATCH][compare-elim] Fix PR rtl-optimization/82597

Eric Botcazou ebotcazou@adacore.com
Wed Nov 1 13:32:00 GMT 2017


> Here is an untested patch (only tried the cmpelim_mult_uses_1.c testcase in
> aarch64 cross) that does that.  I don't have aarch64 boxes around for easy
> trunk testing, can bootstrap/regtest it on x86_64-linux/i686-linux and
> maybe powerpc64le-linux though.
> 
> If the memset (last_setter, 0, sizeof (last_setter)); for each bb is a
> problem (maybe for ia64/mmix/mips which have huge numbers of hard
> registers), one possibility would be to put the array into
> find_comparison_dom_walker class, clear it only in the constructor and have
> next to it an auto_vec into which we'd push the REGNOs we've set
> last_setter to non-NULL where previously they were NULL, then instead of
> clearing the whole vector we'd just pop all the REGNOs from the vector and
> clear just those.
> One extra advantage would be that we could also cheaply clear the
> last_setter entries when seeing some following flags setter, user,
> call/jump/asm_input (stuff that can_merge_compare_into_arith verifies).
> 
> 2017-10-31  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR rtl-optimization/82778
> 	PR rtl-optimization/82597
> 	* compare-elim.c (struct comparison): Add in_a_setter field.
> 	(find_comparison_dom_walker::before_dom_children): Remove killed
> 	bitmap and df_simulate_find_defs call, instead walk the defs.
> 	Compute last_setter and initialize in_a_setter.  Merge definitions
> 	with first initialization for a few variables.
> 	(try_validate_parallel): Use insn_invalid_p instead of
> 	recog_memoized.  Return insn rather than just the pattern.
> 	(try_merge_compare): Fix up comment.  Don't uselessly test if
> 	in_a is a REG_P.  Use cmp->in_a_setter instead of walking UD
> 	chains.
> 
> 	* g++.dg/opt/pr82778.C: New test.
> 
> 2017-10-31  Michael Collison  <michael.collison@arm.com>
> 
> 	PR rtl-optimization/82597
> 	* gcc.dg/pr82597.c: New test.

That's a clear progress, but the patch doesn't fully get rid of use-def and 
def-use chains, does it?

-- 
Eric Botcazou



More information about the Gcc-patches mailing list