For the "Unrecognized struct value" error, I wasn't able to find a
reduced case, so I'm including a link to a large emcc-0-basebc.bc
file:

http://1drv.ms/1vE5fXs

Here is the error I get with Emscripten:

[tshort@bridgelinux julia]$ emcc -v
/tmp/emscripten_temp/emcc-0-basebc.bc  -o out.js -s
EXPORTED_FUNCTIONS="['_julia_abs;104547']"
WARNING  root: invocation: /usr/bin/emcc -v
/tmp/emscripten_temp/emcc-0-basebc.bc -o out.js -s
EXPORTED_FUNCTIONS=['_julia_abs;104547']  (in
/home/tshort/emjl/usr/lib/julia)
INFO     root: (Emscripten: Running sanity checks)
INFO     root: (Emscripten: Running sanity checks)
DEBUG    root: compiling to bitcode
DEBUG    root: emcc step "parse arguments and setup" took 0.11 seconds
DEBUG    root: using bitcode file: /tmp/emscripten_temp/emcc-0-basebc.bc
DEBUG    root: emcc step "bitcodeize inputs" took 0.00 seconds
DEBUG    root: emcc step "process inputs" took 0.00 seconds
DEBUG    root: will generate JavaScript
DEBUG    root: emcc step "calculate system libraries" took 2.69 seconds
DEBUG    root: emcc step "link" took 0.04 seconds
DEBUG    root: saving intermediate processing steps to /tmp/emscripten_temp
DEBUG    root: emcc: LLVM opts: -strip-debug -internalize
-internalize-public-api-list=julia_abs;104547,malloc,free,malloc
-globaldce -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt
-enable-emscripten-cxx-exceptions
Value:   %27 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %26, i64 1)
LLVM ERROR: Unrecognized struct value
INFO     root: emcc saved files are in:/home/tshort/emjl/usr/lib/julia/mtmp
Traceback (most recent call last):
  File "/usr/bin/emcc", line 1200, in <module>
    shared.Building.llvm_opt(final, link_opts)
  File "/usr/lib/emscripten/tools/shared.py", line 1358, in llvm_opt
    assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:


This started with a sys.bc generated by Julia. To create this, I took
a recent Julia with the following changes made to the main Julia
Makefile:

-    $(call spawn,$(JULIA_EXECUTABLE)) --build $(call
cygpath_w,$(build_private_libdir)/sys) \
+    $(call spawn,$(JULIA_EXECUTABLE)) --build $(call
cygpath_w,$(build_private_libdir)/sys) --dump-bitcode=yes
--compile=all \

Tom


On Fri, Aug 29, 2014 at 3:48 PM, 'JF Bastien' via emscripten-discuss
<[email protected]> wrote:
> That would be very helpful, thanks. We definitely want to support more than
> just bitcode generated by Clang.
>
> FWIW switching to MCJIT won't change anything if you only do static code
> generation: the "stable" bitcode you give Emscripten/PNaCl doesn't go
> through MCJIT before becoming "stable".
>
>
> On Fri, Aug 29, 2014 at 12:45 PM, Tom Short <[email protected]> wrote:
>>
>> Thanks for the offer, JF. I'll see if I can find a reduced bitcode
>> file that displays some of the issues I'm running into.
>>
>> Tom
>>
>>
>>
>> On Fri, Aug 29, 2014 at 3:33 PM, 'JF Bastien' via emscripten-discuss
>> <[email protected]> wrote:
>> > 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 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 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.

Reply via email to