[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