public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: Andrea Corallo <andrea.corallo@arm.com>
To: Richard Earnshaw <Richard.Earnshaw@foss.arm.com>
Cc: gcc-help@gcc.gnu.org,  nd@arm.com
Subject: Re: Correct way to express to the compiler "this does not get clobbered"?
Date: Thu, 03 Dec 2020 13:28:48 +0100	[thread overview]
Message-ID: <gkrtut3gjjz.fsf@arm.com> (raw)
In-Reply-To: <15f8e09a-9d21-f8f6-8611-2845bd8bc74e@foss.arm.com> (Richard Earnshaw's message of "Thu, 3 Dec 2020 12:04:12 +0000")

Richard Earnshaw <Richard.Earnshaw@foss.arm.com> writes:

> On 03/12/2020 11:47, Andrea Corallo via Gcc-help wrote:
>> Hi all,
>> 
>> I've a piece of code that reduced looks like this:
>> 
>> #+begin_src C
>> typedef struct {
>>   void (*fun_ptr)(void);
>> } x_t;
>> 
>> x_t *x;
>> 
>> void
>> f (void)
>> {
>>   const x_t const *y = x;
>>   for (int i = 0; i < 1000; ++i)
>>     y->fun_ptr ();
>> }
>> #+end_src
>> 
>> What is the correct way (if any) to express to the compiler that the
>> value of y->fun_ptr does not get clobbered by the function call itself
>> so the corresponding load to obtain its value can be moved out of the
>> loop?
>> 
>> My understanding is that the const qualifier is more for diagnostic
>> reasons and is not sufficient for GCC to make this assumption.  OTOH I
>> cannot give 'fun_ptr' the attribute pure as it's not.
>> 
>> Thanks
>> 
>>   Andrea
>> 
>
> Why not just put the function pointer in a local variable?  Then the
> compiler will know that the value can't change.

Hi Richard,

yeah that would do the job.

This is generated code and changing the code generator that way might
not be completely trivial (e.g. where is the best position to perform
the assignments to each local variable?).  Therefore before going for
this solution I'd like to be convinced there's no way to express this
directly to GCC.

  Andrea

  reply	other threads:[~2020-12-03 12:29 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-03 11:47 Andrea Corallo
2020-12-03 12:04 ` Richard Earnshaw
2020-12-03 12:28   ` Andrea Corallo [this message]
2020-12-03 13:06     ` Richard Earnshaw
2020-12-03 13:40       ` Andrea Corallo
2020-12-03 18:24 ` David Brown
2020-12-03 23:00   ` Andrea Corallo
2020-12-04  7:23     ` stefan
2020-12-04  9:52       ` Andrea Corallo
2020-12-04 17:27         ` Segher Boessenkool
2020-12-04 18:16           ` Andrea Corallo
2020-12-04 18:33             ` Segher Boessenkool
2020-12-04 18:45               ` Andrea Corallo
     [not found]               ` <017701d6ca6d$7dc8dc90$795a95b0$@bebbosoft.de>
2020-12-04 18:57                 ` AW: " Stefan Franke
2020-12-04 22:52                   ` Andrea Corallo
2020-12-05 14:01                     ` David Brown
2020-12-05 14:17                       ` AW: " Stefan Franke
2020-12-05 18:10                         ` Andrea Corallo
2020-12-07 22:27                           ` Segher Boessenkool
2020-12-05 19:03                         ` David Brown
2020-12-06 11:29                           ` AW: " Stefan Franke
2020-12-05 17:29                       ` Andrea Corallo
2020-12-05 19:07                         ` David Brown
2020-12-06  9:22                           ` Jonathan Wakely
2020-12-04  8:27     ` David Brown
2020-12-04 10:05       ` Andrea Corallo
2020-12-05  8:06 ` Liu Hao

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=gkrtut3gjjz.fsf@arm.com \
    --to=andrea.corallo@arm.com \
    --cc=Richard.Earnshaw@foss.arm.com \
    --cc=gcc-help@gcc.gnu.org \
    --cc=nd@arm.com \
    /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).