On Sun, 2 Oct 2016 10:21:01 +0200 "Jean Guyomarc'h" <jean.guyoma...@gmail.com>
said:

> Congratulations, you found an llvm bug :D
> llvm 8.0.0 on osx now segfaults when compiling a file with eina_list

ORLY? WOW! cool! do i get a badge, or an award. or a gold star? getting a
compiler to segv is a pretty awesome achievement.

> Llvm tells me to report the bug, so I will, but I wonder what we
> should do to handle this...
> Jean

well... that is a good question. how do we know we have a segving version of
the compiler? is this already fixed? in what version is it, or will it be
fixed? does this only affect llvm on osx? ... good questions.

well gcc is just happen. (i'm on 6.1.1 here). let me try llvm and see
(clang/llvm 3.8.1 here)...

> On Sat, Oct 1, 2016 at 5:38 PM, Carsten Haitzler <ras...@rasterman.com> wrote:
> > raster pushed a commit to branch master.
> >
> > http://git.enlightenment.org/core/efl.git/commit/?id=a2d507d3bfd12b84620eb7361b8fd8f3a5ba0dda
> >
> > commit a2d507d3bfd12b84620eb7361b8fd8f3a5ba0dda
> > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
> > Date:   Sat Oct 1 17:51:25 2016 +0900
> >
> >     eina list - make use of prefetch for minor speedups
> >
> >     i see a speedup of about 8% over a series of list walking and freeing
> >     functions given this change. it's a small speedup but still not too
> >     shabby just for some prefetches thrown in. ymmv depending on memory
> >     subsystem, memory speed itself, cpu and architecture.
> >
> >     @optimize
> > ---
> >  src/lib/eina/eina_list.h | 34 +++++++++++++++++++++++++---------
> >  1 file changed, 25 insertions(+), 9 deletions(-)
> >
> > diff --git a/src/lib/eina/eina_list.h b/src/lib/eina/eina_list.h
> > index e35943e..146601d 100644
> > --- a/src/lib/eina/eina_list.h
> > +++ b/src/lib/eina/eina_list.h
> > @@ -1411,12 +1411,16 @@ EAPI int                   eina_list_data_idx(const
> > Eina_List *list, void *data)
> >   *          For destructive operations such as this, consider
> >   *          using EINA_LIST_FOREACH_SAFE().
> >   */
> > -#define EINA_LIST_FOREACH(list, l, data) \
> > +#define EINA_LIST_FOREACH(list, l, _data)\
> >    for (l = list,                         \
> > -       data = eina_list_data_get(l);     \
> > +       _data = eina_list_data_get(l),    \
> > +       l ? (EINA_PREFETCH(l->next), EINA_PREFETCH(_data)) : EINA_PREFETCH
> > (l); \
> > +                                         \
> >         l;                                \
> > +                                         \
> >         l = eina_list_next(l),            \
> > -       data = eina_list_data_get(l))
> > +       _data = eina_list_data_get(l),    \
> > +       l ? (EINA_PREFETCH(l->next), EINA_PREFETCH(_data)) : EINA_PREFETCH
> > (l))
> >
> >  /**
> >   * @def EINA_LIST_REVERSE_FOREACH
> > @@ -1469,12 +1473,14 @@ EAPI int                   eina_list_data_idx(const
> > Eina_List *list, void *data)
> >   *          For destructive operations such as this, consider
> >   *          using EINA_LIST_REVERSE_FOREACH_SAFE().
> >   */
> > -#define EINA_LIST_REVERSE_FOREACH(list, l, data) \
> > +#define EINA_LIST_REVERSE_FOREACH(list, l, _data)\
> >    for (l = eina_list_last(list),                 \
> > -       data = eina_list_data_get(l);             \
> > +       _data = eina_list_data_get(l),            \
> > +       l ? (EINA_PREFETCH(l->prev), EINA_PREFETCH(_data)) : EINA_PREFETCH
> > (l); \ l;                                        \
> >         l = eina_list_prev(l),                    \
> > -       data = eina_list_data_get(l))
> > +       _data = eina_list_data_get(l),            \
> > +       l ? (EINA_PREFETCH(l->prev), EINA_PREFETCH(_data)) : EINA_PREFETCH
> > (l))
> >
> >  /**
> >   * @def EINA_LIST_FOREACH_SAFE
> > @@ -1525,11 +1531,15 @@ EAPI int                   eina_list_data_idx(const
> > Eina_List *list, void *data)
> >  #define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) \
> >    for (l = list,                                      \
> >         l_next = eina_list_next(l),                    \
> > +       EINA_PREFETCH(l_next),                         \
> >         data = eina_list_data_get(l);                  \
> > +       EINA_PREFETCH(data),                           \
> >         l;                                             \
> >         l = l_next,                                    \
> >         l_next = eina_list_next(l),                    \
> > -       data = eina_list_data_get(l))
> > +       EINA_PREFETCH(l_next),                         \
> > +       data = eina_list_data_get(l),                  \
> > +       EINA_PREFETCH(data))
> >
> >  /**
> >   * @def EINA_LIST_REVERSE_FOREACH_SAFE
> > @@ -1582,11 +1592,15 @@ EAPI int                   eina_list_data_idx(const
> > Eina_List *list, void *data)
> >  #define EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) \
> >    for (l = eina_list_last(list),                              \
> >         l_prev = eina_list_prev(l),                            \
> > +       EINA_PREFETCH(l_prev),                                 \
> >         data = eina_list_data_get(l);                          \
> > +       EINA_PREFETCH(data),                                   \
> >         l;                                                     \
> >         l = l_prev,                                            \
> >         l_prev = eina_list_prev(l),                            \
> > -       data = eina_list_data_get(l))
> > +       EINA_PREFETCH(l_prev),                                 \
> > +       data = eina_list_data_get(l),                          \
> > +       EINA_PREFETCH(data))
> >
> >  /**
> >   * @def EINA_LIST_FREE
> > @@ -1624,9 +1638,11 @@ EAPI int                   eina_list_data_idx(const
> > Eina_List *list, void *data)
> >   * @see eina_list_free()
> >   */
> >  #define EINA_LIST_FREE(list, data)               \
> > -  for (data = eina_list_data_get(list);          \
> > +  for (data = eina_list_data_get(list),          \
> > +       list ? EINA_PREFETCH((list)->next) : EINA_PREFETCH(list); \
> >         list;                                     \
> >         list = eina_list_remove_list(list, list), \
> > +       list ? EINA_PREFETCH((list)->next) : EINA_PREFETCH(list), \
> >         data = eina_list_data_get(list))
> >
> >  #include "eina_inline_list.x"
> >
> > --
> >
> >
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to