]> git.ipfire.org Git - thirdparty/gcc.git/commit
backport: predicates.md (fusion_gpr_mem_load): Move testing for base_reg_operand...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Fri, 19 Sep 2014 22:14:58 +0000 (22:14 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Fri, 19 Sep 2014 22:14:58 +0000 (22:14 +0000)
commitecf9149175ff5ca79b571b4521c307c4c82f7c21
tree8632997fefdd52494ffe2c14efdce097e773793b
parent8219a7005bde070b32ed1046c84b22ec050b45f5
backport: predicates.md (fusion_gpr_mem_load): Move testing for base_reg_operand to be common between LO_SUM and PLUS.

2014-09-19  Michael Meissner  <meissner@linux.vnet.ibm.com>

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.

From-SVN: r215406
gcc/ChangeLog
gcc/config/rs6000/predicates.md
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md