diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2016-06-06 12:31:59 +0000 |
---|---|---|
committer | Bernd Edlinger <edlinger@gcc.gnu.org> | 2016-06-06 12:31:59 +0000 |
commit | 93671519e202e3bc5ab592bb6318aa738e4ae58f (patch) | |
tree | 4c408260aa6953423d714fd94976bb8529014f19 /gcc/config/pa/pa.c | |
parent | 690f24b7754826f08fc19119dd3a30a6c07e9919 (diff) | |
download | gcc-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.c | 6 |
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)) |