mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
26d628d6ce
Summary: Currently fast-isel-abort will only abort for regular instructions, and just warn for function calls, terminators, function arguments. There is already fast-isel-abort-args but nothing for calls and terminators. This change turns the fast-isel-abort options into an integer option, so that multiple levels of strictness can be defined. This will help no being surprised when the "abort" option indeed does not abort, and enables the possibility to write test that verifies that no intrinsics are forgotten by fast-isel. Reviewers: resistor, echristo Subscribers: jfb, llvm-commits Differential Revision: http://reviews.llvm.org/D7941 From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230775 91177308-0d34-0410-b5e6-96231b3b80d8
166 lines
4.4 KiB
LLVM
166 lines
4.4 KiB
LLVM
; 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 1
|
|
; 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 _liveConstant
|
|
; CHECK-NEXT: .quad 8
|
|
; CHECK-NEXT: .quad _directFrameIdx
|
|
; CHECK-NEXT: .quad 40
|
|
; CHECK-NEXT: .quad _longid
|
|
; CHECK-NEXT: .quad 8
|
|
|
|
; 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 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long -1
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long -1
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 65536
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 2000000000
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 2147483647
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long -1
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long -1
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; LargeConstant at index 0
|
|
; CHECK-NEXT: .byte 5
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; LargeConstant at index 1
|
|
; CHECK-NEXT: .byte 5
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 1
|
|
; LargeConstant at index 2
|
|
; CHECK-NEXT: .byte 5
|
|
; CHECK-NEXT: .byte 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 2
|
|
; SmallConstant
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 8
|
|
; 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 8
|
|
; 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 8
|
|
; CHECK-NEXT: .short 6
|
|
; 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, ...)
|