>   %3 = alloca [5 x %jl_value_t*], align 8
> LLVM ERROR: 0 && "some i64 thing we can't legalize yet"

Hmm, that line doesn't contain any i64s - unless the pointer is 64-bit? Are
you building the code for the emscripten/asm.js target, which is 32-bit?

- Alon



On Mon, Sep 1, 2014 at 7:51 AM, Tom Short <[email protected]> wrote:

> Here's another error I've come across ("some i64 thing we can't
> legalize yet"). This happens later in the compile process, so I can
> provide a link to a reduced case. Here is a link to an emcc-1-.bc
> file:
>
> http://1drv.ms/1sUR77k
>
> Here is the error for this case:
>
> [tshort@bridgelinux julia]$ emcc -v
> /tmp/emscripten_temp/emcc-1-linktime.bc  -o out.js -s
> EXPORTED_FUNCTIONS="['_julia_abs;104545']"
> WARNING  root: invocation: /usr/bin/emcc -v
> /tmp/emscripten_temp/emcc-1-linktime.bc -o out.js -s
> EXPORTED_FUNCTIONS=['_julia_abs;104545']  (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-1-linktime.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 0.01 seconds
> DEBUG    root: emcc step "link" took 0.00 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;104545,malloc,free -globaldce
> -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt
> -enable-emscripten-cxx-exceptions
> DEBUG    root: emcc step "post-link" took 0.01 seconds
> DEBUG    root: LLVM => JS
> DEBUG    root: emscript: llvm backend: /opt/emscripten-fastcomp/llc
> /home/tshort/emjl/usr/lib/julia/mtmp/out.bc -march=js -filetype=asm -o
> /tmp/emscripten_temp/tmp7QmDVP.4.js -emscripten-assertions=1
> -emscripten-no-aliasing-function-pointers -O0
> -emscripten-max-setjmps=20
>   %3 = alloca [5 x %jl_value_t*], align 8
> LLVM ERROR: 0 && "some i64 thing we can't legalize yet"
> DEBUG    root:   emscript: llvm backend took 0.00503993034363 seconds
> Traceback (most recent call last):
>   File "/usr/lib/emscripten/emscripten.py", line 1506, in <module>
>     _main(environ=os.environ)
>
> Like the previous error, this one works fine with fastcomp turned off.
>
> Tom
>
>
> On Mon, Sep 1, 2014 at 10:48 AM, Tom Short <[email protected]>
> wrote:
> > 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.
>

-- 
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