xref: /llvm-project/llvm/test/CodeGen/NVPTX/fence.ll (revision b279f6b098d3849f7f1c1f539b108307d5f8ae2d)
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_20 | FileCheck %s --check-prefix=SM60
2; RUN: %if ptxas %{ llc < %s -mtriple=nvptx64 -mcpu=sm_20 | %ptxas-verify %}
3; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_70 -mattr=+ptx60 | FileCheck %s --check-prefix=SM70
4; RUN: %if ptxas-12.2 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_70 -mattr=+ptx60 | %ptxas-verify -arch=sm_70 %}
5
6; TODO: implement and test thread scope.
7
8; CHECK-LABEL: fence_sc_sys
9define void @fence_sc_sys() local_unnamed_addr {
10  ; SM60: membar.sys
11  ; SM70: fence.sc.sys
12  fence seq_cst
13  ret void
14}
15
16; CHECK-LABEL: fence_acq_rel_sys
17define void @fence_acq_rel_sys() local_unnamed_addr {
18  ; SM60: membar.sys
19  ; SM70: fence.acq_rel.sys
20  fence acq_rel
21  ret void
22}
23
24; CHECK-LABEL: fence_release_sys
25define void @fence_release_sys() local_unnamed_addr {
26  ; SM60: membar.sys
27  ; SM70: fence.acq_rel.sys
28  fence release
29  ret void
30}
31
32; CHECK-LABEL: fence_acquire_sys
33define void @fence_acquire_sys() local_unnamed_addr {
34  ; SM60: membar.sys
35  ; SM70: fence.acq_rel.sys
36  fence acquire
37  ret void
38}
39
40; CHECK-LABEL: fence_sc_gpu
41define void @fence_sc_gpu() local_unnamed_addr {
42  ; SM60: membar.gl
43  ; SM70: fence.sc.gpu
44  fence syncscope("device") seq_cst
45  ret void
46}
47
48; CHECK-LABEL: fence_acq_rel_gpu
49define void @fence_acq_rel_gpu() local_unnamed_addr {
50  ; SM60: membar.gl
51  ; SM70: fence.acq_rel.gpu
52  fence syncscope("device") acq_rel
53  ret void
54}
55
56; CHECK-LABEL: fence_release_gpu
57define void @fence_release_gpu() local_unnamed_addr {
58  ; SM60: membar.gl
59  ; SM70: fence.acq_rel.gpu
60  fence syncscope("device") release
61  ret void
62}
63
64; CHECK-LABEL: fence_acquire_gpu
65define void @fence_acquire_gpu() local_unnamed_addr {
66  ; SM60: membar.gl
67  ; SM70: fence.acq_rel.gpu
68  fence syncscope("device") acquire
69  ret void
70}
71
72; CHECK-LABEL: fence_sc_cta
73define void @fence_sc_cta() local_unnamed_addr {
74  ; SM60: membar.cta
75  ; SM70: fence.sc.cta
76  fence syncscope("block") seq_cst
77  ret void
78}
79
80; CHECK-LABEL: fence_acq_rel_cta
81define void @fence_acq_rel_cta() local_unnamed_addr {
82  ; SM60: membar.cta
83  ; SM70: fence.acq_rel.cta
84  fence syncscope("block") acq_rel
85  ret void
86}
87
88; CHECK-LABEL: fence_release_cta
89define void @fence_release_cta() local_unnamed_addr {
90  ; SM60: membar.cta
91  ; SM70: fence.acq_rel.cta
92  fence syncscope("block") release
93  ret void
94}
95
96; CHECK-LABEL: fence_acquire_cta
97define void @fence_acquire_cta() local_unnamed_addr {
98  ; SM60: membar.cta
99  ; SM70: fence.acq_rel.cta
100  fence syncscope("block") acquire
101  ret void
102}