mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
79 lines
2.0 KiB
LLVM
79 lines
2.0 KiB
LLVM
|
; RUN: opt -inline %s -S -o - | FileCheck %s
|
||
|
|
||
|
declare void @llvm.lifetime.start(i64, i8*)
|
||
|
declare void @llvm.lifetime.end(i64, i8*)
|
||
|
|
||
|
define void @helper_both_markers() {
|
||
|
%a = alloca i8
|
||
|
call void @llvm.lifetime.start(i64 1, i8* %a)
|
||
|
call void @llvm.lifetime.end(i64 1, i8* %a)
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
define void @test_both_markers() {
|
||
|
; CHECK: @test_both_markers
|
||
|
; CHECK: llvm.lifetime.start(i64 1
|
||
|
; CHECK-NEXT: llvm.lifetime.end(i64 1
|
||
|
call void @helper_both_markers()
|
||
|
; CHECK-NEXT: llvm.lifetime.start(i64 1
|
||
|
; CHECK-NEXT: llvm.lifetime.end(i64 1
|
||
|
call void @helper_both_markers()
|
||
|
; CHECK-NEXT: ret void
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
;; Without this, the inliner will simplify out @test_no_marker before adding
|
||
|
;; any lifetime markers.
|
||
|
declare void @use(i8* %a)
|
||
|
|
||
|
define void @helper_no_markers() {
|
||
|
%a = alloca i8
|
||
|
call void @use(i8* %a)
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
;; We can't use CHECK-NEXT because there's an extra call void @use in between.
|
||
|
;; Instead, we use CHECK-NOT to verify that there are no other lifetime calls.
|
||
|
define void @test_no_marker() {
|
||
|
; CHECK: @test_no_marker
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.start(i64 -1
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.end(i64 -1
|
||
|
call void @helper_no_markers()
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.start(i64 -1
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.end(i64 -1
|
||
|
call void @helper_no_markers()
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: ret void
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
define void @helper_two_casts() {
|
||
|
%a = alloca i32
|
||
|
%b = bitcast i32* %a to i8*
|
||
|
call void @llvm.lifetime.start(i64 4, i8* %b)
|
||
|
%c = bitcast i32* %a to i8*
|
||
|
call void @llvm.lifetime.end(i64 4, i8* %c)
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
define void @test_two_casts() {
|
||
|
; CHECK: @test_two_casts
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.start(i64 4
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.end(i64 4
|
||
|
call void @helper_two_casts()
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.start(i64 4
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: llvm.lifetime.end(i64 4
|
||
|
call void @helper_two_casts()
|
||
|
; CHECK-NOT: lifetime
|
||
|
; CHECK: ret void
|
||
|
ret void
|
||
|
}
|