This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/32721] CCP removes volatile qualifiers.
- From: "ramana dot radhakrishnan at celunite dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Jul 2007 20:14:26 -0000
- Subject: [Bug tree-optimization/32721] CCP removes volatile qualifiers.
- References: <bug-32721-14766@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #3 from ramana dot radhakrishnan at celunite dot com 2007-07-10 20:14 -------
(In reply to comment #2)
> As the decl is volatile as well this is clearly a bogus optimization.
>
Putting a breakpoint on evaluate_stmt in tree-ssa-ccp.c shows that stmt_ann of
the stmt does not have has_volatile_ops set to true.
(gdb) p stmt
(gdb) pt
<gimple_modify_stmt 0xb7d4fee0 side-effects
arg 0 <ssa_name 0xb7d4aed4
type <pointer_type 0xb7d44bd0 type <integer_type 0xb7d44b64 int>
sizes-gimplified unsigned SI
size <integer_cst 0xb7caa460 constant invariant 32>
unit size <integer_cst 0xb7caa24c constant invariant 4>
align 32 symtab 0 alias set -1 canonical type 0xb7d44bd0>
visited var <var_decl 0xb7d5005c spinlock0> def_stmt
<gimple_modify_stmt 0xb7d4fee0>
version 1>
arg 1 <addr_expr 0xb7d481c0 type <pointer_type 0xb7d44bd0>
constant invariant
arg 0 <array_ref 0xb7cb5084 type <integer_type 0xb7d44b64 int>
arg 0 <var_decl 0xb7d50000 spinlock>
arg 1 <integer_cst 0xb7d4fec4 constant invariant 0>>>
try.c:5>
(gdb) (gdb) p *(stmt->base->ann)
$17 = {common = {type = STMT_ANN, aux = 0x0, value_handle = 0x0}, vdecl = {
common = {type = STMT_ANN, aux = 0x0, value_handle = 0x0},
out_of_ssa_tag = 0, base_var_processed = 0, used = 0,
need_phi_state = NEED_PHI_STATE_NO, in_vuse_list = 1, in_vdef_list = 0,
is_heapvar = 0, call_clobbered = 1, noalias_state = NO_ALIAS_GLOBAL,
mpt = 0xb7cb6804, symbol_mem_tag = 0x0, partition = 0, base_index = 0,
current_def = 0x0, subvars = 0x0, escape_mask = 3084210192}, fdecl = {
common = {type = STMT_ANN, aux = 0x0, value_handle = 0x0},
reference_vars_info = 0xb7eed528}, stmt = {common = {type = STMT_ANN,
aux = 0x0, value_handle = 0x0}, bb = 0xb7eed528, operands = {
def_ops = 0xb7cb6804, use_ops = 0x0, vdef_ops = 0x0, vuse_ops = 0x0,
stores = 0x0, loads = 0x0}, addresses_taken = 0xb7d55010, uid = 0,
references_memory = 0, modified = 0, has_volatile_ops = 0,
makes_clobbering_call = 0}}
Shouldn't has_volatile_ops get set to true in this case because the stmt
essentially has one volatile operand here ?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32721