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

Reply via email to