| ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s | |
| ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -fast-isel -fast-isel-abort=1 | FileCheck %s | |
| ; 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 4 | |
| ; Num LargeConstants | |
| ; CHECK-NEXT: .long 3 | |
| ; Num Callsites | |
| ; CHECK-NEXT: .long 7 | |
| ; Functions and stack size | |
| ; CHECK-NEXT: .quad _constantargs | |
| ; CHECK-NEXT: .quad 8 | |
| ; CHECK-NEXT: .quad 1 | |
| ; CHECK-NEXT: .quad _liveConstant | |
| ; CHECK-NEXT: .quad 8 | |
| ; CHECK-NEXT: .quad 1 | |
| ; CHECK-NEXT: .quad _directFrameIdx | |
| ; CHECK-NEXT: .quad 40 | |
| ; CHECK-NEXT: .quad 1 | |
| ; CHECK-NEXT: .quad _longid | |
| ; CHECK-NEXT: .quad 8 | |
| ; CHECK-NEXT: .quad 4 | |
| ; Large Constants | |
| ; CHECK-NEXT: .quad 2147483648 | |
| ; CHECK-NEXT: .quad 4294967295 | |
| ; CHECK-NEXT: .quad 4294967296 | |
| ; Callsites | |
| ; Constant arguments | |
| ; | |
| ; CHECK-NEXT: .quad 1 | |
| ; CHECK-NEXT: .long L{{.*}}-_constantargs | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 12 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long -1 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long -1 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 65536 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 2000000000 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 2147483647 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long -1 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long -1 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 0 | |
| ; LargeConstant at index 0 | |
| ; CHECK-NEXT: .byte 5 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 0 | |
| ; LargeConstant at index 1 | |
| ; CHECK-NEXT: .byte 5 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 1 | |
| ; LargeConstant at index 2 | |
| ; CHECK-NEXT: .byte 5 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 2 | |
| ; SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long -1 | |
| define void @constantargs() { | |
| entry: | |
| tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 1, i32 15, i16 65535, i16 -1, i32 65536, i32 2000000000, i32 2147483647, i32 -1, i32 4294967295, i32 4294967296, i64 2147483648, i64 4294967295, i64 4294967296, i64 -1) | |
| ret void | |
| } | |
| ; Map a constant value. | |
| ; | |
| ; CHECK-LABEL: .long L{{.*}}-_liveConstant | |
| ; CHECK-NEXT: .short 0 | |
| ; 1 location | |
| ; CHECK-NEXT: .short 1 | |
| ; Loc 0: SmallConstant | |
| ; CHECK-NEXT: .byte 4 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long 33 | |
| define void @liveConstant() { | |
| tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 5, i32 33) | |
| ret void | |
| } | |
| ; Directly map an alloca's address. | |
| ; | |
| ; Callsite 16 | |
| ; CHECK-LABEL: .long L{{.*}}-_directFrameIdx | |
| ; CHECK-NEXT: .short 0 | |
| ; 1 location | |
| ; CHECK-NEXT: .short 1 | |
| ; Loc 0: Direct rbp - ofs | |
| ; CHECK-NEXT: .byte 2 | |
| ; CHECK-NEXT: .byte 0 | |
| ; CHECK-NEXT: .short 8 | |
| ; CHECK-NEXT: .short 6 | |
| ; CHECK-NEXT: .short 0 | |
| ; CHECK-NEXT: .long | |
| define void @directFrameIdx() { | |
| entry: | |
| %metadata1 = alloca i64, i32 3, align 8 | |
| store i64 11, i64* %metadata1 | |
| store i64 12, i64* %metadata1 | |
| store i64 13, i64* %metadata1 | |
| call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, i64* %metadata1) | |
| ret void | |
| } | |
| ; Test a 64-bit ID. | |
| ; | |
| ; CHECK: .quad 4294967295 | |
| ; CHECK-LABEL: .long L{{.*}}-_longid | |
| ; CHECK: .quad 4294967296 | |
| ; CHECK-LABEL: .long L{{.*}}-_longid | |
| ; CHECK: .quad 9223372036854775807 | |
| ; CHECK-LABEL: .long L{{.*}}-_longid | |
| ; CHECK: .quad -1 | |
| ; CHECK-LABEL: .long L{{.*}}-_longid | |
| define void @longid() { | |
| entry: | |
| tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4294967295, i32 0) | |
| tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4294967296, i32 0) | |
| tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 9223372036854775807, i32 0) | |
| tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 -1, i32 0) | |
| ret void | |
| } | |
| declare void @llvm.experimental.stackmap(i64, i32, ...) |