forked from OSchip/llvm-project
[STACKMAPS] Document+test UINT64_MAX stack size.
When a function does a dynamic stack allocation, the function's stack size (in the stack map) is reported as UINT64_MAX. This change tests and documents this property. Differential Revision: https://reviews.llvm.org/D128525
This commit is contained in:
parent
a83aa33d1b
commit
94fbb147c8
|
@ -328,7 +328,7 @@ format of this section follows:
|
|||
uint32 : NumRecords
|
||||
StkSizeRecord[NumFunctions] {
|
||||
uint64 : Function Address
|
||||
uint64 : Stack Size
|
||||
uint64 : Stack Size (or UINT64_MAX if not statically known)
|
||||
uint64 : Record Count
|
||||
}
|
||||
Constants[NumConstants] {
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
; RUN: llc < %s -mtriple=arm64-linux-gnu | FileCheck %s
|
||||
|
||||
; When a function does a dynamic stack allocation, the function's stack size
|
||||
; is reported as UINT64_MAX.
|
||||
|
||||
; CHECK-LABEL: .section .llvm_stackmaps
|
||||
; CHECK-NEXT: __LLVM_StackMaps:
|
||||
; Header
|
||||
; CHECK-NEXT: .byte 3
|
||||
; CHECK-NEXT: .byte 0
|
||||
; CHECK-NEXT: .hword 0
|
||||
; Num Functions
|
||||
; CHECK-NEXT: .word 1
|
||||
; Num LargeConstants
|
||||
; CHECK-NEXT: .word 0
|
||||
; Num Callsites
|
||||
; CHECK-NEXT: .word 1
|
||||
|
||||
; Functions and stack size
|
||||
; CHECK-NEXT: .xword f
|
||||
; CHECK-NEXT: .xword -1
|
||||
|
||||
define void @f(i32 %nelems) {
|
||||
entry:
|
||||
%mem = alloca i32, i32 %nelems
|
||||
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0, i32* %mem)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.experimental.stackmap(i64, i32, ...)
|
|
@ -0,0 +1,30 @@
|
|||
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
|
||||
|
||||
; When a function does a dynamic stack allocation, the function's stack size
|
||||
; is reported as UINT64_MAX.
|
||||
|
||||
; CHECK: .section .llvm_stackmaps
|
||||
; CHECK-NEXT: __LLVM_StackMaps:
|
||||
; Header
|
||||
; CHECK-NEXT: .byte 3
|
||||
; CHECK-NEXT: .byte 0
|
||||
; CHECK-NEXT: .short 0
|
||||
; Num Functions
|
||||
; CHECK-NEXT: .long 1
|
||||
; Num LargeConstants
|
||||
; CHECK-NEXT: .long 0
|
||||
; Num Callsites
|
||||
; CHECK-NEXT: .long 1
|
||||
|
||||
; Functions and stack size
|
||||
; CHECK-NEXT: .quad f
|
||||
; CHECK-NEXT: .quad -1
|
||||
|
||||
define void @f(i32 %nelems) {
|
||||
entry:
|
||||
%mem = alloca i32, i32 %nelems
|
||||
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0, i32* %mem)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.experimental.stackmap(i64, i32, ...)
|
|
@ -0,0 +1,30 @@
|
|||
; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s
|
||||
|
||||
; When a function does a dynamic stack allocation, the function's stack size is
|
||||
; reported as UINT64_MAX.
|
||||
|
||||
; CHECK-LABEL: .section __LLVM_STACKMAPS,__llvm_stackmaps
|
||||
; CHECK-NEXT: __LLVM_StackMaps:
|
||||
; Header
|
||||
; CHECK-NEXT: .byte 3
|
||||
; CHECK-NEXT: .byte 0
|
||||
; CHECK-NEXT: .short 0
|
||||
; Num Functions
|
||||
; CHECK-NEXT: .long 1
|
||||
; Num LargeConstants
|
||||
; CHECK-NEXT: .long 0
|
||||
; Num Callsites
|
||||
; CHECK-NEXT: .long 1
|
||||
|
||||
; Functions and stack size
|
||||
; CHECK-NEXT: .quad _f
|
||||
; CHECK-NEXT: .quad -1
|
||||
|
||||
define void @f(i32 %nelems) {
|
||||
entry:
|
||||
%mem = alloca i32, i32 %nelems
|
||||
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0, i32* %mem)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.experimental.stackmap(i64, i32, ...)
|
Loading…
Reference in New Issue