; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 -mattr=+ptx50 | FileCheck %s --check-prefix=SM30 ; RUN: %if ptxas-sm_30 && ptxas-isa-5.0 %{ llc < %s -march=nvptx64 -mcpu=sm_30 -mattr=+ptx50 | %ptxas-verify -arch=sm_30 %} ; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx60 | FileCheck %s --check-prefix=SM70 ; RUN: %if ptxas-sm_70 && ptxas-isa-6.0 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx60 | %ptxas-verify -arch=sm_70 %} ; RUN: llc < %s -march=nvptx64 -mcpu=sm_90 -mattr=+ptx87 | FileCheck %s --check-prefix=SM90 ; RUN: %if ptxas-sm_90 && ptxas-isa-8.7 %{ llc < %s -march=nvptx64 -mcpu=sm_90 -mattr=+ptx87 | %ptxas-verify -arch=sm_90 %} ; NOTE: Please do not modify this file manually- instead modify fence.py define void @fence_acquire_thread() { ; SM30-LABEL: fence_acquire_thread( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acquire_thread( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acquire_thread( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: ret; fence syncscope("singlethread") acquire ret void } define void @fence_acquire_sys() { ; SM30-LABEL: fence_acquire_sys( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.sys; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acquire_sys( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.sys; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acquire_sys( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acquire.sys; ; SM90-NEXT: ret; fence syncscope("") acquire ret void } define void @fence_acquire_cta() { ; SM30-LABEL: fence_acquire_cta( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acquire_cta( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acquire_cta( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acquire.cta; ; SM90-NEXT: ret; fence syncscope("block") acquire ret void } define void @fence_acquire_cluster() { ; SM30-LABEL: fence_acquire_cluster( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acquire_cluster( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acquire_cluster( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acquire.cluster; ; SM90-NEXT: ret; fence syncscope("cluster") acquire ret void } define void @fence_acquire_gpu() { ; SM30-LABEL: fence_acquire_gpu( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.gl; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acquire_gpu( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.gpu; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acquire_gpu( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acquire.gpu; ; SM90-NEXT: ret; fence syncscope("device") acquire ret void } define void @fence_release_thread() { ; SM30-LABEL: fence_release_thread( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_release_thread( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_release_thread( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: ret; fence syncscope("singlethread") release ret void } define void @fence_release_sys() { ; SM30-LABEL: fence_release_sys( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.sys; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_release_sys( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.sys; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_release_sys( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.release.sys; ; SM90-NEXT: ret; fence syncscope("") release ret void } define void @fence_release_cta() { ; SM30-LABEL: fence_release_cta( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_release_cta( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_release_cta( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.release.cta; ; SM90-NEXT: ret; fence syncscope("block") release ret void } define void @fence_release_cluster() { ; SM30-LABEL: fence_release_cluster( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_release_cluster( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_release_cluster( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.release.cluster; ; SM90-NEXT: ret; fence syncscope("cluster") release ret void } define void @fence_release_gpu() { ; SM30-LABEL: fence_release_gpu( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.gl; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_release_gpu( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.gpu; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_release_gpu( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.release.gpu; ; SM90-NEXT: ret; fence syncscope("device") release ret void } define void @fence_acq_rel_thread() { ; SM30-LABEL: fence_acq_rel_thread( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acq_rel_thread( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acq_rel_thread( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: ret; fence syncscope("singlethread") acq_rel ret void } define void @fence_acq_rel_sys() { ; SM30-LABEL: fence_acq_rel_sys( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.sys; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acq_rel_sys( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.sys; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acq_rel_sys( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acq_rel.sys; ; SM90-NEXT: ret; fence syncscope("") acq_rel ret void } define void @fence_acq_rel_cta() { ; SM30-LABEL: fence_acq_rel_cta( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acq_rel_cta( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acq_rel_cta( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acq_rel.cta; ; SM90-NEXT: ret; fence syncscope("block") acq_rel ret void } define void @fence_acq_rel_cluster() { ; SM30-LABEL: fence_acq_rel_cluster( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acq_rel_cluster( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acq_rel_cluster( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acq_rel.cluster; ; SM90-NEXT: ret; fence syncscope("cluster") acq_rel ret void } define void @fence_acq_rel_gpu() { ; SM30-LABEL: fence_acq_rel_gpu( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.gl; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_acq_rel_gpu( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.acq_rel.gpu; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_acq_rel_gpu( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.acq_rel.gpu; ; SM90-NEXT: ret; fence syncscope("device") acq_rel ret void } define void @fence_seq_cst_thread() { ; SM30-LABEL: fence_seq_cst_thread( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_seq_cst_thread( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_seq_cst_thread( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: ret; fence syncscope("singlethread") seq_cst ret void } define void @fence_seq_cst_sys() { ; SM30-LABEL: fence_seq_cst_sys( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.sys; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_seq_cst_sys( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.sc.sys; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_seq_cst_sys( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.sc.sys; ; SM90-NEXT: ret; fence syncscope("") seq_cst ret void } define void @fence_seq_cst_cta() { ; SM30-LABEL: fence_seq_cst_cta( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_seq_cst_cta( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.sc.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_seq_cst_cta( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.sc.cta; ; SM90-NEXT: ret; fence syncscope("block") seq_cst ret void } define void @fence_seq_cst_cluster() { ; SM30-LABEL: fence_seq_cst_cluster( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.cta; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_seq_cst_cluster( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.sc.cta; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_seq_cst_cluster( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.sc.cluster; ; SM90-NEXT: ret; fence syncscope("cluster") seq_cst ret void } define void @fence_seq_cst_gpu() { ; SM30-LABEL: fence_seq_cst_gpu( ; SM30: { ; SM30-EMPTY: ; SM30-EMPTY: ; SM30-NEXT: // %bb.0: ; SM30-NEXT: membar.gl; ; SM30-NEXT: ret; ; ; SM70-LABEL: fence_seq_cst_gpu( ; SM70: { ; SM70-EMPTY: ; SM70-EMPTY: ; SM70-NEXT: // %bb.0: ; SM70-NEXT: fence.sc.gpu; ; SM70-NEXT: ret; ; ; SM90-LABEL: fence_seq_cst_gpu( ; SM90: { ; SM90-EMPTY: ; SM90-EMPTY: ; SM90-NEXT: // %bb.0: ; SM90-NEXT: fence.sc.gpu; ; SM90-NEXT: ret; fence syncscope("device") seq_cst ret void }