• meissner's avatar
    2014-09-19 Michael Meissner <meissner@linux.vnet.ibm.com> · 1e495278
    meissner authored
    	Back port from trunk:
    	2014-09-19  Michael Meissner  <meissner@linux.vnet.ibm.com>
    
    	* config/rs6000/predicates.md (fusion_gpr_mem_load): Move testing
    	for base_reg_operand to be common between LO_SUM and PLUS.
    	(fusion_gpr_mem_combo): New predicate to match a fused address
    	that combines the addis and memory offset address.
    
    	* config/rs6000/rs6000-protos.h (fusion_gpr_load_p): Change
    	calling signature.
    	(emit_fusion_gpr_load): Likewise.
    
    	* config/rs6000/rs6000.c (fusion_gpr_load_p): Change calling
    	signature to pass each argument separately, rather than
    	using an operands array.  Rewrite the insns found by peephole2 to
    	be a single insn, rather than hoping the insns will still be
    	together when the peephole pass is done.  Drop being called via a
    	normal peephole.
    	(emit_fusion_gpr_load): Change calling signature to be called from
    	the fusion_gpr_load_<mode> insns with a combined memory address
    	instead of the peephole pass passing the addis and offset
    	separately.
    
    	* config/rs6000/rs6000.md (UNSPEC_FUSION_GPR): New unspec for GPR
    	fusion.
    	(power8 fusion peephole): Drop support for doing power8 via a
    	normal peephole that was created by the peephole2 pass.
    	(power8 fusion peephole2): Create a new insn with the fused
    	address, so that the fused operation is kept together after
    	register allocation is done.
    	(fusion_gpr_load_<mode>): Likewise.
    
    
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@215405 138bc75d-0d04-0410-961f-82ee72b054a4
    1e495278
rs6000.c 982 KB