+2020-03-27 Alan Modra <amodra@gmail.com>
+
+ PR target/94145
+ * config/rs6000/rs6000.c (rs6000_longcall_ref): Use unspec_volatile
+ for PLT16_LO and PLT_PCREL.
+ * config/rs6000/rs6000.md (UNSPEC_PLT16_LO, UNSPEC_PLT_PCREL): Remove.
+ (UNSPECV_PLT16_LO, UNSPECV_PLT_PCREL): Define.
+ (pltseq_plt16_lo_, pltseq_plt_pcrel): Use unspec_volatile.
+
2020-03-27 Martin Sebor <msebor@redhat.com>
PR c++/94098
if (rs6000_pcrel_p (cfun))
{
rtx reg = gen_rtx_REG (Pmode, regno);
- rtx u = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, base, call_ref, arg),
- UNSPEC_PLT_PCREL);
+ rtx u = gen_rtx_UNSPEC_VOLATILE (Pmode,
+ gen_rtvec (3, base, call_ref, arg),
+ UNSPECV_PLT_PCREL);
emit_insn (gen_rtx_SET (reg, u));
return reg;
}
rtx reg = gen_rtx_REG (Pmode, regno);
rtx hi = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, base, call_ref, arg),
UNSPEC_PLT16_HA);
- rtx lo = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, reg, call_ref, arg),
- UNSPEC_PLT16_LO);
+ rtx lo = gen_rtx_UNSPEC_VOLATILE (Pmode,
+ gen_rtvec (3, reg, call_ref, arg),
+ UNSPECV_PLT16_LO);
emit_insn (gen_rtx_SET (reg, hi));
emit_insn (gen_rtx_SET (reg, lo));
return reg;
UNSPEC_SI_FROM_SF
UNSPEC_PLTSEQ
UNSPEC_PLT16_HA
- UNSPEC_PLT16_LO
- UNSPEC_PLT_PCREL
])
;;
UNSPECV_MTFSB1 ; Set FPSCR Field bit to 1
UNSPECV_SPLIT_STACK_RETURN ; A camouflaged return
UNSPECV_SPEC_BARRIER ; Speculation barrier
+ UNSPECV_PLT16_LO
+ UNSPECV_PLT_PCREL
])
; The three different kinds of epilogue.
(define_insn "*pltseq_plt16_lo_<mode>"
[(set (match_operand:P 0 "gpc_reg_operand" "=r")
- (unspec:P [(match_operand:P 1 "gpc_reg_operand" "b")
- (match_operand:P 2 "symbol_ref_operand" "s")
- (match_operand:P 3 "" "")]
- UNSPEC_PLT16_LO))]
+ (unspec_volatile:P [(match_operand:P 1 "gpc_reg_operand" "b")
+ (match_operand:P 2 "symbol_ref_operand" "s")
+ (match_operand:P 3 "" "")]
+ UNSPECV_PLT16_LO))]
"TARGET_PLTSEQ"
{
return rs6000_pltseq_template (operands, RS6000_PLTSEQ_PLT16_LO);
(define_insn "*pltseq_plt_pcrel<mode>"
[(set (match_operand:P 0 "gpc_reg_operand" "=r")
- (unspec:P [(match_operand:P 1 "" "")
- (match_operand:P 2 "symbol_ref_operand" "s")
- (match_operand:P 3 "" "")]
- UNSPEC_PLT_PCREL))]
+ (unspec_volatile:P [(match_operand:P 1 "" "")
+ (match_operand:P 2 "symbol_ref_operand" "s")
+ (match_operand:P 3 "" "")]
+ UNSPECV_PLT_PCREL))]
"HAVE_AS_PLTSEQ && TARGET_ELF
&& rs6000_pcrel_p (cfun)"
{