ah, thanks - that issue is a huge help.
On Sunday, 17 May 2015 11:38:20 UTC-3, Isaiah wrote: > > 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] > <javascript:>> 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 >>> ``` >>> >> >
