|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
1 | 2 | ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs -trap-unreachable=false \
|
2 |
| -; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOTRAP |
| 3 | +; RUN: | FileCheck %s --check-prefixes=CHECK,NO-TRAP-UNREACHABLE |
3 | 4 | ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -trap-unreachable=false \
|
4 |
| -; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOTRAP |
| 5 | +; RUN: | FileCheck %s --check-prefixes=CHECK,NO-TRAP-UNREACHABLE |
5 | 6 | ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs -trap-unreachable -no-trap-after-noreturn \
|
6 |
| -; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOTRAP |
| 7 | +; RUN: | FileCheck %s --check-prefixes=CHECK,NO-TRAP-AFTER-NORETURN |
7 | 8 | ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -trap-unreachable -no-trap-after-noreturn \
|
8 |
| -; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOTRAP |
| 9 | +; RUN: | FileCheck %s --check-prefixes=CHECK,NO-TRAP-AFTER-NORETURN |
9 | 10 | ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs -trap-unreachable -no-trap-after-noreturn=false \
|
10 |
| -; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-TRAP |
| 11 | +; RUN: | FileCheck %s --check-prefixes=CHECK,TRAP |
11 | 12 | ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -trap-unreachable -no-trap-after-noreturn=false \
|
12 |
| -; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-TRAP |
| 13 | +; RUN: | FileCheck %s --check-prefixes=CHECK,TRAP |
| 14 | +; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -trap-unreachable -mattr=+ptx83 \ |
| 15 | +; RUN: | FileCheck %s --check-prefixes=BUG-FIXED |
13 | 16 | ; RUN: %if ptxas && !ptxas-12.0 %{ llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs | %ptxas-verify %}
|
14 | 17 | ; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs | %ptxas-verify %}
|
15 | 18 |
|
16 |
| -; CHECK: .extern .func throw |
| 19 | +target triple = "nvptx-unknown-cuda" |
| 20 | + |
17 | 21 | declare void @throw() #0
|
18 | 22 | declare void @llvm.trap() #0
|
19 | 23 |
|
20 |
| -; CHECK-LABEL: .entry kernel_func |
21 | 24 | define void @kernel_func() {
|
22 |
| -; CHECK: call.uni |
23 |
| -; CHECK: throw, |
| 25 | +; NO-TRAP-UNREACHABLE-LABEL: kernel_func( |
| 26 | +; NO-TRAP-UNREACHABLE: { |
| 27 | +; NO-TRAP-UNREACHABLE-EMPTY: |
| 28 | +; NO-TRAP-UNREACHABLE-EMPTY: |
| 29 | +; NO-TRAP-UNREACHABLE-NEXT: // %bb.0: |
| 30 | +; NO-TRAP-UNREACHABLE-NEXT: { // callseq 0, 0 |
| 31 | +; NO-TRAP-UNREACHABLE-NEXT: call.uni |
| 32 | +; NO-TRAP-UNREACHABLE-NEXT: throw, |
| 33 | +; NO-TRAP-UNREACHABLE-NEXT: ( |
| 34 | +; NO-TRAP-UNREACHABLE-NEXT: ); |
| 35 | +; NO-TRAP-UNREACHABLE-NEXT: } // callseq 0 |
| 36 | +; NO-TRAP-UNREACHABLE-NEXT: // begin inline asm |
| 37 | +; NO-TRAP-UNREACHABLE-NEXT: exit; |
| 38 | +; NO-TRAP-UNREACHABLE-NEXT: // end inline asm |
| 39 | +; |
| 40 | +; NO-TRAP-AFTER-NORETURN-LABEL: kernel_func( |
| 41 | +; NO-TRAP-AFTER-NORETURN: { |
| 42 | +; NO-TRAP-AFTER-NORETURN-EMPTY: |
| 43 | +; NO-TRAP-AFTER-NORETURN-EMPTY: |
| 44 | +; NO-TRAP-AFTER-NORETURN-NEXT: // %bb.0: |
| 45 | +; NO-TRAP-AFTER-NORETURN-NEXT: { // callseq 0, 0 |
| 46 | +; NO-TRAP-AFTER-NORETURN-NEXT: call.uni |
| 47 | +; NO-TRAP-AFTER-NORETURN-NEXT: throw, |
| 48 | +; NO-TRAP-AFTER-NORETURN-NEXT: ( |
| 49 | +; NO-TRAP-AFTER-NORETURN-NEXT: ); |
| 50 | +; NO-TRAP-AFTER-NORETURN-NEXT: } // callseq 0 |
| 51 | +; NO-TRAP-AFTER-NORETURN-NEXT: // begin inline asm |
| 52 | +; NO-TRAP-AFTER-NORETURN-NEXT: exit; |
| 53 | +; NO-TRAP-AFTER-NORETURN-NEXT: // end inline asm |
| 54 | +; NO-TRAP-AFTER-NORETURN-NEXT: trap; exit; |
| 55 | +; |
| 56 | +; TRAP-LABEL: kernel_func( |
| 57 | +; TRAP: { |
| 58 | +; TRAP-EMPTY: |
| 59 | +; TRAP-EMPTY: |
| 60 | +; TRAP-NEXT: // %bb.0: |
| 61 | +; TRAP-NEXT: { // callseq 0, 0 |
| 62 | +; TRAP-NEXT: call.uni |
| 63 | +; TRAP-NEXT: throw, |
| 64 | +; TRAP-NEXT: ( |
| 65 | +; TRAP-NEXT: ); |
| 66 | +; TRAP-NEXT: } // callseq 0 |
| 67 | +; TRAP-NEXT: trap; exit; |
| 68 | +; |
| 69 | +; BUG-FIXED-LABEL: kernel_func( |
| 70 | +; BUG-FIXED: { |
| 71 | +; BUG-FIXED-EMPTY: |
| 72 | +; BUG-FIXED-EMPTY: |
| 73 | +; BUG-FIXED-NEXT: // %bb.0: |
| 74 | +; BUG-FIXED-NEXT: { // callseq 0, 0 |
| 75 | +; BUG-FIXED-NEXT: call.uni |
| 76 | +; BUG-FIXED-NEXT: throw, |
| 77 | +; BUG-FIXED-NEXT: ( |
| 78 | +; BUG-FIXED-NEXT: ); |
| 79 | +; BUG-FIXED-NEXT: } // callseq 0 |
| 80 | +; BUG-FIXED-NEXT: trap; |
24 | 81 | call void @throw()
|
25 |
| -; CHECK-TRAP-NOT: exit; |
26 |
| -; CHECK-TRAP: trap; |
27 |
| -; CHECK-NOTRAP-NOT: trap; |
28 |
| -; CHECK: exit; |
29 | 82 | unreachable
|
30 | 83 | }
|
31 | 84 |
|
32 |
| -; CHECK-LABEL: kernel_func_2 |
33 | 85 | define void @kernel_func_2() {
|
34 |
| -; CHECK: trap; exit; |
| 86 | +; CHECK-LABEL: kernel_func_2( |
| 87 | +; CHECK: { |
| 88 | +; CHECK-EMPTY: |
| 89 | +; CHECK-EMPTY: |
| 90 | +; CHECK-NEXT: // %bb.0: |
| 91 | +; CHECK-NEXT: trap; exit; |
| 92 | +; |
| 93 | +; BUG-FIXED-LABEL: kernel_func_2( |
| 94 | +; BUG-FIXED: { |
| 95 | +; BUG-FIXED-EMPTY: |
| 96 | +; BUG-FIXED-EMPTY: |
| 97 | +; BUG-FIXED-NEXT: // %bb.0: |
| 98 | +; BUG-FIXED-NEXT: trap; |
35 | 99 | call void @llvm.trap()
|
36 |
| - |
37 |
| -;; Make sure we avoid emitting two trap instructions. |
38 |
| -; CHECK-NOT: trap; |
39 |
| -; CHECK-NOT: exit; |
| 100 | +; Make sure we avoid emitting two trap instructions. |
40 | 101 | unreachable
|
41 | 102 | }
|
42 | 103 |
|
43 | 104 | attributes #0 = { noreturn }
|
44 | 105 |
|
45 |
| - |
46 | 106 | !nvvm.annotations = !{!1}
|
47 |
| - |
48 | 107 | !1 = !{ptr @kernel_func, !"kernel", i32 1}
|
0 commit comments