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