summaryrefslogtreecommitdiff
path: root/gcc/gimple.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/gimple.c
parent690f24b7754826f08fc19119dd3a30a6c07e9919 (diff)
downloadgcc-93671519e202e3bc5ab592bb6318aa738e4ae58f.tar.gz
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/gimple.c')
-rw-r--r--gcc/gimple.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 226b0801072..75a1ed8ee0b 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -2583,6 +2583,10 @@ gimple_asm_clobbers_memory_p (const gasm *stmt)
return true;
}
+ /* Non-empty basic ASM implicitly clobbers memory. */
+ if (gimple_asm_input_p (stmt) && strlen (gimple_asm_string (stmt)) != 0)
+ return true;
+
return false;
}