[LLVMdev] Named Register Implementation
Jeremy Lakeman
Jeremy.Lakeman at gmail.com
Fri Mar 28 18:16:13 PDT 2014
On Sat, Mar 29, 2014 at 1:30 AM, Renato Golin <renato.golin at linaro.org>wrote:
> Folks,
>
> So, I think we kind of agree that some named registers could be
> implemented, and that it should be an intrinsic that passes the name
> of the register down.
>
> This C code:
>
> register unsigned long current_stack_pointer asm("sp");
> unsigned long get_stack_pointer_addr() {
> return current_stack_pointer;
> }
> void set_stack_pointer_addr(unsigned long addr) {
> current_stack_pointer = addr;
> }
>
> Would become something like:
>
> define i32 @get_stack_pointer_addr() nounwind {
> entry:
> %0 = call i32 @llvm.read_register("sp")
> ret i32 %0
> }
>
> define void @set_stack_pointer_addr(i32 %addr) nounwind {
> entry:
> call void @llvm.write_register("sp", %addr)
> ret void
> }
>
>
Should that be something like;
declare void @llvm.write_register.sp(i32 val)
declare i32 @llvm.read_register.sp()
define i32 @get_stack_pointer_addr() nounwind {
entry:
%0 = call i32 @llvm.read_register.sp()
ret i32 %0
}
define void @set_stack_pointer_addr(i32 %addr) nounwind {
entry:
call void @llvm.write_register.sp(%addr)
ret void
}
Then you don't need to clutter the IR with metadata or a constant i8* to
identify the register.
There's precedent for overloading intrinsics.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140329/8af554ea/attachment.html>
More information about the llvm-dev
mailing list