On Sun, Jul 7, 2019 at 9:48 PM Akshat Garg <xks...@gmail.com> wrote:

> On Sun, Jul 7, 2019 at 7:49 PM Paul E. McKenney <paul...@linux.ibm.com>
> wrote:
>
>> On Sat, Jul 06, 2019 at 12:39:45PM +0530, Akshat Garg wrote:
>> > On Sat, Jul 6, 2019 at 1:09 AM Akshat Garg <xks...@gmail.com> wrote:
>> >
>> > > On Fri, Jul 5, 2019 at 7:18 AM Paul E. McKenney <
>> paul...@linux.ibm.com>
>> > > wrote:
>> > >
>> > >> [CCing Ramana]
>> > >>
>> > >> My guess is that Jakub is saying that you should start by
>> > >> replacing all instances of TREE_VOLATILE() with (TREE_VOLATILE()
>> > >> || TREE_DEPENDENT_PTR()), give or take my getting the names wrong.
>> > >> Then selectively remove instances of TREE_DEPENDENT_PTR() where it
>> can
>> > >> be shown to be safe to do so.
>> > >>
>> > >
>> > >> The advantage of Jakub's approach over selectively inserting
>> > >> TREE_DEPENDENT_PTR() where it is needed is less chance of bugs due
>> > >> to missing TREE_DEPENDENT_PTR() instances.
>> > >>
>> > > I have checked that replacing TREE_VOLATILE() with (TREE_VOLATILE() ||
>> > > TREE_DEPENDENT_PTR()) is not sufficient to make the dependent ptr act
>> > > similar to volatile ptrs. I am looking over the source and will let
>> you
>> > > know if I am able to do it. If any of like, I can share the patch.
>> > >
>> > > Akshat
>> > >
>> > I have made some changes to the previous commit for _Dependent_ptr
>> > qualifier. We need to use this (
>> >
>> https://github.com/AKG001/gcc/blob/fb4187bc3872a50880159232cf336f0a03505fa8/gcc/tree-core.h#L943
>> )
>> > side-effect flag also with the dependent_ptr flag therefore, I have
>> pulled
>> > out the dependent_ptr from the union. Also, I have introduced a new
>> macro
>> > for dependent ptr TREE_THIS_DEPENDENT_PTR. Similar macro
>> > (TREE_THIS_VOLATILE) is used to check whether anything is volatile or
>> not.
>> > The initial plan was to change all occurrences of checks for volatile
>> with
>> > volatile or dependent_ptr, i.e., TREE_THIS_VOLATILE(NODE) with
>> > (TREE_THIS_DEPENDENT_PTR(NODE) || TREE_THIS_VOLATILE(NODE)). But, I
>> found
>> > 250 places to do this. Would that be okay, if I still change over all
>> the
>> > places?
>>
>> There is only one way to find out!  And in any case, this sounds like
>> one reason why your previous changes didn't fully mimic the volatile
>> keyword.  ;-)
>>
>> So I recommend making the changes.
>>
>> Probably not quite large enough a change to make it worthwhile learning
>> Coccinelle, but that is nevertheless an option.  (This tool allows you
>> to specify update patterns in C code, which it will automatically apply.)
>> http://coccinelle.lip6.fr/ if you want to try it out.
>>
>>                                                         Thanx, Paul
>
>
 I have made the changes shown here
https://github.com/AKG001/gcc/commit/e4ffd77f62ace986c124a70b90a662c083c570ba
The changes are not much tested on the edge cases. The test it was breaking
earlier shows here
https://github.com/AKG001/test/blob/master/dependency_breaking.c I am
checking for other test cases.
The optimized code with -O3 after applying the patch is here
https://github.com/AKG001/test/blob/master/dependency_breaking.c.231t.optimized
Please, I need your opinion and further directions on this.

Thanks,
Akshat

> > >> Jakub also seems to be pointing out that optimizations in the backend
> > >> also need to be handled, which I believe is what he is getting at
> with his
> > >> mention of RTL.  Of course, there is a very large number of backends,
> so
> > >> there needs to be a way of only doing some of them.  One way of doing
> that
> > >> is to handle only the multicore weakly ordered CPUs (ARM, ARMv8,
> PowerPC,
> > >> MIPS, maybe RISC-V), and on other CPUs continue the current behavior
> > >> of transforming the memory_order_consume load to memory_order_acquire.
> > >> For example, memory_order_acquire is almost free on x86, s390, and
> > >> the like.
> > >>
> > >> Does that help?
> > >>
> > >>                                                         Thanx, Paul
> > >>
> > >> On Fri, Jul 05, 2019 at 04:38:03AM +0530, Akshat Garg wrote:
> > >> > On Thu, Jul 4, 2019 at 11:39 PM Jakub Jelinek <ja...@redhat.com>
> wrote:
> > >> >
> > >> > > On Thu, Jul 04, 2019 at 10:40:15AM -0700, Paul E. McKenney wrote:
> > >> > > > > I think fully guaranteeing this is hard (besides when you use
> > >> > > > > volatile), we have the very same issue when dealing with
> > >> > > > > pointer provenance rules, known for years and not fixed
> > >> > > > > (and I don't see a good way to fix these issues without
> > >> > > > > sacrifying performance everywhere).
> > >> > > > >
> > >> > > > > Good luck ;)
> > >> > > >
> > >> > > > Thank you, we will need it!  ;-)
> > >> > >
> > >> > > Well, luck probably isn't all you need, you'll need some way to
> > >> represent
> > >> > > those dependencies in the IL (both GIMPLE and RTL) that would
> ensure
> > >> that
> > >> > > they aren't optimized away, because just hoping that optimization
> > >> don't
> > >> > > mess
> > >> > > that up or just patching a few optimizations you discover first
> isn't
> > >> going
> > >> > > to be very reliable.  Say don't rewrite those into SSA form and
> > >> represent
> > >> > > them close to how volatile ptrs are handled at least for the
> > >> beginning, and
> > >> > > if there are safe optimizations special case those, rather than
> > >> allowing
> > >> > > all
> > >> > > optimizations on those and hope it will work out.
> > >> > >
> > >> > >         Jakub
> > >> > >
> > >> > I don't understand this statement completely "Say don't rewrite
> those
> > >> into
> > >> > SSA form and represent them close to how volatile ptrs are handled
> at
> > >> least
> > >> > for the beginning, and if there are safe optimizations special case
> > >> those,
> > >> > rather than allowing all optimizations on those and hope it will
> work
> > >> > out.".
> > >> > Are you saying that we should try to represent dependent ptrs as
> > >> volatile
> > >> > ptrs for some places?  We should figure out all the places where a
> check
> > >> > for volatile ptrs happens and we check for dependent ptrs there
> also and
> > >> > see if we can allow the optimization or not.
> > >> > Am I getting you correctly, please tell?
> > >> >
> > >> > -Akshat
> > >>
> > >>
>

Reply via email to