Tom, Please let us know if we can help improve the PNaCl passes so that Emscripten as well as PNaCl can be targets for Julia. native-client-discuss@ may be a better forum for the PNaCl passes, but we do work with Alon to make sure Emscripten works well :)
JF On Thu, Aug 28, 2014 at 8:08 AM, Tom Short <[email protected]> wrote: > I tried compiling several of the functions with fastcomp off, and that > allowed many more functions to be compiled to JavaScript successfully. > > Also, Julia is switching to MCJIT at some point, and that may change > the bitcode generation. > > > > On Wed, Aug 27, 2014 at 4:58 PM, Alon Zakai <[email protected]> wrote: > > This is likely a limitation on the IR we can currently process. We use > some > > of the PNaCl lowering passes to simplify LLVM IR, then run on that, which > > works for basically everything clang emits, but some things clang doesn't > > emit, might not work. This looks like that type of bug. > > > > You can grep for that string ("Unrecognized struct value") in the > fastcomp > > llvm repo, to see where it happens. Likely in lib/Transform/NaCl > somewhere. > > > > - Alon > > > > > > > > On Wed, Aug 27, 2014 at 1:45 PM, Tom Short <[email protected]> > wrote: > >> > >> > >> The Julia language [1] uses LLVM's JIT to dynamically create > >> code. It's closer to being able to generate static code [2], > >> including (I think) LLVM bitcode. > >> > >> As a trial, I used Julia to generate a large bitcode > >> file (sys.bc) for much of Julia's standard set of functions. For > >> simple functions that use standard LLVM types, a recent > >> Emscripten (fastcomp) generates good JavaScript. For more complex > >> functions that use other types, I'm getting a variety of errors. > >> Here is an example of a common error: > >> > >> Value: %Complex.16 %0 > >> LLVM ERROR: Unrecognized struct value > >> Traceback (most recent call last): > >> File "/usr/bin/emcc", line 1200, in <module> > >> > >> The disassembled code for the function that triggered this error > >> looks like this: > >> > >> > >> define %Complex.15 @"julia_sin;108403"(%Complex.15) { > >> top: > >> %1 = load %jl_value_t** @"*Main.Core.Float3267512", align 8 > >> %2 = getelementptr inbounds %jl_value_t* %1, i64 1, i32 0 > >> %3 = load %jl_value_t** %2, align 8 > >> %4 = extractvalue %Complex.15 %0, 0, !julia_type !98 > >> %5 = call float @"julia_convert;85919"(%jl_value_t* %3, i16 %4) > >> %6 = load %jl_value_t** @"*Main.Core.Float3267512", align 8 > >> %7 = getelementptr inbounds %jl_value_t* %6, i64 1, i32 0 > >> %8 = load %jl_value_t** %7, align 8 > >> %9 = extractvalue %Complex.15 %0, 1, !julia_type !98 > >> %10 = call float @"julia_convert;85919"(%jl_value_t* %8, i16 %9) > >> %11 = insertvalue %Complex.16 undef, float %5, 0 > >> %12 = insertvalue %Complex.16 %11, float %10, 1, !julia_type !103 > >> %13 = call %Complex.16 @"julia_sin;89568"(%Complex.16 %12), > !julia_type > >> !103 > >> %14 = load %jl_value_t** @"*Main.Core.Float1667510", align 8 > >> %15 = getelementptr inbounds %jl_value_t* %14, i64 1, i32 0 > >> %16 = load %jl_value_t** %15, align 8 > >> %17 = extractvalue %Complex.16 %13, 0 > >> %18 = call i16 @"julia_convert;85922"(%jl_value_t* %16, float %17), > >> !julia_type !98 > >> %19 = load %jl_value_t** @"*Main.Core.Float1667510", align 8 > >> %20 = getelementptr inbounds %jl_value_t* %19, i64 1, i32 0 > >> %21 = load %jl_value_t** %20, align 8 > >> %22 = extractvalue %Complex.16 %13, 1 > >> %23 = call i16 @"julia_convert;85922"(%jl_value_t* %21, float %22), > >> !julia_type !98 > >> %24 = insertvalue %Complex.15 undef, i16 %18, 0 > >> %25 = insertvalue %Complex.15 %24, i16 %23, 1, !julia_type !104 > >> ret %Complex.15 %25 > >> } > >> > >> The type mentioned in the error was defined earlier as: > >> > >> %Complex.16 = type { float, float } > >> > >> My main question is: where do I start to try to debug LLVM errors > >> like this? Are there LLVM references that'd help? Any way to use > >> Clang or other LLVM tool to try to narrow it down or test this? > >> The .bc code from Julia could well be wrong or be missing code, > >> but I don't really know where to start here. > >> > >> > >> > >> [1] http://julialang.org > >> [2] https://groups.google.com/d/msg/julia-dev/qdnggTuIp9s/BoQSNGNXxV0J > >> > >> -- > >> 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 a topic in the > > Google Groups "emscripten-discuss" group. > > To unsubscribe from this topic, visit > > > https://groups.google.com/d/topic/emscripten-discuss/Gxk678Fv2rc/unsubscribe > . > > To unsubscribe from this group and all its topics, 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.
