r265991 - in /trunk/gcc: ChangeLog config/s390/...

iii@gcc.gnu.org iii@gcc.gnu.org
Fri Nov 9 20:33:00 GMT 2018


Author: iii
Date: Fri Nov  9 20:33:19 2018
New Revision: 265991

URL: https://gcc.gnu.org/viewcvs?rev=265991&root=gcc&view=rev
Log:
S/390: Allow relative addressing of literal pool entries

r265490 allowed the compiler to choose in a more flexible way whether to
use load or load-address-relative-long (LARL) instruction.  When it
chose LARL for literal pool references, the latter ones were rewritten
by pass_s390_early_mach to use UNSPEC_LTREF, which assumes base register
usage, which in turn is not compatible with LARL.  The end result was an
ICE because of unrecognizable insn.

UNSPEC_LTREF and friends are necessary in order to communicate the
dependency on the base register to pass_sched2.  When relative
addressing is used, no base register is necessary, so in such cases the
rewrite must be avoided.

gcc/ChangeLog:

2018-11-09  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR target/87762
	* config/s390/s390.c (s390_safe_relative_long_p): New function.
	(annotate_constant_pool_refs): Skip insns which support
	relative addressing.
	(annotate_constant_pool_refs_1): New helper function.
	(find_constant_pool_ref): Skip insns which support relative
	addression.
	(find_constant_pool_ref_1): New helper function.
	(replace_constant_pool_ref): Skip insns which support
	relative addressing.
	(replace_constant_pool_ref_1): New helper function.
	(s390_mainpool_start): Adapt to the new signature.
	(s390_mainpool_finish): Likewise.
	(s390_chunkify_start): Likewise.
	(s390_chunkify_finish): Likewise.
	(pass_s390_early_mach::execute): Likewise.
	(s390_prologue_plus_offset): Likewise.
	(s390_emit_prologue): Likewise.
	(s390_emit_epilogue): Likewise.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/s390/s390.c



More information about the Gcc-cvs mailing list