aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/pa/pa.c
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2016-06-06 12:31:59 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2016-06-06 12:31:59 +0000
commit93671519e202e3bc5ab592bb6318aa738e4ae58f (patch)
tree4c408260aa6953423d714fd94976bb8529014f19 /gcc/config/pa/pa.c
parent690f24b7754826f08fc19119dd3a30a6c07e9919 (diff)
downloadgcc-93671519e202e3bc5ab592bb6318aa738e4ae58f.zip
gcc-93671519e202e3bc5ab592bb6318aa738e4ae58f.tar.gz
gcc-93671519e202e3bc5ab592bb6318aa738e4ae58f.tar.bz2
re PR c/24414 (Old-style asms don't clobber memory)
gcc/ 2016-06-06 Bernd Edlinger <bernd.edlinger@hotmail.de> PR c/24414 * cfgexpand.c (expand_asm_loc): Remove handling for ADDR_EXPR. Implicitly clobber memory for basic asm with non-empty assembler string. Use targetm.md_asm_adjust also here. * compare-elim.c (arithmetic_flags_clobber_p): Use asm_noperands here. * final.c (final_scan_insn): Handle basic asm in PARALLEL block. * gimple.c (gimple_asm_clobbers_memory_p): Handle basic asm with non-empty assembler string. * ira.c (compute_regs_asm_clobbered): Use asm_noperands here. * recog.c (asm_noperands): Handle basic asm in PARALLEL block. (decode_asm_operands): Handle basic asm in PARALLEL block. (extract_insn): Handle basic asm in PARALLEL block. * doc/extend.texi: Mention new behavior of basic asm. * config/ia64/ia64 (rtx_needs_barrier): Handle ASM_INPUT here. * config/pa/pa.c (branch_to_delay_slot_p, branch_needs_nop_p, branch_needs_nop_p): Use asm_noperands. gcc/testsuite/ 2016-06-06 Bernd Edlinger <bernd.edlinger@hotmail.de> PR c/24414 * gcc.target/i386/pr24414.c: New test. From-SVN: r237133
Diffstat (limited to 'gcc/config/pa/pa.c')
-rw-r--r--gcc/config/pa/pa.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 8b1c832..a78405a 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -6442,7 +6442,7 @@ branch_to_delay_slot_p (rtx_insn *insn)
the branch is followed by an asm. */
if (!insn
|| GET_CODE (PATTERN (insn)) == ASM_INPUT
- || extract_asm_operands (PATTERN (insn)) != NULL_RTX
+ || asm_noperands (PATTERN (insn)) >= 0
|| get_attr_length (insn) > 0)
break;
}
@@ -6473,7 +6473,7 @@ branch_needs_nop_p (rtx_insn *insn)
return TRUE;
if (!(GET_CODE (PATTERN (insn)) == ASM_INPUT
- || extract_asm_operands (PATTERN (insn)) != NULL_RTX)
+ || asm_noperands (PATTERN (insn)) >= 0)
&& get_attr_length (insn) > 0)
break;
}
@@ -6497,7 +6497,7 @@ use_skip_p (rtx_insn *insn)
/* We can't rely on the length of asms, so we can't skip asms. */
if (!insn
|| GET_CODE (PATTERN (insn)) == ASM_INPUT
- || extract_asm_operands (PATTERN (insn)) != NULL_RTX)
+ || asm_noperands (PATTERN (insn)) >= 0)
break;
if (get_attr_length (insn) == 4
&& jump_insn == next_active_insn (insn))