]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/config/rs6000/rs6000-protos.h
re PR target/58160 (Power8 fusion support has a bug that shows up in running spec...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Fri, 16 Aug 2013 15:28:13 +0000 (15:28 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Fri, 16 Aug 2013 15:28:13 +0000 (15:28 +0000)
commitf758f2992f61a18b961a151e0e8b7bac68310356
treef4f06576ee4408489e14b1870e5281ac8184bff7
parent158f4e4f46cab61f09dfce1ff2ac7dbfec8bb615
re PR target/58160 (Power8 fusion support has a bug that shows up in running spec 2006)

2013-08-14  Michael Meissner  <meissner@linux.vnet.ibm.com>

PR target/58160
* config/rs6000/predicates.md (fusion_gpr_mem_load): Allow the
memory rtx to contain ZERO_EXTEND and SIGN_EXTEND.

* config/rs6000/rs6000-protos.h (fusion_gpr_load_p): Pass operands
array instead of each individual operand as a separate argument.
(emit_fusion_gpr_load): Likewise.
(expand_fusion_gpr_load): Add new function declaration.

* config/rs6000/rs6000.c (fusion_gpr_load_p): Change the calling
signature to have the operands passed as an array, instead of as
separate arguments.  Allow ZERO_EXTEND to be in the memory
address, and also SIGN_EXTEND if -mpower8-fusion-sign.  Do not
depend on the register live/dead flags when peepholes are run.
(expand_fusion_gpr_load): New function to be called from the
peephole2 pass, to change the register that addis sets to be the
target register.
(emit_fusion_gpr_load): Change the calling signature to have the
operands passed as an array, instead of as separate arguments.
Allow ZERO_EXTEND to be in the memory address, and also
SIGN_EXTEND if -mpower8-fusion-sign.

* config/rs6000/rs6000.md (UNSPEC_FUSION_GPR): Delete unused
unspec enumeration.
(power8 fusion peephole/peephole2): Rework the fusion peepholes to
adjust the register addis loads up in the peephole2 pass.  Do not
depend on the register live/dead state when the peephole pass is
done.

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