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}