Congratulations, you found an llvm bug :D llvm 8.0.0 on osx now segfaults when compiling a file with eina_list
Llvm tells me to report the bug, so I will, but I wonder what we should do to handle this... Jean 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" > > -- > > ------------------------------------------------------------------------------ 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