public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Darryl Miles <darryl-mailinglists@netbauds.net>
To: Michael Matz <matz@suse.de>
Cc: Mark Mielke <mark@mark.mielke.cc>,
		David Miller <davem@davemloft.net>,
	gcc@gcc.gnu.org
Subject: Re: Optimization of conditional access to globals: thread-unsafe?
Date: Mon, 29 Oct 2007 15:40:00 -0000	[thread overview]
Message-ID: <4725FD94.8060603@netbauds.net> (raw)
In-Reply-To: <Pine.LNX.4.64.0710291617190.23011@wotan.suse.de>

Michael Matz wrote:
>> Don't you need the barrier before.  This is to ensure it completed the
>> condition test completely first before it then processed the assignment
>> expression.
>>
>> if(condition) {
>>  somebarrier();
>>  *p = value;
>> }
>>
>> The issue is not that the store is done too late, but that a 
>> write-access is done too early.
> 
> No.  The initial cause for this needless thread was that a store was moved 
> down, out of its control region.  Of course it doesn't help when people 
> keep shifting their point of focus in such discussions.  Now it already 
> moved to fear that GCC would somehow introduce new traps.  Without the 
> people discussing about that fear even bothering to check if that really 
> happens :-(

No the initial problem was that the store was done when the code 
execution path clearly indicates no store should be performed.  The 
store was a re-write of the same and existing value in *p.

The optimizer tried to interleave the compare/test with the load from 
memory.  By inserting the barrier between the test and assignment that 
would stop that interleave from taking place, since it can't optimize 
across the barrier, it must perform the test and branch first, before it 
stores to memory.

It may optionally interleave the 'load from memory into register for 
"value" variable'.  This is would be a speculative load and this would 
be safe, as the value or 'value' may go unused (thrown away) if the 
branch is taken to skip the store to *p.


Now the original case was show as a simple function with just the

if(condition) {
  *v = 1
}

I would agree with you that a barrier() afterwards would be needed if 
there was any statement beyond that close brace of the test within the 
same function.  This is to ensure the store is not deferred any later, 
that maybe accessed via another alias to the same memory for which the 
compiler could not see at compile time.

But there isn't, there is a function return, which does the trick nicely.

A purist perspective this makes it:

void foo(int value) {
  if(condition) {
   somebarrier();
   *v = value;
   somebarrier();
  }

  // more statements here that may access *v
  // if you don't have any statements here, then you can omit the 2nd 
somebarrier() call

  return;
}


Darryl

  reply	other threads:[~2007-10-29 15:35 UTC|newest]

Thread overview: 206+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <e2e108260710260541n61462585u99de9bc0617720f4@mail.gmail.com>
2007-10-26 13:45 ` Bart Van Assche
2007-10-26 14:38   ` Tomash Brechko
2007-10-26 15:50     ` Ian Lance Taylor
2007-10-26 15:51       ` Tomash Brechko
2007-10-26 16:04         ` Dave Korn
2007-10-26 16:18           ` Tomash Brechko
2007-10-26 17:06             ` Michael Matz
2007-10-26 17:54               ` Tomash Brechko
2007-10-26 17:55                 ` Tomash Brechko
2007-10-28 17:08                   ` Michael Matz
2007-10-28 18:06                     ` Tomash Brechko
2007-10-28 18:43                       ` Tomash Brechko
2007-10-29  1:29                       ` Dave Korn
2007-10-29  2:05                         ` David Miller
2007-10-29  2:54                           ` Dave Korn
2007-10-29  3:04                             ` David Miller
2007-10-29  3:08                             ` David Miller
2007-10-29  4:35                             ` Mark Mielke
2007-10-29  8:03                             ` Tomash Brechko
2007-10-29  8:08                               ` Tomash Brechko
2007-10-29  8:11                                 ` Andrew Pinski
2007-10-29  8:22                                   ` Tomash Brechko
2007-10-29  8:21                                 ` Eric Botcazou
2007-10-29  8:30                                   ` Tomash Brechko
2007-10-29  8:42                                     ` Eric Botcazou
2007-10-29  8:44                                       ` Tomash Brechko
2007-10-29  8:49                                         ` Tomash Brechko
2007-10-29  8:55                                           ` Eric Botcazou
2007-10-29  9:04                                             ` Tomash Brechko
2007-10-29  9:12                                               ` Tomash Brechko
2007-10-29  9:35                                                 ` Tomash Brechko
2007-10-29 22:04                                               ` Eric Botcazou
2007-10-30  7:48                                                 ` Tomash Brechko
2007-10-30  7:55                                                   ` Tomash Brechko
2007-10-30  7:59                                                   ` Eric Botcazou
2007-10-30  8:03                                                     ` Tomash Brechko
2007-10-30  8:20                                                       ` Tomash Brechko
2007-10-30  8:29                                                         ` Eric Botcazou
2007-10-30  9:04                                                           ` Tomash Brechko
2007-10-30 14:48                                                             ` Eric Botcazou
2007-10-30 15:27                                                               ` Tomash Brechko
2007-10-31  2:21                                                                 ` Eric Botcazou
2007-10-29  3:32                           ` skaller
2007-10-29  4:32                             ` David Miller
2007-10-29  4:54                               ` skaller
2007-10-29 15:14                               ` Michael Matz
2007-10-29  5:08                           ` Darryl Miles
2007-10-29  7:43                             ` David Miller
2007-10-29 12:08                               ` Darryl Miles
2007-10-29 12:14                                 ` Robert Dewar
2007-10-29 17:04                                 ` skaller
2007-10-29 16:47                               ` Joe Buck
2007-10-29 15:00                           ` Michael Matz
2007-10-29 16:20                             ` Tomash Brechko
2007-10-29 16:32                               ` Tomash Brechko
2007-10-29 19:43                               ` Duncan Sands
2007-10-29 20:03                                 ` Jack Lloyd
2007-10-29 20:52                                 ` Tomash Brechko
2007-10-29 20:59                                   ` Michael Matz
2007-10-29 21:14                                     ` Tomash Brechko
2007-10-26 21:29               ` Ian Lance Taylor
2007-10-26 21:39                 ` Diego Novillo
2007-10-26 22:38                   ` Ian Lance Taylor
2007-10-26 22:46                     ` Jonathan Wakely
2007-10-26 22:56                     ` Diego Novillo
2007-10-31 22:43                     ` Jason Merrill
2007-10-31 22:50                       ` Jason Merrill
2007-10-26 21:53                 ` Daniel Jacobowitz
2007-10-26 22:20                 ` Jakub Jelinek
2007-10-26 22:55                   ` Ian Lance Taylor
2007-10-27  0:17                 ` skaller
2007-10-27  0:26                   ` David Daney
2007-10-27  0:36                     ` Robert Dewar
2007-10-27  1:29                     ` skaller
2007-10-27 12:51                   ` Andrew Haley
2007-10-26 22:57               ` David Miller
2007-10-28 17:10                 ` Michael Matz
2007-10-29  1:01                   ` David Miller
2007-10-29  2:23                     ` Mark Mielke
2007-10-29 15:09                       ` Michael Matz
2007-10-29 15:16                         ` Darryl Miles
2007-10-29 15:24                           ` Michael Matz
2007-10-29 15:40                             ` Darryl Miles [this message]
2007-10-29 15:16                         ` Mark Mielke
2007-10-30 10:28                         ` Tomash Brechko
2007-10-30 14:50                           ` Ian Lance Taylor
2007-10-30 16:17                             ` Tomash Brechko
2007-10-30 17:05                               ` Ian Lance Taylor
2007-10-30 22:01                                 ` Tomash Brechko
2007-10-29  1:05                   ` David Miller
2007-10-29  1:16                     ` Dave Korn
2007-10-29  1:37                       ` David Miller
2007-10-29  3:22                         ` skaller
2007-10-29 11:54                         ` Robert Dewar
2007-10-29 15:21                           ` Michael Matz
2007-10-29 15:34                             ` Robert Dewar
2007-10-29 15:35                               ` Michael Matz
2007-10-29 15:40                                 ` Robert Dewar
2007-10-29 16:29                         ` Joe Buck
2007-10-29 16:53                           ` Robert Dewar
2007-10-26 17:10             ` skaller
2007-10-26 19:11               ` Tomash Brechko
2007-10-26 23:34                 ` skaller
2007-10-27 10:54                   ` Tomash Brechko
2007-10-26 15:24   ` Ian Lance Taylor
     [not found] <Pine.LNX.4.64.0710281753210.23011@wotan.suse.de.suse.lists.egcs>
     [not found] ` <20071028.180108.71876074.davem@davemloft.net.suse.lists.egcs>
     [not found]   ` <02e701c819c7$be985620$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]     ` <20071028.183401.197068473.davem@davemloft.net.suse.lists.egcs>
     [not found]       ` <20071029162032.GA10611@synopsys.com.suse.lists.egcs>
     [not found]         ` <47260E97.4020309@adacore.com.suse.lists.egcs>
2007-10-29 19:51           ` Andi Kleen
2007-10-29 20:00             ` Robert Dewar
2007-10-29 20:10               ` Andi Kleen
2007-10-29 20:19                 ` Robert Dewar
2007-10-29 21:29                 ` skaller
2007-10-29 22:07                   ` Robert Dewar
2007-10-30  1:40                     ` Robert Dewar
2007-10-30  6:37                       ` Eric Botcazou
     [not found] <e2e108260710260634q7a291337s6e66dfa25f28b68a@mail.gmail.com.suse.lists.egcs>
     [not found] ` <e2e108260710260705s170a7c82udb0c9db26a408d84@mail.gmail.com.suse.lists.egcs>
     [not found]   ` <18210.795.425145.46885@zebedee.pink.suse.lists.egcs>
     [not found]     ` <e2e108260710270510j56fe188dkabe070f4c6bcbe0a@mail.gmail.com.suse.lists.egcs>
     [not found]       ` <87hckcpvp5.fsf@mid.deneb.enyo.de.suse.lists.egcs>
     [not found]         ` <e2e108260710270607u6798af5em6467bd38788f48cd@mail.gmail.com.suse.lists.egcs>
     [not found]           ` <87abq4ofym.fsf@mid.deneb.enyo.de.suse.lists.egcs>
     [not found]             ` <e2e108260710280631i405e4fd8te51ff7aa2ebece23@mail.gmail.com.suse.lists.egcs>
     [not found]               ` <472492F8.90700@adacore.com.suse.lists.egcs>
     [not found]                 ` <20071028141821.GA4898@moonlight.home.suse.lists.egcs>
2007-10-29 11:57                   ` Andi Kleen
2007-10-29 12:18                     ` Tomash Brechko
2007-10-29 14:12                       ` Andi Kleen
     [not found] <e2e108260710260541n61462585u99de9bc0617720f4@mail.gmail.com.suse.lists.egcs>
     [not found] ` <e2e108260710260620k2a2e21b3t1d6c052f14d36094@mail.gmail.com.suse.lists.egcs>
     [not found]   ` <20071026143334.GA5041@moonlight.home.suse.lists.egcs>
     [not found]     ` <m38x5pj3ig.fsf@localhost.localdomain.suse.lists.egcs>
     [not found]       ` <20071026155101.GB5041@moonlight.home.suse.lists.egcs>
     [not found]         ` <016201c817e9$5454edd0$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]           ` <20071026161739.GC5041@moonlight.home.suse.lists.egcs>
     [not found]             ` <Pine.LNX.4.64.0710261836440.23011@wotan.suse.de.suse.lists.egcs>
     [not found]               ` <m33avxfu2i.fsf@localhost.localdomain.suse.lists.egcs>
2007-10-27 17:08                 ` Andi Kleen
2007-10-27 18:24                   ` Ian Lance Taylor
     [not found] <e2e108260710260634q7a291337s6e66dfa25f28b68a@mail.gmail.com>
2007-10-26 14:11 ` Bart Van Assche
2007-10-26 15:14   ` Andrew Haley
2007-10-26 15:18     ` Robert Dewar
2007-10-26 15:27       ` Dave Korn
2007-10-26 16:28         ` skaller
2007-10-26 16:38           ` Michael Matz
2007-10-26 17:04         ` Richard Kenner
2007-10-26 16:00       ` Samuel Tardieu
2007-10-26 17:03         ` Samuel Tardieu
2007-10-27  9:33         ` Robert Dewar
2007-10-27 13:49           ` Florian Weimer
2007-10-27 13:59             ` Samuel Tardieu
2007-10-27 14:25               ` Florian Weimer
2007-10-27 19:35                 ` Andrew Haley
2007-10-27 16:25             ` Robert Dewar
2007-10-27 16:43               ` Samuel Tardieu
2007-10-27 12:47     ` Bart Van Assche
2007-10-27 13:07       ` Florian Weimer
2007-10-27 13:16         ` Bart Van Assche
2007-10-27 13:16           ` Andrew Haley
2007-10-27 13:34           ` Florian Weimer
2007-10-28 13:47             ` Bart Van Assche
2007-10-28 13:53               ` Robert Dewar
2007-10-28 15:03                 ` Tomash Brechko
2007-10-28 21:19                 ` Bart Van Assche
2007-10-29  3:19                   ` skaller
2007-10-28 14:18               ` Andrew Haley
2007-10-28 15:07               ` Dave Korn
2007-10-28 17:29                 ` Erik Trulsson
2007-10-28 17:26                   ` Robert Dewar
2007-10-28 17:49                     ` Erik Trulsson
2007-10-28 18:02                       ` Andreas Schwab
2007-10-28 18:40                       ` Dave Korn
2007-10-28 19:15                         ` Erik Trulsson
2007-10-28 20:43                           ` skaller
2007-10-29  5:17                           ` Ross Smith
2007-10-28 17:39                   ` Richard Guenther
2007-10-28 18:03                     ` Erik Trulsson
2007-10-28 20:12                     ` skaller
2007-10-28 23:04                       ` Richard Guenther
2007-10-29  2:39                         ` skaller
2007-10-29  9:52                           ` Samuel Tardieu
2007-10-29 11:24                             ` skaller
2007-10-29 13:57                               ` Darryl Miles
2007-10-29  9:57                     ` Andrew Haley
2007-10-26 16:08   ` skaller
     [not found] <20071022093617.GA5073@moonlight.home.suse.lists.egcs>
     [not found] ` <18204.31027.183382.838763@zebedee.pink.suse.lists.egcs>
     [not found]   ` <20071022105044.GB5073@moonlight.home.suse.lists.egcs>
     [not found]     ` <011501c8149b$b7156c20$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]       ` <20071022111704.GE5073@moonlight.home.suse.lists.egcs>
     [not found]         ` <011601c8149d$7050bea0$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]           ` <20071022112643.GG5073@moonlight.home.suse.lists.egcs>
     [not found]             ` <012501c814b2$f4623470$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]               ` <20071022143215.GH5073@moonlight.home.suse.lists.egcs>
     [not found]                 ` <Pine.LNX.4.64.0710221757450.23011@wotan.suse.de.suse.lists.egcs>
     [not found]                   ` <20071022171757.GI5073@moonlight.home.suse.lists.egcs>
     [not found]                     ` <18204.57073.943880.741269@zebedee.pink.suse.lists.egcs>
2007-10-22 18:11                       ` Andi Kleen
2007-10-21 14:55 Tomash Brechko
2007-10-21 15:26 ` Erik Trulsson
2007-10-21 16:16   ` Tomash Brechko
2007-10-21 18:51     ` Richard Guenther
2007-10-22  1:16     ` skaller
2007-10-21 23:07 ` Dave Korn
2007-10-22  1:25   ` skaller
2007-10-22 10:32     ` Dave Korn
2007-10-22  9:36   ` Tomash Brechko
2007-10-22 10:09     ` Erik Trulsson
2007-10-22 10:15       ` Robert Dewar
2007-10-23 16:53         ` Paul Brook
2007-10-22 17:59       ` skaller
2007-10-22 10:19     ` Andrew Haley
2007-10-22 10:50       ` Tomash Brechko
2007-10-22 10:54         ` Dave Korn
2007-10-22 11:10           ` Tomash Brechko
2007-10-22 11:00         ` Tomash Brechko
2007-10-22 11:07         ` Dave Korn
2007-10-22 11:17           ` Tomash Brechko
2007-10-22 11:19             ` Dave Korn
2007-10-22 11:26               ` Tomash Brechko
2007-10-22 13:53                 ` Dave Korn
2007-10-22 14:32                   ` Tomash Brechko
2007-10-22 16:15                     ` Michael Matz
2007-10-22 16:22                       ` Dave Korn
2007-10-22 17:18                       ` Tomash Brechko
2007-10-22 17:33                         ` Andrew Haley
2007-10-22 17:44                           ` Tomash Brechko
2007-10-22 17:48                             ` Andrew Haley
2007-10-22 18:00                               ` Tomash Brechko
2007-10-23  9:45                                 ` Andrew Haley
2007-10-22 17:51                           ` Dave Korn
2007-10-22 18:15                     ` skaller
2007-10-22 18:26                       ` Andrew Pinski
2007-10-22 11:08         ` Andrew Haley
2007-10-22 11:21           ` Tomash Brechko
2007-10-26 21:24       ` Florian Weimer
2007-10-27 18:15 ` Darryl Miles
2007-10-27 21:35   ` Dave Korn
2007-10-27 22:58     ` Darryl Miles

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4725FD94.8060603@netbauds.net \
    --to=darryl-mailinglists@netbauds.net \
    --cc=davem@davemloft.net \
    --cc=gcc@gcc.gnu.org \
    --cc=mark@mark.mielke.cc \
    --cc=matz@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).