[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / NVPTX / noreturn.ll
blob86cec0a37d9bf3627990813d7efabffbf3a76d62
1 ; RUN: llc < %s -march=nvptx64 -mattr=+ptx64 -mcpu=sm_30 | FileCheck %s
2 ; RUN: %if ptxas %{llc < %s -march=nvptx64 -mattr=+ptx60 -mcpu=sm_30 | %ptxas-verify %}
4 @function_pointer = addrspace(1) global void (i32)* null
6 ; CHECK: .func trap_wrapper
7 ; CHECK-NEXT: ()
8 ; CHECK-NEXT: .noreturn;
10 declare void @trap_wrapper() #0
12 ; CHECK: .func {{.*}} non_void_noreturn()
13 ; CHECK-NOT: .noreturn
15 define i32 @non_void_noreturn() #0 {
16   ret i32 54
19 ; CHECK: .func true_noreturn0()
20 ; CHECK-NEXT: .noreturn
22 define void @true_noreturn0() #0 {
23   call void @trap_wrapper()
24   ret void
27 ; CHECK: .entry ignore_kernel_noreturn()
28 ; CHECK-NOT: .noreturn
30 define void @ignore_kernel_noreturn() #0 {
31   unreachable
34 ; CHECK-LABEL: .entry callprototype_noreturn(
35 ; CHECK: prototype_{{[0-9]+}} : .callprototype ()_ (.param .b32 _) .noreturn;
36 ; CHECK: prototype_{{[0-9]+}} : .callprototype (.param .b32 _) _ (.param .b32 _);
38 define void @callprototype_noreturn(i32) {
39   %fn = load void (i32)*, void (i32)* addrspace(1)* @function_pointer
40   call void %fn(i32 %0) #0
41   %non_void = bitcast void (i32)* %fn to i32 (i32)*
42   %2 = call i32 %non_void(i32 %0) #0
43   ret void
46 attributes #0 = { noreturn }
48 !nvvm.annotations = !{!0, !1}
50 !0 = !{void ()* @ignore_kernel_noreturn, !"kernel", i32 1}
51 !1 = !{void (i32)* @callprototype_noreturn, !"kernel", i32 1}