[LLVMdev] Is addrspacecast implemented on Windows?

David Majnemer david.majnemer at gmail.com
Mon Jan 27 12:42:20 PST 2014


I believe the following does what you would like:

define i64 @getStackBottom(i64 %addr) {
  %0 = inttoptr i64 %addr to i64 addrspace(256)*
  %1 = load i64 addrspace(256)* %0, align 1
  ret i64 %1
}

My build of llvm generates the following code with -O3:
getStackBottom:
        movq    %gs:(%rdi), %rax
        retq




On Mon, Jan 27, 2014 at 12:04 PM, Kai Nacke <kai.nacke at redstar.de> wrote:

> Hi all!
>
> On x86_64, segment prefix fs: is in address space 257 and gs: in address
> space 256. (BTW: are there constants for these magic values?) How can I use
> this in IR? I want to express this assembler code in IR:
>
>                  mov RAX, 8;
>                  mov RAX, GS:[RAX];
>                  ret;
>
> I tried the following:
>
> define i64 @getStackBottom(i64 %addr) {
> entry:
>   %ptr = inttoptr i64 %addr to i64*
>   %fs_ptr = addrspacecast i64* %ptr to i64 addrspace(256)*
>   %bottom = load i64 addrspace(256)* %fs_ptr, align 1
>   ret i64 %bottom
> }
>
> but this results in
>
> LLVM ERROR: Cannot select: 0xcc6c60: i64 = addrspacecast 0xcc6b60[0 ->
> 256] [ORD=3] [ID=6]
>   0xcc6b60: i64,ch = CopyFromReg 0xc95e38, 0xcc6a60 [ORD=1] [ID=5]
>     0xcc6a60: i64 = Register %vreg0 [ID=1]
> In function: getStackBottom
> Stack dump:
> 0.      Program arguments: llc thr_ll.ll
> 1.      Running pass 'Function Pass Manager' on module 'thr_ll.ll'.
> 2.      Running pass 'X86 DAG->DAG Instruction Selection' on function
> '@getStackBottom'
>
> Do I miss something here? Or is this simply not yet implemented?
>
> Regards,
> Kai
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140127/4e04cb1d/attachment.html>


More information about the llvm-dev mailing list