Skip to content

Commit b88976b

Browse files
Only emit exit for PTX v8.3+
1 parent 529062c commit b88976b

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

llvm/lib/Target/NVPTX/NVPTXInstrInfo.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ def hasVote : Predicate<"Subtarget->hasVote()">;
139139
def hasDouble : Predicate<"Subtarget->hasDouble()">;
140140
def hasLDG : Predicate<"Subtarget->hasLDG()">;
141141
def hasLDU : Predicate<"Subtarget->hasLDU()">;
142+
def hasPTXASUnreachableBug : Predicate<"Subtarget->hasPTXASUnreachableBug()">;
143+
def noPTXASUnreachableBug : Predicate<"!Subtarget->hasPTXASUnreachableBug()">;
142144

143145
def doF32FTZ : Predicate<"useF32FTZ()">;
144146
def doNoF32FTZ : Predicate<"!useF32FTZ()">;
@@ -3736,9 +3738,10 @@ def Callseq_End :
37363738
[(callseq_end timm:$amt1, timm:$amt2)]>;
37373739

37383740
// trap instruction
3741+
def trapinst : NVPTXInst<(outs), (ins), "trap;", [(trap)]>, Requires<[noPTXASUnreachableBug]>;
37393742
// Emit an `exit` as well to convey to ptxas that `trap` exits the CFG.
37403743
// This won't be necessary in a future version of ptxas.
3741-
def trapinst : NVPTXInst<(outs), (ins), "trap; exit;", [(trap)]>;
3744+
def trapinstexit : NVPTXInst<(outs), (ins), "trap; exit;", [(trap)]>, Requires<[hasPTXASUnreachableBug]>;
37423745
// brkpt instruction
37433746
def debugtrapinst : NVPTXInst<(outs), (ins), "brkpt;", [(debugtrap)]>;
37443747

llvm/lib/Target/NVPTX/NVPTXSubtarget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class NVPTXSubtarget : public NVPTXGenSubtargetInfo {
9595
bool hasDotInstructions() const {
9696
return SmVersion >= 61 && PTXVersion >= 50;
9797
}
98-
bool hasPTXASUnreachableBug() const { return PTXVersion <= 83; }
98+
bool hasPTXASUnreachableBug() const { return PTXVersion < 83; }
9999
bool hasCvtaParam() const { return SmVersion >= 70 && PTXVersion >= 77; }
100100
unsigned int getFullSmVersion() const { return FullSmVersion; }
101101
unsigned int getSmVersion() const { return getFullSmVersion() / 10; }

llvm/test/CodeGen/NVPTX/unreachable.ll

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
; RUN: llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs -trap-unreachable=false \
2-
; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOTRAP
2+
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOTRAP
33
; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -trap-unreachable=false \
4-
; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOTRAP
4+
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOTRAP
55
; 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
6+
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOTRAP
77
; 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
8+
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOTRAP
99
; 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
10+
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-TRAP
1111
; 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: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -mattr=+ptx75 \
14-
; RUN: | FileCheck %s --check-prefixes=CHECK-BUG-FIXED
12+
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-TRAP
13+
; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs -trap-unreachable -mattr=+ptx83 \
14+
; RUN: | FileCheck %s --check-prefix=CHECK-BUG-FIXED
1515
; RUN: %if ptxas && !ptxas-12.0 %{ llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs | %ptxas-verify %}
1616
; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_20 -verify-machineinstrs | %ptxas-verify %}
1717

@@ -26,21 +26,26 @@ define void @kernel_func() {
2626
call void @throw()
2727
; CHECK-TRAP-NOT: exit;
2828
; CHECK-TRAP: trap;
29+
2930
; CHECK-NOTRAP-NOT: trap;
3031
; CHECK: exit;
32+
3133
; CHECK-BUG-FIXED-NOT: exit;
34+
; CHECK-BUG-FIXED: trap;
3235
unreachable
3336
}
3437

3538
; CHECK-LABEL: kernel_func_2
3639
define void @kernel_func_2() {
3740
; CHECK: trap; exit;
38-
; CHECK-BUG-FIXED-NOT: exit;
41+
; CHECK-BUG-FIXED: trap;
42+
; CHECK-BUG-FIXED-NOT: trap; exit;
3943
call void @llvm.trap()
4044

4145
;; Make sure we avoid emitting two trap instructions.
4246
; CHECK-NOT: trap;
4347
; CHECK-NOT: exit;
48+
; CHECK-BUG-FIXED-NOT: trap;
4449
unreachable
4550
}
4651

0 commit comments

Comments
 (0)