2014-05-23  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/53787
	* params.def (PARAM_IPA_MAX_AA_STEPS): New param.
	* ipa-prop.h (ipa_node_params): Rename uses_analysis_done to
	analysis_done, update all uses.
	* ipa-prop.c: Include domwalk.h
	(param_analysis_info): Removed.
	(param_aa_status): New type.
	(ipa_bb_info): Likewise.
	(func_body_info): Likewise.
	(ipa_get_bb_info): New function.
	(aa_overwalked): Likewise.
	(find_dominating_aa_status): Likewise.
	(parm_bb_aa_status_for_bb): Likewise.
	(parm_preserved_before_stmt_p): Changed to use new param AA info.
	(load_from_unmodified_param): Accept func_body_info as a parameter
	instead of parms_ainfo.
	(parm_ref_data_preserved_p): Changed to use new param AA info.
	(parm_ref_data_pass_through_p): Likewise.
	(ipa_load_from_parm_agg_1): Likewise.  Update callers.
	(compute_complex_assign_jump_func): Changed to use new param AA info.
	(compute_complex_ancestor_jump_func): Likewise.
	(ipa_compute_jump_functions_for_edge): Likewise.
	(ipa_compute_jump_functions): Removed.
	(ipa_compute_jump_functions_for_bb): New function.
	(ipa_analyze_indirect_call_uses): Likewise, moved variable
	declarations down.
	(ipa_analyze_virtual_call_uses): Accept func_body_info instead of node
	and info, moved variable declarations down.
	(ipa_analyze_call_uses): Accept and pass on func_body_info instead of
	node and info.
	(ipa_analyze_stmt_uses): Likewise.
	(ipa_analyze_params_uses): Removed.
	(ipa_analyze_params_uses_in_bb): New function.
	(ipa_analyze_controlled_uses): Likewise.
	(free_ipa_bb_info): Likewise.
	(analysis_dom_walker): New class.
	(ipa_analyze_node): Handle node-specific forbidden analysis,
	initialize and free func_body_info, use dominator walker.
	(ipcp_modif_dom_walker): New class.
	(ipcp_transform_function): Create and free func_body_info, use
	ipcp_modif_dom_walker, moved a lot of functionality there.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210864 138bc75d-0d04-0410-961f-82ee72b054a4
[PATCH 1/9] rs6000: Clean up the "type" attribute

Get rid of the one huge line.  Group and order things a bit.  Further
changes will follow so this doesn't try to make it perfect.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210865 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: New type attribute value "halfmul"

This is for the legacy integer multiply-accumulate instructions.
Quite a mouthful, and "mulhw" is also a terrible name since we already
have a machine instruction called exactly that.  Hence "halfmul".

Also fixes the titan automaton description for this.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210866 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all multiply instructions one type

This uses the attributes "size" and "dot" to specify the differences:

	imul3 -> mul size=8
	imul2 -> mul size=16
	imul -> mul size=32
	lmul -> mul size=64
	imul_compare -> mul size=32 dot=yes
	lmul_compare -> mul size=64 dot=yes


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210867 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all insert instructions one type

This uses the attribute "size" to specify the differences:

	insert_word  -> insert size=32
	insert_dword -> insert size=64

It could use "dot" as well, but the current code doesn't handle that.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210868 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all divide instructions one type

This uses the attribute "size" to specify the differences:

	idiv -> div size=32
	ldiv -> div size=64

It could use "dot" as well, but the current code doesn't handle that.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210869 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all shift instructions one type

This uses the attributes "var_shift" and "dot" to specify the differences:

	var_shift_rotate    -> shift var_shift=yes
	delayed_compare     -> shift var_shift=no  dot=yes
	var_delayed_compare -> shift var_shift=yes dot=yes


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210870 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all add instructions one type

They are currently just "integer", but the dot version is fast_compare.
This makes them all "add".  Later we should introduce attributes to
distinguish e.g. addc and adde (which aren't currently handled as
separate instructions at all, only in groups).


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210871 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all logical instructions one type

They are currently just "integer", but the dot version is fast_compare.
This makes them all "logical".


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210872 138bc75d-0d04-0410-961f-82ee72b054a4
rs6000: Make all rlw*nm and rld*c* type shift

They are often labeled just "integer" currently.  Fix that.

Also handle shift properly in those scheduling descriptions that
neglected it.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210873 138bc75d-0d04-0410-961f-82ee72b054a4