"Safe" - means that I do not plan to run any built in optimizations of clang, only one that I write by my self. Actually I want to delete some functions. I have list of functions to delete, and I want to do it on (2) step by fixing bc. I think it is much easier then doing this after js generation.
How do you think is it actually possible? 2018-03-27 10:27 GMT+07:00 Alon Zakai <[email protected]>: > Yeah, sounds like you're hitting an LLVM optimizer bug, then. > > What do you mean by "safe" here? The issue is, I think, that if you do the > "normal" thing, which is to optimize each source file as you convert it to > an object file, things will work, while if you link those object files and > then optimize that then the LLVM optimizer can do a lot more and your chance > of running into bugs is higher. In principle, all optimizations should be > safe to do on the combined bitcode, but in practice there are bugs. > > Concretely, if you do emcc -O3 a.cpp -o a.bc then it runs the LLVM > optimizer. When you do emcc -O3 all.bc -o all.js then we do not run the > LLVM optimizer, unless you specify LTO, but the -O3 is used to determine how > much to optimize in other things than LLVM (asm.js/wasm optimizations). > > > On Mon, Mar 26, 2018 at 6:44 PM, Александр Гурьянов <[email protected]> > wrote: >> >> Hmm, looks link time optimizations id broken --llvm-lto 2 produce not >> worked js, but game stuck forever on loading. If I found little test >> case then I post it. >> >> Anyway, is it correct that I can run my "SAFE" optimization on step >> (2) and as result get correct js with no performance lost against >> default build? In other words doing single bc and then using emcc to >> produce js, is same that doing just emcc? >> >> 2018-03-26 23:33 GMT+07:00 Alon Zakai <[email protected]>: >> > Hmm, the --llvm-lto 2 option should do basically what you describe here >> > - >> > run LLVM opts on the combined bitcode. Does that also cause this >> > problem? >> > >> > My guess is you're hitting an LLVM optimizer bug or undefined behavior >> > of >> > some sort, when it has all the bitcode to optimize it is capable of >> > doing a >> > lot more and that has uncovered LLVM bugs in the past. If you can reduce >> > this to a testcase you can file I can take a look at that. >> > >> > On Mon, Mar 26, 2018 at 1:49 AM, caiiiycuk <[email protected]> wrote: >> >> >> >> Good day! I am playing with llvm optimizer and I trying to setup build >> >> process that allows me to run custom optimizations over bc. I want to: >> >> 1. Build resulting .bc of game (using llvm-link) >> >> 2. Transform this .bc with custom optimizations >> >> 3. Produce .js with emcc >> >> >> >> For (1) I compile all source files into shared library (instead of js): >> >> add_library(bin-lib SHARED ${SOURCES}) >> >> set_target_properties(bin-lib PROPERTIES SUFFIX .bc) >> >> >> >> As I understand this step works perfect, because as a result I have one >> >> libbin-lib.bc file. >> >> >> >> For (2) I use this command: >> >> ~/emscripten/sdk/emscripten-fastcomp/bin/opt -O3 libbin-lib.bc -o >> >> libbin-lib-opt.bc >> >> >> >> >> >> For (3) I use this command: >> >> ~/emscripten/sdk/emscripten/emcc -O3 \ >> >> -s USE_ZLIB=1 -s USE_LIBPNG=1 -s USE_FREETYPE=1 -s USE_GLFW=3 -s >> >> FULL_ES2=1 \ >> >> --emit-symbol-map \ >> >> -s ASSERTIONS=0 \ >> >> -s SAFE_HEAP=0 \ >> >> -s TOTAL_MEMORY=134217728 \ >> >> -s INVOKE_RUN=0 \ >> >> -s EXTRA_EXPORTED_RUNTIME_METHODS="['getMemory', >> >> 'addRunDependency', >> >> 'removeRunDependency', 'FS_createPath', 'FS_createPreloadedFile', \ >> >> 'FS_createDataFile', 'lengthBytesUTF8', 'stringToUTF8']" \ >> >> -s NO_EXIT_RUNTIME=1 \ >> >> libbin-lib-opt.bc -o bin.js >> >> >> >> If I build my game with this steps: >> >> (1) -> (3) (skip 2) >> >> >> >> Then I have working bin.js. I can play game exactly the same as when I >> >> compile just .js file with emcc. >> >> >> >> BUT, if I build my game with this steps: >> >> (1) -> (2) -> (3) >> >> >> >> Then I have bin.js that produce errors in browser: >> >> >> >> Invalid function pointer called with signature 'vi'. Perhaps this is an >> >> invalid value (e.g. caused by calling a virtual method on a NULL >> >> pointer)? >> >> Or calling a function with an incorrect type, which will fail? (it is >> >> worth >> >> building your source files with -Werror (warnings are errors), as >> >> warnings >> >> can indicate undefined behavior which can cause this) >> >> >> >> This pointer might make sense in another type signature: v: 0 vid: 0 >> >> vii: >> >> 0 vidd: 0 vidi: 0 viid: 0 viii: 0 viddi: 0 viidi: 0 viiii: 0 vidddd: 0 >> >> viiiii: 0 viddddd: 0 viiiiii: 0 vidddddi: 0 viiiiiii: 0 vidddddii: 0 >> >> viiddiidii: 0 viiiiiiiii: 0 i: 0 di: 0 ii: 0 dii: 0 iid: 0 iii: 0 diid: >> >> 0 >> >> iidi: 0 iiii: 0 iiiid: 0 iiiii: 0 iiiiid: 0 iiiiii: 0 iiiiddd: 0 >> >> iiiiiid: 0 >> >> iiiiiii: 0 iiiiiiii: 0 iiiiiiiii: 0 iiiiiiiiii: 0 >> >> >> >> uncaught exception: abort(20) at >> >> jsStackTrace@http://localhost/gamepix-loader.js line 168 > >> >> Function:3:40923 >> >> stackTrace@http://localhost/gamepix-loader.js line 168 > >> >> Function:3:41094 >> >> abort@http://localhost/gamepix-loader.js line 168 > Function:26:243921 >> >> nullFunc_vi@http://localhost/gamepix-loader.js line 168 > >> >> Function:3:326758 >> >> b20@http://localhost/gamepix-loader.js line 168 > Function:19:112979 >> >> >> >> >> >> __ZNSt3__214__shared_count16__release_sharedEv@http://localhost/gamepix-loader.js >> >> line 168 > Function:19:45045 >> >> __ZNSt3__26localeD2Ev@http://localhost/gamepix-loader.js line 168 > >> >> Function:16:660576 >> >> >> >> >> >> __ZNSt3__210__stdinbufIcEC2EP8_IO_FILEP11__mbstate_t@http://localhost/gamepix-loader.js >> >> line 168 > Function:16:635917 >> >> __ZNSt3__28ios_base4InitC2Ev@http://localhost/gamepix-loader.js line >> >> 168 > >> >> Function:16:633585 >> >> ___cxx_global_var_init@http://localhost/gamepix-loader.js line 168 > >> >> Function:16:633478 >> >> __GLOBAL__I_000101@http://localhost/gamepix-loader.js line 168 > >> >> Function:16:633365 >> >> >> >> Error exists if i use any level of optimizations on opt step (O1, O2, >> >> O3) >> >> If I set --llvm-opts 0, on emcc step error still exists >> >> >> >> Can you help me? >> >> Thank you >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> >> Groups >> >> "emscripten-discuss" group. >> >> To unsubscribe from this group and stop receiving emails from it, send >> >> an >> >> email to [email protected]. >> >> For more options, visit https://groups.google.com/d/optout. >> > >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups >> > "emscripten-discuss" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> > an >> > email to [email protected]. >> > For more options, visit https://groups.google.com/d/optout. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "emscripten-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
