From 65dbe0ab7cdaf2aa84b09a74e594f0faacf1945c Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 31 May 2024 10:14:25 +0200 Subject: tree-optimization/115278 - fix DSE in if-conversion wrt volatiles The following adds the missing guard for volatile stores to the embedded DSE in the loop if-conversion pass. PR tree-optimization/115278 * tree-if-conv.cc (ifcvt_local_dce): Do not DSE volatile stores. * g++.dg/vect/pr115278.cc: New testcase. --- gcc/tree-if-conv.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gcc/tree-if-conv.cc') diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc index 09d99fb..c4c3ed4 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -3381,7 +3381,9 @@ ifcvt_local_dce (class loop *loop) gimple_stmt_iterator gsiprev = gsi; gsi_prev (&gsiprev); stmt = gsi_stmt (gsi); - if (gimple_store_p (stmt) && gimple_vdef (stmt)) + if (!gimple_has_volatile_ops (stmt) + && gimple_store_p (stmt) + && gimple_vdef (stmt)) { tree lhs = gimple_get_lhs (stmt); ao_ref write; -- cgit v1.1