mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-15 18:01:31 +08:00
Canonicalize asm volatility earlier
If gimple_asm_volatile_p is correct, no point re-checking. This is also done by the C and C++ front ends, but not Ada. So we can't yet trust ASM_VOLATILE_P from the front end. From-SVN: r223024
This commit is contained in:
parent
6476a8fde0
commit
15a85b055d
@ -1,5 +1,9 @@
|
||||
2015-05-11 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* gimplify.c (gimplify_asm_expr): Set gimple_asm_volatile_p
|
||||
if noutputs is zero.
|
||||
* cfgexpand.c (expand_asm_stmt): Use gimple_asm_volatile_p unchanged.
|
||||
|
||||
* cfgexpand.c (expand_asm_operands): Merge into...
|
||||
(expand_asm_stmt): ... here.
|
||||
|
||||
|
@ -2587,8 +2587,6 @@ expand_asm_stmt (gasm *stmt)
|
||||
for (i = 0; i < noutputs; ++i)
|
||||
orig_outputs[i] = TREE_VALUE (gimple_asm_output_op (stmt, i));
|
||||
|
||||
bool vol = gimple_asm_volatile_p (stmt);
|
||||
|
||||
rtvec argvec, constraintvec, labelvec;
|
||||
rtx body;
|
||||
int ninout;
|
||||
@ -2603,10 +2601,6 @@ expand_asm_stmt (gasm *stmt)
|
||||
int old_generating_concat_p = generating_concat_p;
|
||||
rtx_code_label *fallthru_label = NULL;
|
||||
|
||||
/* An ASM with no outputs needs to be treated as volatile, for now. */
|
||||
if (noutputs == 0)
|
||||
vol = 1;
|
||||
|
||||
if (! check_operand_nalternatives (outputs, inputs))
|
||||
return;
|
||||
|
||||
@ -2815,7 +2809,7 @@ expand_asm_stmt (gasm *stmt)
|
||||
empty_string, 0, argvec, constraintvec,
|
||||
labelvec, locus);
|
||||
|
||||
MEM_VOLATILE_P (body) = vol;
|
||||
MEM_VOLATILE_P (body) = gimple_asm_volatile_p (stmt);
|
||||
|
||||
/* Eval the inputs and put them into ARGVEC.
|
||||
Put their constraints into ASM_INPUTs and store in CONSTRAINTS. */
|
||||
@ -2963,7 +2957,8 @@ expand_asm_stmt (gasm *stmt)
|
||||
ggc_strdup (constraints[i]),
|
||||
i, argvec, constraintvec, labelvec, locus));
|
||||
|
||||
MEM_VOLATILE_P (SET_SRC (XVECEXP (body, 0, i))) = vol;
|
||||
MEM_VOLATILE_P (SET_SRC (XVECEXP (body, 0, i)))
|
||||
= gimple_asm_volatile_p (stmt);
|
||||
}
|
||||
|
||||
/* If there are no outputs (but there are some clobbers)
|
||||
|
@ -5272,7 +5272,7 @@ gimplify_asm_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
|
||||
stmt = gimple_build_asm_vec (TREE_STRING_POINTER (ASM_STRING (expr)),
|
||||
inputs, outputs, clobbers, labels);
|
||||
|
||||
gimple_asm_set_volatile (stmt, ASM_VOLATILE_P (expr));
|
||||
gimple_asm_set_volatile (stmt, ASM_VOLATILE_P (expr) || noutputs == 0);
|
||||
gimple_asm_set_input (stmt, ASM_INPUT_P (expr));
|
||||
|
||||
gimplify_seq_add_stmt (pre_p, stmt);
|
||||
|
Loading…
x
Reference in New Issue
Block a user