>
> i am going to look at the implementing code and work out what is
> generated, i think, and then ask llvmdev for help.


You should start with lli and make sure that you are writing the IR
correctly; if it works in lli, then the issue is with Julia (as is most
likely -- llvmcall is kind of brittle).


> here's something i don't understand about the context in which the llvm ir
> is inserted.  "declare" instructions don't seem to be accepted, for example.


See
https://github.com/JuliaLang/julia/pull/8740


On Sun, May 17, 2015 at 10:17 AM, andrew cooke <[email protected]> wrote:

> thanks, but the reason i need lvmcall is because i want to call a specific
> intel instruction (which llvm actually supports - i've found the patch for
> it).  but before i do that i am trying to just get "something" to work, and
> printf seemed like a good intermediate goal.
>
> i am going to look at the implementing code and work out what is
> generated, i think, and then ask llvmdev for help.  there's something i
> don't understand about the context in which the llvm ir is inserted.
> "declare" instructions don't seem to be accepted, for example.  once i can
> pin that down i think i can ask a sensible question on llvmdev...
>
> cheers,
> andrew
>
>
> On Saturday, 16 May 2015 22:01:25 UTC-3, Yichao Yu wrote:
>
>> On Sat, May 16, 2015 at 5:01 PM, andrew cooke <[email protected]> wrote:
>> >
>> > Does anyone have a working example that calls printf via llvmcall?
>> >
>> > I realise I'm uncomfortably inbetween llvmdev and julia-users, but I'm
>> > asking here first because I suspect my limitations are still more
>> > julia-related.
>> >
>> > In particular,
>> >
>> > julia> g() = Base.llvmcall("""
>> >          call i32 (i8*, ...)* @printf(i8* c"hello world\00")
>> >          ret""",
>> >          Void, Tuple{})
>> > g (generic function with 2 methods)
>> >
>> > julia> g()
>> > ERROR: error compiling g: Failed to parse LLVM Assembly:
>> > julia: llvmcall:3:35: error: expected string
>> > call i32 (i8*, ...)* @printf(i8* c"hello world
>> >                                   ^
>> >
>> > seems like it's *almost* there...?
>> >
>> > Thanks,
>> > Andrew
>> >
>> > (I suspect I also need something other than @printf, like
>> > IntrinsicsX86.printf or something, but I can't find where I saw an
>> example
>> > like that...  Related, declare doesn't seem to be accepted, or
>> assignment to
>> > global vsariables.  But I am completely new to all this...)
>> >
>>
>> I was also interested in knowning how to use `llvmcall` in general but
>> at least for this limited case, (and I guess you probably know
>> already) it is easier to user `ccall`
>>
>> ```julia
>> julia> ccall(:printf, Int, (Ptr{Cchar},), "hellow world\n")
>> hellow world
>> 13
>> ```
>>
>

Reply via email to