[llvm-dev] Stackmap offset computation on AArch64

Sam Elliott via llvm-dev llvm-dev at lists.llvm.org
Sat Jul 27 02:22:32 PDT 2019


I think you should be looking in AArch64FrameLowering.cpp. The relevant function is AArch64FrameLowering::getFrameIndexReference, I believe.

Sam

> On 26 Jul 2019, at 10:55AM, Loïc Ottet via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi all,
> 
> I am trying to implement statepoints for the AArch64 target and I’m running into the issue where the following bitcode:
> 
> define i32 addrspace(1)* @test(i32 addrspace(1)* %ptr) gc "statepoint-example" {
> entry:
>  call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* @foo, i32 0, i32 0, i32 0, i32 0, i32 addrspace(1)* %ptr)
>  ret i32 addrspace(1)* %ptr
> }
> 
> This gets emitted as the following assembly code:
> 
> test:                                   // @test
> 	.cfi_startproc
> // %bb.0:                               // %entry
> 	str	x30, [sp, #-16]!        // 8-byte Folded Spill
> 	.cfi_def_cfa_offset 16
> 	.cfi_offset w30, -16
> 	str	x0, [sp, #8]
> 	bl	return_i1
> .Ltmp0:
> 	ldr	x0, [sp, #8]
> 	ldr	x30, [sp], #16          // 8-byte Folded Reload
> 	ret
> .Lfunc_end0:
> 	.size	test, .Lfunc_end0-test
> 	.cfi_endproc
> 
> The generated stackmap indicates that %ptr is located at offset -8 from the stack pointer, instead of the expected 8. After trying a few other configurations it happens that the offsets are computed relative to the stack pointer of the parent frame instead of the current one.
> 
> Can someone point me to the place where the stackmap offsets get computed so I can try to debug this?
> 
> Thanks,
> 
> Loïc Ottet
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

--
Sam Elliott
Software Developer - LLVM
lowRISC CIC
selliott at lowrisc.org
--







More information about the llvm-dev mailing list