From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id 2527A3839DC3; Thu, 20 Oct 2022 22:32:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2527A3839DC3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1666305143; bh=xAoqFLjWBolaEb8jj4f3sZiRSpSzpegP3iLqi10z6oc=; h=From:To:Subject:Date:From; b=MAO4vwmrzMbNrox6PGpE6/A3lfvEOQHv+vyVq7j25NzxFU3DDvE6qzP0kj2IdRRrX 2cE7FqMjILtPs+Yv7w/3hanQk0LqRFGNJelyEuMGsM0EMNlXhjLurM+DRbeZlmZyeV junUFgBKh6cOVh8oYIAuWiqIz6m4yNnne+f96SVY= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Alexandre Oliva To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/testme)] hardcfr: prevent deferred sets of visited bitmap X-Act-Checkin: gcc X-Git-Author: Alexandre Oliva X-Git-Refname: refs/users/aoliva/heads/testme X-Git-Oldrev: 5b40f4909641fdcbca58c2997db2b4bd1c68127f X-Git-Newrev: 12d0b287d4ae77cd70604451214965a0f03fd9ca Message-Id: <20221020223223.2527A3839DC3@sourceware.org> Date: Thu, 20 Oct 2022 22:32:22 +0000 (GMT) List-Id: https://gcc.gnu.org/g:12d0b287d4ae77cd70604451214965a0f03fd9ca commit 12d0b287d4ae77cd70604451214965a0f03fd9ca Author: Alexandre Oliva Date: Wed Oct 19 20:36:28 2022 -0300 hardcfr: prevent deferred sets of visited bitmap Force bitmap sets to hit memory, preventing deferral and likely combinations. for gcc/ChangeLog * gimple-harden-control-flow.cc (rt_bb_visited::vset): Prevent deferral of bitmap sets. Diff: --- gcc/gimple-harden-control-flow.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gcc/gimple-harden-control-flow.cc b/gcc/gimple-harden-control-flow.cc index 1ea47615cd4..862cdd45eaf 100644 --- a/gcc/gimple-harden-control-flow.cc +++ b/gcc/gimple-harden-control-flow.cc @@ -545,6 +545,19 @@ class rt_bb_visited gassign *vstore = gimple_build_assign (unshare_expr (setme), temp); gimple_seq_add_stmt (&seq, vstore); + /* Prevent stores into visited from being deferred, without + forcing subsequent bitsets to reload the word. */ + vec *inputs = NULL; + vec *outputs = NULL; + vec_safe_push (inputs, + build_tree_list + (build_tree_list + (NULL_TREE, build_string (1, "m")), + visited)); + gasm *stabilize = gimple_build_asm_vec ("", inputs, outputs, + NULL, NULL); + gimple_seq_add_stmt (&seq, stabilize); + return seq; }