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. From-SVN: r265991
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
2064.md | Loading commit data... | |
2084.md | Loading commit data... | |
2097.md | Loading commit data... | |
2817.md | Loading commit data... | |
2827.md | Loading commit data... | |
2964.md | Loading commit data... | |
constraints.md | Loading commit data... | |
driver-native.c | Loading commit data... | |
htmintrin.h | Loading commit data... | |
htmxlintrin.h | Loading commit data... | |
linux.h | Loading commit data... | |
predicates.md | Loading commit data... | |
s390-builtin-types.def | Loading commit data... | |
s390-builtins.def | Loading commit data... | |
s390-builtins.h | Loading commit data... | |
s390-c.c | Loading commit data... | |
s390-d.c | Loading commit data... | |
s390-modes.def | Loading commit data... | |
s390-opts.h | Loading commit data... | |
s390-passes.def | Loading commit data... | |
s390-protos.h | Loading commit data... | |
s390.c | Loading commit data... | |
s390.h | Loading commit data... | |
s390.md | Loading commit data... | |
s390.opt | Loading commit data... | |
s390intrin.h | Loading commit data... | |
s390x.h | Loading commit data... | |
subst.md | Loading commit data... | |
t-linux64 | Loading commit data... | |
t-s390 | Loading commit data... | |
tpf.h | Loading commit data... | |
tpf.md | Loading commit data... | |
tpf.opt | Loading commit data... | |
vecintrin.h | Loading commit data... | |
vector.md | Loading commit data... | |
vx-builtins.md | Loading commit data... | |
x-native | Loading commit data... |