Ping for pushed. The getAnalysis seems doesn't work for this situation. Maybe we should refine these passes to pass info by unit later.
Thanks Pan Xiuli -----Original Message----- From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Pan, Xiuli Sent: Friday, November 6, 2015 11:27 AM To: Song, Ruiling <ruiling.s...@intel.com>; beignet@lists.freedesktop.org Subject: Re: [Beignet] [PATCH] GBE: fix printf class static variable bug Yes, but the problem is that if two thread has kernel with printf functions, the map<CallInst *, PrintfSet::PrintfFmt*> printfs will be cleared in construction and destructor. This will cause the one who is still need info in printfs get null pointer. thread_local now is to protect printfs from other thread but not pass data from one pass to another. I tried the getAnalysis, but what we need the printfs as you said is in GenWriter and It could not be used there as easier as now. Every passmanger will clear the printfs and need a new map to avoid disturb each other. It is just ok when only one pass exist, but in multithread there will be a lot of passes in the same time. If using interface like: *PrintfParser::getPrintfInfo() { return &printfs; } It still a static one, and threads may have disturb. -----Original Message----- From: Song, Ruiling Sent: Friday, November 6, 2015 9:54 AM To: Pan, Xiuli <xiuli....@intel.com>; Pan, Xiuli <xiuli....@intel.com>; beignet@lists.freedesktop.org Subject: RE: [Beignet] [PATCH] GBE: fix printf class static variable bug Thread_local is not needed to pass data from one llvm pass to another. You can still access the info after pass that has already run. In a later llvm pass, you can use getAnalysis<PrintfParser>() to get the the PrintfParser pass handle. Then expose an interface in PrintfParser then you can query the printfInfo in GenWriter. Thanks! Ruiling > -----Original Message----- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf > Of Pan, Xiuli > Sent: Friday, November 6, 2015 9:44 AM > To: Pan, Xiuli; beignet@lists.freedesktop.org > Subject: Re: [Beignet] [PATCH] GBE: fix printf class static variable > bug > > Ping for review. > > -----Original Message----- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf > Of Pan Xiuli > Sent: Tuesday, November 3, 2015 11:30 AM > To: beignet@lists.freedesktop.org > Cc: Pan, Xiuli <xiuli....@intel.com> > Subject: [Beignet] [PATCH] GBE: fix printf class static variable bug > > The PrintfParse::printfs static is not thread safe and maybe reset or > adding something wrong when runing in mutlithread. Fix the problem by > change the printfs to a thread local variable. > > Signed-off-by: Pan Xiuli <xiuli....@intel.com> > --- > backend/src/llvm/llvm_printf_parser.cpp | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/backend/src/llvm/llvm_printf_parser.cpp > b/backend/src/llvm/llvm_printf_parser.cpp > index bdaed8a..93f87ea 100644 > --- a/backend/src/llvm/llvm_printf_parser.cpp > +++ b/backend/src/llvm/llvm_printf_parser.cpp > @@ -45,6 +45,8 @@ namespace gbe > { > using namespace ir; > > + thread_local map<CallInst*, PrintfSet::PrintfFmt*> printfs; > + > /* Return the conversion_specifier if succeed, -1 if failed. */ > static char __parse_printf_state(char *begin, char *end, char** > rend, PrintfState * state) > { > @@ -301,7 +303,6 @@ error: > Value* g1Xg2Xg3; > Value* wg_offset; > int out_buf_sizeof_offset; > - static map<CallInst*, PrintfSet::PrintfFmt*> printfs; > int printf_num; > int totalSizeofSize; > > @@ -972,12 +973,10 @@ error: > return false; > } > > - map<CallInst*, PrintfSet::PrintfFmt*> PrintfParser::printfs; > - > void* getPrintfInfo(CallInst* inst) > { > - if (PrintfParser::printfs[inst]) > - return (void*)PrintfParser::printfs[inst]; > + if (printfs[inst]) > + return (void*)printfs[inst]; > return NULL; > } > > -- > 2.1.4 > > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/beignet > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet