blob: c5cebdf5946657024ee9e4c88644cc1d0b874dfc [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -nvptx-allow-ftz-atomics=false | FileCheck %s --check-prefixes=SM70,SM70-NOFTZ-DISALLOW
; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -nvptx-allow-ftz-atomics=true | FileCheck %s --check-prefixes=SM70,SM70-NOFTZ-ALLOW
; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 | FileCheck %s --check-prefixes=SM70,SM70-NOFTZ-ALLOW
; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -denormal-fp-math-f32=preserve-sign -nvptx-allow-ftz-atomics=false | FileCheck %s --check-prefixes=SM70,SM70-FTZ-DISALLOW
; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -denormal-fp-math-f32=preserve-sign -nvptx-allow-ftz-atomics=true | FileCheck %s --check-prefixes=SM70,SM70-FTZ-ALLOW
; RUN: llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -denormal-fp-math-f32=preserve-sign | FileCheck %s --check-prefixes=SM70,SM70-FTZ-ALLOW
; RUN: %if ptxas-sm_70 && ptxas-isa-6.3 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -nvptx-allow-ftz-atomics=false | %ptxas-verify -arch=sm_70 %}
; RUN: %if ptxas-sm_70 && ptxas-isa-6.3 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -nvptx-allow-ftz-atomics=true | %ptxas-verify -arch=sm_70 %}
; RUN: %if ptxas-sm_70 && ptxas-isa-6.3 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 | %ptxas-verify -arch=sm_70 %}
; RUN: %if ptxas-sm_70 && ptxas-isa-6.3 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -denormal-fp-math-f32=preserve-sign -nvptx-allow-ftz-atomics=false | %ptxas-verify -arch=sm_70 %}
; RUN: %if ptxas-sm_70 && ptxas-isa-6.3 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -denormal-fp-math-f32=preserve-sign -nvptx-allow-ftz-atomics=true | %ptxas-verify -arch=sm_70 %}
; RUN: %if ptxas-sm_70 && ptxas-isa-6.3 %{ llc < %s -march=nvptx64 -mcpu=sm_70 -mattr=+ptx63 -denormal-fp-math-f32=preserve-sign | %ptxas-verify -arch=sm_70 %}
define <1 x i8> @xchg_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: xchg_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r5, [xchg_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r8, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r8;
; SM70-NEXT: shl.b32 %r3, %r5, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NEXT: $L__BB0_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r12, %r2;
; SM70-NEXT: or.b32 %r10, %r9, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r4, [%rd1], %r12, %r10;
; SM70-NEXT: setp.ne.b32 %p1, %r4, %r12;
; SM70-NEXT: mov.b32 %r12, %r4;
; SM70-NEXT: @%p1 bra $L__BB0_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r11, %r4, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r11;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @xchg_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: xchg_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: ld.param.b16 %r5, [xchg_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r8, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r8;
; SM70-NEXT: shl.b32 %r3, %r5, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NEXT: $L__BB1_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r12, %r2;
; SM70-NEXT: or.b32 %r10, %r9, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r4, [%rd1], %r12, %r10;
; SM70-NEXT: setp.ne.b32 %p1, %r4, %r12;
; SM70-NEXT: mov.b32 %r12, %r4;
; SM70-NEXT: @%p1 bra $L__BB1_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r11, %r4, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r11;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @xchg_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: xchg_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: ld.param.b32 %r1, [xchg_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: atom.acq_rel.cta.global.exch.b32 %r2, [%rd1], %r1;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @xchg_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: xchg_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: atom.acq_rel.cta.global.exch.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @xchg_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: xchg_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r5, [xchg_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r8, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r8;
; SM70-NEXT: shl.b32 %r3, %r5, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NEXT: $L__BB4_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r12, %r2;
; SM70-NEXT: or.b32 %r10, %r9, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r4, [%rd1], %r12, %r10;
; SM70-NEXT: setp.ne.b32 %p1, %r4, %r12;
; SM70-NEXT: mov.b32 %r12, %r4;
; SM70-NEXT: @%p1 bra $L__BB4_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r11, %r4, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r11;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @xchg_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: xchg_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: ld.param.b32 %r1, [xchg_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: atom.acq_rel.cta.global.exch.b32 %r2, [%rd1], %r1;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @xchg_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: xchg_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: atom.acq_rel.cta.global.exch.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @xchg_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: xchg_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [xchg_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: cvt.u64.u32 %rd2, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r2;
; SM70-NEXT: shl.b64 %rd4, %rd3, 32;
; SM70-NEXT: or.b64 %rd5, %rd2, %rd4;
; SM70-NEXT: cvt.u64.u32 %rd6, %r3;
; SM70-NEXT: cvt.u64.u32 %rd7, %r4;
; SM70-NEXT: shl.b64 %rd8, %rd7, 32;
; SM70-NEXT: or.b64 %rd9, %rd6, %rd8;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd10, [%rd1], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @xchg_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: xchg_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [xchg_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.exch.b32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @xchg_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: xchg_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.acq_rel.cta.global.exch.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @xchg_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: xchg_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [xchg_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: cvt.u64.u32 %rd2, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r2;
; SM70-NEXT: shl.b64 %rd4, %rd3, 32;
; SM70-NEXT: or.b64 %rd5, %rd2, %rd4;
; SM70-NEXT: cvt.u64.u32 %rd6, %r3;
; SM70-NEXT: cvt.u64.u32 %rd7, %r4;
; SM70-NEXT: shl.b64 %rd8, %rd7, 32;
; SM70-NEXT: or.b64 %rd9, %rd6, %rd8;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd10, [%rd1], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @xchg_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: xchg_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [xchg_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [xchg_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: cvt.u64.u32 %rd2, %r5;
; SM70-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NEXT: shl.b64 %rd4, %rd3, 32;
; SM70-NEXT: or.b64 %rd5, %rd2, %rd4;
; SM70-NEXT: cvt.u64.u32 %rd6, %r7;
; SM70-NEXT: cvt.u64.u32 %rd7, %r8;
; SM70-NEXT: shl.b64 %rd8, %rd7, 32;
; SM70-NEXT: or.b64 %rd9, %rd6, %rd8;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd10, [%rd1], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: cvt.u64.u32 %rd12, %r1;
; SM70-NEXT: cvt.u64.u32 %rd13, %r2;
; SM70-NEXT: shl.b64 %rd14, %rd13, 32;
; SM70-NEXT: or.b64 %rd15, %rd12, %rd14;
; SM70-NEXT: cvt.u64.u32 %rd16, %r3;
; SM70-NEXT: cvt.u64.u32 %rd17, %r4;
; SM70-NEXT: shl.b64 %rd18, %rd17, 32;
; SM70-NEXT: or.b64 %rd19, %rd16, %rd18;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd20, [%rd1+16], %rd15;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd21, [%rd1+24], %rd19;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd20, %rd21};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @xchg_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: xchg_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [xchg_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @xchg_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: xchg_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [xchg_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @xchg_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: xchg_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [xchg_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [xchg_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @xchg_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: xchg_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xchg_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [xchg_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [xchg_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [xchg_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [xchg_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.exch.b64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xchg ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @add_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: add_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [add_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r6, [add_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB16_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB16_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @add_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: add_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<12>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [add_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [add_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: $L__BB17_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: add.s16 %rs7, %rs4, %rs6;
; SM70-NEXT: add.s16 %rs8, %rs3, %rs5;
; SM70-NEXT: and.b16 %rs9, %rs8, 255;
; SM70-NEXT: shl.b16 %rs10, %rs7, 8;
; SM70-NEXT: or.b16 %rs11, %rs9, %rs10;
; SM70-NEXT: cvt.u32.u16 %r9, %rs11;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB17_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @add_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: add_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [add_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r6, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: $L__BB18_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r7, %r18, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r11, %r18, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r14, %r18, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p1 bra $L__BB18_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @add_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: add_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB19_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r4, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r6, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r10, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r11, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: prmt.b32 %r18, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r18;
; SM70-NEXT: prmt.b32 %r19, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r19;
; SM70-NEXT: add.s16 %rs15, %rs14, %rs13;
; SM70-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r21;
; SM70-NEXT: prmt.b32 %r22, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs17, %r22;
; SM70-NEXT: add.s16 %rs18, %rs17, %rs16;
; SM70-NEXT: cvt.u32.u16 %r23, %rs18;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs19, %r25;
; SM70-NEXT: prmt.b32 %r26, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs20, %r26;
; SM70-NEXT: add.s16 %rs21, %rs20, %rs19;
; SM70-NEXT: cvt.u32.u16 %r27, %rs21;
; SM70-NEXT: prmt.b32 %r28, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs22, %r28;
; SM70-NEXT: prmt.b32 %r29, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs23, %r29;
; SM70-NEXT: add.s16 %rs24, %rs23, %rs22;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r27, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r24, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd4, %r32;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p1 bra $L__BB19_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @add_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: add_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [add_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r6, [add_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB20_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB20_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @add_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: add_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [add_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB21_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: add.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: add.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB21_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @add_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: add_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB22_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NEXT: add.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: add.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r6;
; SM70-NEXT: add.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: add.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r4, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB22_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @add_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: add_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB23_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NEXT: add.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: add.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r10;
; SM70-NEXT: add.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: add.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r6, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB23_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NEXT: $L__BB23_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs15, %rs16}, %r11;
; SM70-NEXT: add.s16 %rs17, %rs16, %rs14;
; SM70-NEXT: add.s16 %rs18, %rs15, %rs13;
; SM70-NEXT: mov.b32 %r7, {%rs18, %rs17};
; SM70-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: add.s16 %rs23, %rs22, %rs20;
; SM70-NEXT: add.s16 %rs24, %rs21, %rs19;
; SM70-NEXT: mov.b32 %r8, {%rs24, %rs23};
; SM70-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB23_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @add_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: add_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [add_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @add_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: add_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @add_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: add_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @add_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: add_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [add_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @add_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: add_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [add_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @add_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: add_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [add_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @add_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: add_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [add_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [add_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @add_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: add_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [add_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [add_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [add_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [add_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @sub_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: sub_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [sub_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r6, [sub_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB32_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: sub.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB32_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @sub_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: sub_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<12>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [sub_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [sub_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: $L__BB33_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: sub.s16 %rs7, %rs4, %rs6;
; SM70-NEXT: sub.s16 %rs8, %rs3, %rs5;
; SM70-NEXT: and.b16 %rs9, %rs8, 255;
; SM70-NEXT: shl.b16 %rs10, %rs7, 8;
; SM70-NEXT: or.b16 %rs11, %rs9, %rs10;
; SM70-NEXT: cvt.u32.u16 %r9, %rs11;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB33_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @sub_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: sub_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [sub_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r6, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: $L__BB34_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: sub.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r7, %r18, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: sub.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r11, %r18, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: sub.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r14, %r18, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: sub.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p1 bra $L__BB34_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @sub_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: sub_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [sub_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB35_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r4, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: sub.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r6, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: sub.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r10, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r11, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: sub.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: sub.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: prmt.b32 %r18, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r18;
; SM70-NEXT: prmt.b32 %r19, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r19;
; SM70-NEXT: sub.s16 %rs15, %rs14, %rs13;
; SM70-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r21;
; SM70-NEXT: prmt.b32 %r22, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs17, %r22;
; SM70-NEXT: sub.s16 %rs18, %rs17, %rs16;
; SM70-NEXT: cvt.u32.u16 %r23, %rs18;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs19, %r25;
; SM70-NEXT: prmt.b32 %r26, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs20, %r26;
; SM70-NEXT: sub.s16 %rs21, %rs20, %rs19;
; SM70-NEXT: cvt.u32.u16 %r27, %rs21;
; SM70-NEXT: prmt.b32 %r28, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs22, %r28;
; SM70-NEXT: prmt.b32 %r29, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs23, %r29;
; SM70-NEXT: sub.s16 %rs24, %rs23, %rs22;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r27, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r24, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd4, %r32;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p1 bra $L__BB35_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @sub_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: sub_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [sub_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r6, [sub_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB36_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: sub.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB36_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @sub_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: sub_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [sub_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB37_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB37_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @sub_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: sub_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [sub_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB38_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r6;
; SM70-NEXT: sub.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: sub.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r4, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB38_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @sub_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: sub_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [sub_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB39_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r10;
; SM70-NEXT: sub.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: sub.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r6, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB39_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NEXT: $L__BB39_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs15, %rs16}, %r11;
; SM70-NEXT: sub.s16 %rs17, %rs16, %rs14;
; SM70-NEXT: sub.s16 %rs18, %rs15, %rs13;
; SM70-NEXT: mov.b32 %r7, {%rs18, %rs17};
; SM70-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: sub.s16 %rs23, %rs22, %rs20;
; SM70-NEXT: sub.s16 %rs24, %rs21, %rs19;
; SM70-NEXT: mov.b32 %r8, {%rs24, %rs23};
; SM70-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB39_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @sub_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: sub_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<4>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [sub_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: neg.s32 %r2, %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r3, [%rd1], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @sub_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: sub_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [sub_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: neg.s32 %r3, %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r4, [%rd1], %r3;
; SM70-NEXT: neg.s32 %r5, %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r6, [%rd1+4], %r5;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r4, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @sub_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: sub_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [sub_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: neg.s32 %r5, %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r6, [%rd1], %r5;
; SM70-NEXT: neg.s32 %r7, %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r8, [%rd1+4], %r7;
; SM70-NEXT: neg.s32 %r9, %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r10, [%rd1+8], %r9;
; SM70-NEXT: neg.s32 %r11, %r4;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r12, [%rd1+12], %r11;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r6, %r8, %r10, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @sub_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: sub_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<25>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [sub_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [sub_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: neg.s32 %r9, %r5;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r10, [%rd1], %r9;
; SM70-NEXT: neg.s32 %r11, %r6;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r12, [%rd1+4], %r11;
; SM70-NEXT: neg.s32 %r13, %r7;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r14, [%rd1+8], %r13;
; SM70-NEXT: neg.s32 %r15, %r8;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r16, [%rd1+12], %r15;
; SM70-NEXT: neg.s32 %r17, %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r18, [%rd1+16], %r17;
; SM70-NEXT: neg.s32 %r19, %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r20, [%rd1+20], %r19;
; SM70-NEXT: neg.s32 %r21, %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r22, [%rd1+24], %r21;
; SM70-NEXT: neg.s32 %r23, %r4;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r24, [%rd1+28], %r23;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r18, %r20, %r22, %r24};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r10, %r12, %r14, %r16};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @sub_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: sub_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<5>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [sub_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: neg.s64 %rd3, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd4, [%rd1], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd4;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @sub_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: sub_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<8>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [sub_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: neg.s64 %rd4, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd5, [%rd1], %rd4;
; SM70-NEXT: neg.s64 %rd6, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd7, [%rd1+8], %rd6;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd5, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @sub_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: sub_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<14>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [sub_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [sub_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: neg.s64 %rd6, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd7, [%rd1], %rd6;
; SM70-NEXT: neg.s64 %rd8, %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd9, [%rd1+8], %rd8;
; SM70-NEXT: neg.s64 %rd10, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd11, [%rd1+16], %rd10;
; SM70-NEXT: neg.s64 %rd12, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd13, [%rd1+24], %rd12;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd11, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd7, %rd9};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @sub_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: sub_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<26>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [sub_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [sub_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [sub_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [sub_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [sub_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: neg.s64 %rd10, %rd8;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd11, [%rd1], %rd10;
; SM70-NEXT: neg.s64 %rd12, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd13, [%rd1+8], %rd12;
; SM70-NEXT: neg.s64 %rd14, %rd6;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd15, [%rd1+16], %rd14;
; SM70-NEXT: neg.s64 %rd16, %rd7;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd17, [%rd1+24], %rd16;
; SM70-NEXT: neg.s64 %rd18, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd19, [%rd1+32], %rd18;
; SM70-NEXT: neg.s64 %rd20, %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd21, [%rd1+40], %rd20;
; SM70-NEXT: neg.s64 %rd22, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd23, [%rd1+48], %rd22;
; SM70-NEXT: neg.s64 %rd24, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.add.u64 %rd25, [%rd1+56], %rd24;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd23, %rd25};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd19, %rd21};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd15, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd11, %rd13};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise sub ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @and_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: and_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<11>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r1, [and_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r2, %rd1;
; SM70-NEXT: and.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, %r3, 3;
; SM70-NEXT: shl.b32 %r5, 255, %r4;
; SM70-NEXT: not.b32 %r6, %r5;
; SM70-NEXT: shl.b32 %r7, %r1, %r4;
; SM70-NEXT: or.b32 %r8, %r7, %r6;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r9, [%rd2], %r8;
; SM70-NEXT: shr.u32 %r10, %r9, %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r10;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @and_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: and_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<11>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r1, %rd1;
; SM70-NEXT: and.b32 %r2, %r1, 3;
; SM70-NEXT: shl.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, 65535, %r3;
; SM70-NEXT: not.b32 %r5, %r4;
; SM70-NEXT: ld.param.b16 %r6, [and_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r7, %r6, %r3;
; SM70-NEXT: or.b32 %r8, %r7, %r5;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r9, [%rd2], %r8;
; SM70-NEXT: shr.u32 %r10, %r9, %r3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r10;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @and_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: and_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [and_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: $L__BB50_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r4, %r2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB50_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @and_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: and_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [and_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB51_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: and.b32 %r4, %r6, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB51_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @and_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: and_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<11>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r1, [and_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r2, %rd1;
; SM70-NEXT: and.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, %r3, 3;
; SM70-NEXT: shl.b32 %r5, 65535, %r4;
; SM70-NEXT: not.b32 %r6, %r5;
; SM70-NEXT: shl.b32 %r7, %r1, %r4;
; SM70-NEXT: or.b32 %r8, %r7, %r6;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r9, [%rd2], %r8;
; SM70-NEXT: shr.u32 %r10, %r9, %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r10;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @and_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: and_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [and_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: $L__BB53_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r4, %r2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB53_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @and_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: and_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [and_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB54_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: and.b32 %r4, %r6, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB54_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @and_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: and_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [and_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB55_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r5, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: and.b32 %r6, %r10, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB55_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: $L__BB55_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r7, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NEXT: and.b32 %r8, %r12, %r4;
; SM70-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB55_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @and_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: and_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [and_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @and_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: and_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [and_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @and_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: and_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [and_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @and_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: and_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [and_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [and_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.and.b32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @and_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: and_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [and_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @and_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: and_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [and_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @and_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: and_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [and_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [and_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @and_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: and_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [and_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [and_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [and_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [and_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [and_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.and.b64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise and ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @nand_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: nand_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r6, [nand_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB64_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB64_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @nand_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: nand_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: ld.param.b16 %r8, [nand_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r4, %r8, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB65_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB65_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @nand_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: nand_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [nand_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB66_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r2;
; SM70-NEXT: xor.b32 %r4, %r3, -1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r5;
; SM70-NEXT: mov.b32 %r5, %r1;
; SM70-NEXT: @%p1 bra $L__BB66_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @nand_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: nand_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB67_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r7;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r8, %r2;
; SM70-NEXT: and.b32 %r4, %r7, %r1;
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: xor.b32 %r6, %r3, -1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p1 bra $L__BB67_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @nand_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: nand_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r6, [nand_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB68_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB68_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @nand_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: nand_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [nand_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB69_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r2;
; SM70-NEXT: xor.b32 %r4, %r3, -1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r5;
; SM70-NEXT: mov.b32 %r5, %r1;
; SM70-NEXT: @%p1 bra $L__BB69_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @nand_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: nand_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB70_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r7;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r8, %r2;
; SM70-NEXT: and.b32 %r4, %r7, %r1;
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: xor.b32 %r6, %r3, -1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p1 bra $L__BB70_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @nand_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: nand_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r14}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r13, %rd2;
; SM70-NEXT: $L__BB71_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-NEXT: cvt.u64.u32 %rd4, %r14;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r5, %r14, %r2;
; SM70-NEXT: and.b32 %r6, %r13, %r1;
; SM70-NEXT: xor.b32 %r7, %r6, -1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r7;
; SM70-NEXT: xor.b32 %r8, %r5, -1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r8;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r14}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r13, %rd11;
; SM70-NEXT: @%p1 bra $L__BB71_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r16}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r15, %rd12;
; SM70-NEXT: $L__BB71_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r15;
; SM70-NEXT: cvt.u64.u32 %rd14, %r16;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: and.b32 %r9, %r16, %r4;
; SM70-NEXT: and.b32 %r10, %r15, %r3;
; SM70-NEXT: xor.b32 %r11, %r10, -1;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: xor.b32 %r12, %r9, -1;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r16}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r15, %rd21;
; SM70-NEXT: @%p2 bra $L__BB71_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r13, %r14, %r15, %r16};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @nand_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: nand_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [nand_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB72_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r1;
; SM70-NEXT: not.b32 %r4, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r2, %r5;
; SM70-NEXT: mov.b32 %r5, %r2;
; SM70-NEXT: @%p1 bra $L__BB72_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @nand_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: nand_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<13>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB73_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r6, %r2;
; SM70-NEXT: and.b32 %r4, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r4;
; SM70-NEXT: cvt.u64.u32 %rd8, %r3;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd12;
; SM70-NEXT: @%p1 bra $L__BB73_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @nand_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: nand_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<24>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB74_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r5, %r10, %r2;
; SM70-NEXT: and.b32 %r6, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r6;
; SM70-NEXT: cvt.u64.u32 %rd8, %r5;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd12;
; SM70-NEXT: @%p1 bra $L__BB74_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd13;
; SM70-NEXT: $L__BB74_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r11;
; SM70-NEXT: cvt.u64.u32 %rd15, %r12;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r7, %r12, %r4;
; SM70-NEXT: and.b32 %r8, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: cvt.u64.u32 %rd19, %r7;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd23;
; SM70-NEXT: @%p2 bra $L__BB74_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @nand_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: nand_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b32 %r<25>;
; SM70-NEXT: .reg .b64 %rd<46>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [nand_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NEXT: $L__BB75_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r9, %r18, %r6;
; SM70-NEXT: and.b32 %r10, %r17, %r5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r10;
; SM70-NEXT: cvt.u64.u32 %rd8, %r9;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd12;
; SM70-NEXT: @%p1 bra $L__BB75_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd13;
; SM70-NEXT: $L__BB75_3: // %atomicrmw.start6
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r19;
; SM70-NEXT: cvt.u64.u32 %rd15, %r20;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r11, %r20, %r8;
; SM70-NEXT: and.b32 %r12, %r19, %r7;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: cvt.u64.u32 %rd19, %r11;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd23;
; SM70-NEXT: @%p2 bra $L__BB75_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd24, [%rd1+16];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd24; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd24;
; SM70-NEXT: $L__BB75_5: // %atomicrmw.start16
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd25, %r21;
; SM70-NEXT: cvt.u64.u32 %rd26, %r22;
; SM70-NEXT: shl.b64 %rd27, %rd26, 32;
; SM70-NEXT: or.b64 %rd28, %rd25, %rd27;
; SM70-NEXT: and.b32 %r13, %r22, %r2;
; SM70-NEXT: and.b32 %r14, %r21, %r1;
; SM70-NEXT: cvt.u64.u32 %rd29, %r14;
; SM70-NEXT: cvt.u64.u32 %rd30, %r13;
; SM70-NEXT: shl.b64 %rd31, %rd30, 32;
; SM70-NEXT: or.b64 %rd32, %rd29, %rd31;
; SM70-NEXT: not.b64 %rd33, %rd32;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd1+16], %rd28, %rd33;
; SM70-NEXT: setp.ne.b64 %p3, %rd34, %rd28;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd34; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd34;
; SM70-NEXT: @%p3 bra $L__BB75_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd1+24];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd35; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd35;
; SM70-NEXT: $L__BB75_7: // %atomicrmw.start22
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd36, %r23;
; SM70-NEXT: cvt.u64.u32 %rd37, %r24;
; SM70-NEXT: shl.b64 %rd38, %rd37, 32;
; SM70-NEXT: or.b64 %rd39, %rd36, %rd38;
; SM70-NEXT: and.b32 %r15, %r24, %r4;
; SM70-NEXT: and.b32 %r16, %r23, %r3;
; SM70-NEXT: cvt.u64.u32 %rd40, %r16;
; SM70-NEXT: cvt.u64.u32 %rd41, %r15;
; SM70-NEXT: shl.b64 %rd42, %rd41, 32;
; SM70-NEXT: or.b64 %rd43, %rd40, %rd42;
; SM70-NEXT: not.b64 %rd44, %rd43;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd45, [%rd1+24], %rd39, %rd44;
; SM70-NEXT: setp.ne.b64 %p4, %rd45, %rd39;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd45; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd45;
; SM70-NEXT: @%p4 bra $L__BB75_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @nand_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: nand_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b64 %rd<7>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [nand_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [nand_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd6, [%rd3];
; SM70-NEXT: $L__BB76_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b64 %rd4, %rd6, %rd1;
; SM70-NEXT: not.b64 %rd5, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd6, %rd5;
; SM70-NEXT: setp.ne.b64 %p1, %rd2, %rd6;
; SM70-NEXT: mov.b64 %rd6, %rd2;
; SM70-NEXT: @%p1 bra $L__BB76_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @nand_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: nand_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [nand_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [nand_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd10, [%rd5];
; SM70-NEXT: $L__BB77_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd10;
; SM70-NEXT: and.b64 %rd6, %rd3, %rd2;
; SM70-NEXT: not.b64 %rd7, %rd6;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd10, [%rd5], %rd3, %rd7;
; SM70-NEXT: setp.ne.b64 %p1, %rd10, %rd3;
; SM70-NEXT: @%p1 bra $L__BB77_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd11, [%rd5+8];
; SM70-NEXT: $L__BB77_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b64 %rd8, %rd11, %rd1;
; SM70-NEXT: not.b64 %rd9, %rd8;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd11, %rd9;
; SM70-NEXT: setp.ne.b64 %p2, %rd4, %rd11;
; SM70-NEXT: mov.b64 %rd11, %rd4;
; SM70-NEXT: @%p2 bra $L__BB77_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @nand_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: nand_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [nand_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [nand_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [nand_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd18, [%rd9];
; SM70-NEXT: $L__BB78_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd18;
; SM70-NEXT: and.b64 %rd10, %rd4, %rd3;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd18, [%rd9], %rd4, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd18, %rd4;
; SM70-NEXT: @%p1 bra $L__BB78_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd19, [%rd9+8];
; SM70-NEXT: $L__BB78_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd19;
; SM70-NEXT: and.b64 %rd12, %rd5, %rd2;
; SM70-NEXT: not.b64 %rd13, %rd12;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd19, [%rd9+8], %rd5, %rd13;
; SM70-NEXT: setp.ne.b64 %p2, %rd19, %rd5;
; SM70-NEXT: @%p2 bra $L__BB78_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd20, [%rd9+16];
; SM70-NEXT: $L__BB78_5: // %atomicrmw.start20
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd20;
; SM70-NEXT: and.b64 %rd14, %rd7, %rd1;
; SM70-NEXT: not.b64 %rd15, %rd14;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd20, [%rd9+16], %rd7, %rd15;
; SM70-NEXT: setp.ne.b64 %p3, %rd20, %rd7;
; SM70-NEXT: @%p3 bra $L__BB78_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end19
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd21, [%rd9+24];
; SM70-NEXT: $L__BB78_7: // %atomicrmw.start28
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b64 %rd16, %rd21, %rd6;
; SM70-NEXT: not.b64 %rd17, %rd16;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd21, %rd17;
; SM70-NEXT: setp.ne.b64 %p4, %rd8, %rd21;
; SM70-NEXT: mov.b64 %rd21, %rd8;
; SM70-NEXT: @%p4 bra $L__BB78_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end27
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd20, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd18, %rd19};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @nand_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: nand_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<42>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [nand_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [nand_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [nand_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [nand_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [nand_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd34, [%rd17];
; SM70-NEXT: $L__BB79_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd34;
; SM70-NEXT: and.b64 %rd18, %rd5, %rd4;
; SM70-NEXT: not.b64 %rd19, %rd18;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd17], %rd5, %rd19;
; SM70-NEXT: setp.ne.b64 %p1, %rd34, %rd5;
; SM70-NEXT: @%p1 bra $L__BB79_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd17+8];
; SM70-NEXT: $L__BB79_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd35;
; SM70-NEXT: and.b64 %rd20, %rd6, %rd3;
; SM70-NEXT: not.b64 %rd21, %rd20;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd35, [%rd17+8], %rd6, %rd21;
; SM70-NEXT: setp.ne.b64 %p2, %rd35, %rd6;
; SM70-NEXT: @%p2 bra $L__BB79_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd36, [%rd17+16];
; SM70-NEXT: $L__BB79_5: // %atomicrmw.start24
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd36;
; SM70-NEXT: and.b64 %rd22, %rd8, %rd2;
; SM70-NEXT: not.b64 %rd23, %rd22;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd36, [%rd17+16], %rd8, %rd23;
; SM70-NEXT: setp.ne.b64 %p3, %rd36, %rd8;
; SM70-NEXT: @%p3 bra $L__BB79_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end23
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd37, [%rd17+24];
; SM70-NEXT: $L__BB79_7: // %atomicrmw.start32
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd37;
; SM70-NEXT: and.b64 %rd24, %rd9, %rd7;
; SM70-NEXT: not.b64 %rd25, %rd24;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd37, [%rd17+24], %rd9, %rd25;
; SM70-NEXT: setp.ne.b64 %p4, %rd37, %rd9;
; SM70-NEXT: @%p4 bra $L__BB79_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end31
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd38, [%rd17+32];
; SM70-NEXT: $L__BB79_9: // %atomicrmw.start48
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd38;
; SM70-NEXT: and.b64 %rd26, %rd12, %rd1;
; SM70-NEXT: not.b64 %rd27, %rd26;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd38, [%rd17+32], %rd12, %rd27;
; SM70-NEXT: setp.ne.b64 %p5, %rd38, %rd12;
; SM70-NEXT: @%p5 bra $L__BB79_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end47
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd39, [%rd17+40];
; SM70-NEXT: $L__BB79_11: // %atomicrmw.start56
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd39;
; SM70-NEXT: and.b64 %rd28, %rd13, %rd11;
; SM70-NEXT: not.b64 %rd29, %rd28;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd39, [%rd17+40], %rd13, %rd29;
; SM70-NEXT: setp.ne.b64 %p6, %rd39, %rd13;
; SM70-NEXT: @%p6 bra $L__BB79_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end55
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd40, [%rd17+48];
; SM70-NEXT: $L__BB79_13: // %atomicrmw.start68
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd40;
; SM70-NEXT: and.b64 %rd30, %rd15, %rd10;
; SM70-NEXT: not.b64 %rd31, %rd30;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd40, [%rd17+48], %rd15, %rd31;
; SM70-NEXT: setp.ne.b64 %p7, %rd40, %rd15;
; SM70-NEXT: @%p7 bra $L__BB79_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end67
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd41, [%rd17+56];
; SM70-NEXT: $L__BB79_15: // %atomicrmw.start76
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b64 %rd32, %rd41, %rd14;
; SM70-NEXT: not.b64 %rd33, %rd32;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd41, %rd33;
; SM70-NEXT: setp.ne.b64 %p8, %rd16, %rd41;
; SM70-NEXT: mov.b64 %rd41, %rd16;
; SM70-NEXT: @%p8 bra $L__BB79_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end75
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd40, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd38, %rd39};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd34, %rd35};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd36, %rd37};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @or_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: or_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r1, [or_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r2, %rd1;
; SM70-NEXT: and.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, %r3, 3;
; SM70-NEXT: shl.b32 %r5, %r1, %r4;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r6, [%rd2], %r5;
; SM70-NEXT: shr.u32 %r7, %r6, %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r7;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @or_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: or_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r1, %rd1;
; SM70-NEXT: and.b32 %r2, %r1, 3;
; SM70-NEXT: shl.b32 %r3, %r2, 3;
; SM70-NEXT: ld.param.b16 %r4, [or_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r5, %r4, %r3;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r6, [%rd2], %r5;
; SM70-NEXT: shr.u32 %r7, %r6, %r3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r7;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @or_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: or_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [or_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: $L__BB82_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: or.b32 %r3, %r4, %r2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB82_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @or_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: or_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [or_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB83_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: or.b32 %r3, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: or.b32 %r4, %r6, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB83_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @or_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: or_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r1, [or_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r2, %rd1;
; SM70-NEXT: and.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, %r3, 3;
; SM70-NEXT: shl.b32 %r5, %r1, %r4;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r6, [%rd2], %r5;
; SM70-NEXT: shr.u32 %r7, %r6, %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r7;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @or_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: or_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [or_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: $L__BB85_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: or.b32 %r3, %r4, %r2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB85_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @or_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: or_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [or_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB86_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: or.b32 %r3, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: or.b32 %r4, %r6, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB86_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @or_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: or_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [or_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB87_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: or.b32 %r5, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: or.b32 %r6, %r10, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB87_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: $L__BB87_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: or.b32 %r7, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NEXT: or.b32 %r8, %r12, %r4;
; SM70-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB87_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @or_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: or_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [or_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @or_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: or_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [or_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @or_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: or_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [or_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @or_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: or_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [or_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [or_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.or.b32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @or_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: or_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [or_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @or_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: or_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [or_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @or_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: or_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [or_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [or_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @or_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: or_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [or_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [or_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [or_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [or_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [or_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.or.b64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise or ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @xor_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: xor_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r1, [xor_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r2, %rd1;
; SM70-NEXT: and.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, %r3, 3;
; SM70-NEXT: shl.b32 %r5, %r1, %r4;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r6, [%rd2], %r5;
; SM70-NEXT: shr.u32 %r7, %r6, %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r7;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @xor_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: xor_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r1, %rd1;
; SM70-NEXT: and.b32 %r2, %r1, 3;
; SM70-NEXT: shl.b32 %r3, %r2, 3;
; SM70-NEXT: ld.param.b16 %r4, [xor_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r5, %r4, %r3;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r6, [%rd2], %r5;
; SM70-NEXT: shr.u32 %r7, %r6, %r3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r7;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @xor_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: xor_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [xor_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: $L__BB98_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: xor.b32 %r3, %r4, %r2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB98_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @xor_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: xor_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [xor_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB99_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: xor.b32 %r3, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: xor.b32 %r4, %r6, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB99_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @xor_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: xor_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %r1, [xor_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd2, %rd1, -4;
; SM70-NEXT: cvt.u32.u64 %r2, %rd1;
; SM70-NEXT: and.b32 %r3, %r2, 3;
; SM70-NEXT: shl.b32 %r4, %r3, 3;
; SM70-NEXT: shl.b32 %r5, %r1, %r4;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r6, [%rd2], %r5;
; SM70-NEXT: shr.u32 %r7, %r6, %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r7;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @xor_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: xor_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [xor_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: $L__BB101_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: xor.b32 %r3, %r4, %r2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB101_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @xor_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: xor_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [xor_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB102_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: xor.b32 %r3, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NEXT: xor.b32 %r4, %r6, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB102_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @xor_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: xor_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [xor_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB103_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: xor.b32 %r5, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: xor.b32 %r6, %r10, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB103_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: $L__BB103_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: xor.b32 %r7, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NEXT: xor.b32 %r8, %r12, %r4;
; SM70-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB103_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @xor_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: xor_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [xor_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @xor_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: xor_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [xor_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @xor_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: xor_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [xor_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @xor_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: xor_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [xor_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [xor_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.xor.b32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @xor_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: xor_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [xor_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @xor_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: xor_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [xor_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @xor_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: xor_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [xor_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [xor_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @xor_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: xor_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [xor_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [xor_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [xor_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [xor_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [xor_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.xor.b64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise xor ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @max_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: max_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<4>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [max_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.s8 %rs1, [max_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB112_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r14, %r1;
; SM70-NEXT: cvt.s8.s32 %rs2, %r7;
; SM70-NEXT: max.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs3;
; SM70-NEXT: and.b32 %r9, %r8, 255;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB112_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @max_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: max_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<14>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [max_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [max_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: cvt.s16.s8 %rs7, %rs5;
; SM70-NEXT: cvt.s16.s8 %rs8, %rs6;
; SM70-NEXT: $L__BB113_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r15, %r1;
; SM70-NEXT: cvt.s8.s32 %rs3, %r8;
; SM70-NEXT: bfe.s32 %r9, %r8, 8, 8;
; SM70-NEXT: cvt.s8.s32 %rs4, %r9;
; SM70-NEXT: max.s16 %rs9, %rs4, %rs8;
; SM70-NEXT: max.s16 %rs10, %rs3, %rs7;
; SM70-NEXT: and.b16 %rs11, %rs10, 255;
; SM70-NEXT: shl.b16 %rs12, %rs9, 8;
; SM70-NEXT: or.b16 %rs13, %rs11, %rs12;
; SM70-NEXT: cvt.u32.u16 %r10, %rs13;
; SM70-NEXT: shl.b32 %r11, %r10, %r1;
; SM70-NEXT: and.b32 %r12, %r15, %r2;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r15;
; SM70-NEXT: mov.b32 %r15, %r3;
; SM70-NEXT: @%p1 bra $L__BB113_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @max_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: max_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b32 %r<27>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [max_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x8880U;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x9991U;
; SM70-NEXT: $L__BB114_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r26, 0, 0x8880U;
; SM70-NEXT: setp.gt.s32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r6, %r26, 0, 0x9991U;
; SM70-NEXT: setp.gt.s32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0xaaa2U;
; SM70-NEXT: prmt.b32 %r8, %r26, 0, 0xaaa2U;
; SM70-NEXT: setp.gt.s32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0xbbb3U;
; SM70-NEXT: prmt.b32 %r10, %r26, 0, 0xbbb3U;
; SM70-NEXT: setp.gt.s32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r12, %r2, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r14, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r15, %r26, 0, 0x7773U;
; SM70-NEXT: selp.b32 %r16, %r15, %r14, %p4;
; SM70-NEXT: prmt.b32 %r17, %r26, 0, 0x7772U;
; SM70-NEXT: selp.b32 %r18, %r17, %r13, %p3;
; SM70-NEXT: prmt.b32 %r19, %r18, %r16, 0x3340U;
; SM70-NEXT: prmt.b32 %r20, %r26, 0, 0x7771U;
; SM70-NEXT: selp.b32 %r21, %r20, %r12, %p2;
; SM70-NEXT: prmt.b32 %r22, %r26, 0, 0x7770U;
; SM70-NEXT: selp.b32 %r23, %r22, %r11, %p1;
; SM70-NEXT: prmt.b32 %r24, %r23, %r21, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r19, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r26;
; SM70-NEXT: mov.b32 %r26, %r1;
; SM70-NEXT: @%p5 bra $L__BB114_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @max_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: max_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<51>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [max_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NEXT: $L__BB115_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r49;
; SM70-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x8880U;
; SM70-NEXT: prmt.b32 %r4, %r50, 0, 0x8880U;
; SM70-NEXT: setp.gt.s32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x9991U;
; SM70-NEXT: prmt.b32 %r6, %r50, 0, 0x9991U;
; SM70-NEXT: setp.gt.s32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0xaaa2U;
; SM70-NEXT: prmt.b32 %r8, %r50, 0, 0xaaa2U;
; SM70-NEXT: setp.gt.s32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0xbbb3U;
; SM70-NEXT: prmt.b32 %r10, %r50, 0, 0xbbb3U;
; SM70-NEXT: setp.gt.s32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r1, 0, 0x8880U;
; SM70-NEXT: prmt.b32 %r12, %r49, 0, 0x8880U;
; SM70-NEXT: setp.gt.s32 %p5, %r12, %r11;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x9991U;
; SM70-NEXT: prmt.b32 %r14, %r49, 0, 0x9991U;
; SM70-NEXT: setp.gt.s32 %p6, %r14, %r13;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0xaaa2U;
; SM70-NEXT: prmt.b32 %r16, %r49, 0, 0xaaa2U;
; SM70-NEXT: setp.gt.s32 %p7, %r16, %r15;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0xbbb3U;
; SM70-NEXT: prmt.b32 %r18, %r49, 0, 0xbbb3U;
; SM70-NEXT: setp.gt.s32 %p8, %r18, %r17;
; SM70-NEXT: prmt.b32 %r19, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r19;
; SM70-NEXT: prmt.b32 %r20, %r50, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r20;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r21;
; SM70-NEXT: prmt.b32 %r22, %r50, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r22;
; SM70-NEXT: prmt.b32 %r23, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r23;
; SM70-NEXT: prmt.b32 %r24, %r50, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs6, %r24;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r25;
; SM70-NEXT: prmt.b32 %r26, %r50, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r26;
; SM70-NEXT: prmt.b32 %r27, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs9, %r27;
; SM70-NEXT: prmt.b32 %r28, %r49, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r28;
; SM70-NEXT: prmt.b32 %r29, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r29;
; SM70-NEXT: prmt.b32 %r30, %r49, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs12, %r30;
; SM70-NEXT: prmt.b32 %r31, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r31;
; SM70-NEXT: prmt.b32 %r32, %r49, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r32;
; SM70-NEXT: prmt.b32 %r33, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs15, %r33;
; SM70-NEXT: prmt.b32 %r34, %r49, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r34;
; SM70-NEXT: selp.b16 %rs17, %rs16, %rs15, %p8;
; SM70-NEXT: cvt.u32.u16 %r35, %rs17;
; SM70-NEXT: selp.b16 %rs18, %rs14, %rs13, %p7;
; SM70-NEXT: cvt.u32.u16 %r36, %rs18;
; SM70-NEXT: prmt.b32 %r37, %r36, %r35, 0x3340U;
; SM70-NEXT: selp.b16 %rs19, %rs12, %rs11, %p6;
; SM70-NEXT: cvt.u32.u16 %r38, %rs19;
; SM70-NEXT: selp.b16 %rs20, %rs10, %rs9, %p5;
; SM70-NEXT: cvt.u32.u16 %r39, %rs20;
; SM70-NEXT: prmt.b32 %r40, %r39, %r38, 0x3340U;
; SM70-NEXT: prmt.b32 %r41, %r40, %r37, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NEXT: selp.b16 %rs21, %rs8, %rs7, %p4;
; SM70-NEXT: cvt.u32.u16 %r42, %rs21;
; SM70-NEXT: selp.b16 %rs22, %rs6, %rs5, %p3;
; SM70-NEXT: cvt.u32.u16 %r43, %rs22;
; SM70-NEXT: prmt.b32 %r44, %r43, %r42, 0x3340U;
; SM70-NEXT: selp.b16 %rs23, %rs4, %rs3, %p2;
; SM70-NEXT: cvt.u32.u16 %r45, %rs23;
; SM70-NEXT: selp.b16 %rs24, %rs2, %rs1, %p1;
; SM70-NEXT: cvt.u32.u16 %r46, %rs24;
; SM70-NEXT: prmt.b32 %r47, %r46, %r45, 0x3340U;
; SM70-NEXT: prmt.b32 %r48, %r47, %r44, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r48;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NEXT: @%p9 bra $L__BB115_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @max_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: max_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<4>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [max_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [max_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB116_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: max.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs3;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB116_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @max_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: max_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [max_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB117_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: max.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: max.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB117_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @max_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: max_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [max_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB118_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NEXT: max.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: max.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r6;
; SM70-NEXT: max.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: max.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r4, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB118_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @max_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: max_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [max_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB119_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NEXT: max.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: max.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r10;
; SM70-NEXT: max.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: max.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r6, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB119_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NEXT: $L__BB119_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs15, %rs16}, %r11;
; SM70-NEXT: max.s16 %rs17, %rs16, %rs14;
; SM70-NEXT: max.s16 %rs18, %rs15, %rs13;
; SM70-NEXT: mov.b32 %r7, {%rs18, %rs17};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: max.s16 %rs23, %rs22, %rs20;
; SM70-NEXT: max.s16 %rs24, %rs21, %rs19;
; SM70-NEXT: mov.b32 %r8, {%rs24, %rs23};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB119_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @max_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: max_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [max_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @max_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: max_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [max_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @max_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: max_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [max_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @max_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: max_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [max_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [max_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.max.s32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @max_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: max_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [max_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @max_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: max_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [max_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @max_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: max_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [max_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [max_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @max_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: max_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [max_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [max_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [max_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [max_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [max_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.max.s64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise max ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @min_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: min_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<4>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [min_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.s8 %rs1, [min_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB128_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r14, %r1;
; SM70-NEXT: cvt.s8.s32 %rs2, %r7;
; SM70-NEXT: min.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs3;
; SM70-NEXT: and.b32 %r9, %r8, 255;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB128_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @min_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: min_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<14>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [min_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [min_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: cvt.s16.s8 %rs7, %rs5;
; SM70-NEXT: cvt.s16.s8 %rs8, %rs6;
; SM70-NEXT: $L__BB129_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r15, %r1;
; SM70-NEXT: cvt.s8.s32 %rs3, %r8;
; SM70-NEXT: bfe.s32 %r9, %r8, 8, 8;
; SM70-NEXT: cvt.s8.s32 %rs4, %r9;
; SM70-NEXT: min.s16 %rs9, %rs4, %rs8;
; SM70-NEXT: min.s16 %rs10, %rs3, %rs7;
; SM70-NEXT: and.b16 %rs11, %rs10, 255;
; SM70-NEXT: shl.b16 %rs12, %rs9, 8;
; SM70-NEXT: or.b16 %rs13, %rs11, %rs12;
; SM70-NEXT: cvt.u32.u16 %r10, %rs13;
; SM70-NEXT: shl.b32 %r11, %r10, %r1;
; SM70-NEXT: and.b32 %r12, %r15, %r2;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r15;
; SM70-NEXT: mov.b32 %r15, %r3;
; SM70-NEXT: @%p1 bra $L__BB129_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @min_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: min_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b32 %r<27>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [min_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x8880U;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x9991U;
; SM70-NEXT: $L__BB130_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r26, 0, 0x8880U;
; SM70-NEXT: setp.le.s32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r6, %r26, 0, 0x9991U;
; SM70-NEXT: setp.le.s32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0xaaa2U;
; SM70-NEXT: prmt.b32 %r8, %r26, 0, 0xaaa2U;
; SM70-NEXT: setp.le.s32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0xbbb3U;
; SM70-NEXT: prmt.b32 %r10, %r26, 0, 0xbbb3U;
; SM70-NEXT: setp.le.s32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r12, %r2, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r14, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r15, %r26, 0, 0x7773U;
; SM70-NEXT: selp.b32 %r16, %r15, %r14, %p4;
; SM70-NEXT: prmt.b32 %r17, %r26, 0, 0x7772U;
; SM70-NEXT: selp.b32 %r18, %r17, %r13, %p3;
; SM70-NEXT: prmt.b32 %r19, %r18, %r16, 0x3340U;
; SM70-NEXT: prmt.b32 %r20, %r26, 0, 0x7771U;
; SM70-NEXT: selp.b32 %r21, %r20, %r12, %p2;
; SM70-NEXT: prmt.b32 %r22, %r26, 0, 0x7770U;
; SM70-NEXT: selp.b32 %r23, %r22, %r11, %p1;
; SM70-NEXT: prmt.b32 %r24, %r23, %r21, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r19, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r26;
; SM70-NEXT: mov.b32 %r26, %r1;
; SM70-NEXT: @%p5 bra $L__BB130_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @min_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: min_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<51>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [min_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NEXT: $L__BB131_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r49;
; SM70-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x8880U;
; SM70-NEXT: prmt.b32 %r4, %r50, 0, 0x8880U;
; SM70-NEXT: setp.le.s32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x9991U;
; SM70-NEXT: prmt.b32 %r6, %r50, 0, 0x9991U;
; SM70-NEXT: setp.le.s32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0xaaa2U;
; SM70-NEXT: prmt.b32 %r8, %r50, 0, 0xaaa2U;
; SM70-NEXT: setp.le.s32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0xbbb3U;
; SM70-NEXT: prmt.b32 %r10, %r50, 0, 0xbbb3U;
; SM70-NEXT: setp.le.s32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r1, 0, 0x8880U;
; SM70-NEXT: prmt.b32 %r12, %r49, 0, 0x8880U;
; SM70-NEXT: setp.le.s32 %p5, %r12, %r11;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x9991U;
; SM70-NEXT: prmt.b32 %r14, %r49, 0, 0x9991U;
; SM70-NEXT: setp.le.s32 %p6, %r14, %r13;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0xaaa2U;
; SM70-NEXT: prmt.b32 %r16, %r49, 0, 0xaaa2U;
; SM70-NEXT: setp.le.s32 %p7, %r16, %r15;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0xbbb3U;
; SM70-NEXT: prmt.b32 %r18, %r49, 0, 0xbbb3U;
; SM70-NEXT: setp.le.s32 %p8, %r18, %r17;
; SM70-NEXT: prmt.b32 %r19, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r19;
; SM70-NEXT: prmt.b32 %r20, %r50, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r20;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r21;
; SM70-NEXT: prmt.b32 %r22, %r50, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r22;
; SM70-NEXT: prmt.b32 %r23, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r23;
; SM70-NEXT: prmt.b32 %r24, %r50, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs6, %r24;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r25;
; SM70-NEXT: prmt.b32 %r26, %r50, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r26;
; SM70-NEXT: prmt.b32 %r27, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs9, %r27;
; SM70-NEXT: prmt.b32 %r28, %r49, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r28;
; SM70-NEXT: prmt.b32 %r29, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r29;
; SM70-NEXT: prmt.b32 %r30, %r49, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs12, %r30;
; SM70-NEXT: prmt.b32 %r31, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r31;
; SM70-NEXT: prmt.b32 %r32, %r49, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r32;
; SM70-NEXT: prmt.b32 %r33, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs15, %r33;
; SM70-NEXT: prmt.b32 %r34, %r49, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r34;
; SM70-NEXT: selp.b16 %rs17, %rs16, %rs15, %p8;
; SM70-NEXT: cvt.u32.u16 %r35, %rs17;
; SM70-NEXT: selp.b16 %rs18, %rs14, %rs13, %p7;
; SM70-NEXT: cvt.u32.u16 %r36, %rs18;
; SM70-NEXT: prmt.b32 %r37, %r36, %r35, 0x3340U;
; SM70-NEXT: selp.b16 %rs19, %rs12, %rs11, %p6;
; SM70-NEXT: cvt.u32.u16 %r38, %rs19;
; SM70-NEXT: selp.b16 %rs20, %rs10, %rs9, %p5;
; SM70-NEXT: cvt.u32.u16 %r39, %rs20;
; SM70-NEXT: prmt.b32 %r40, %r39, %r38, 0x3340U;
; SM70-NEXT: prmt.b32 %r41, %r40, %r37, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NEXT: selp.b16 %rs21, %rs8, %rs7, %p4;
; SM70-NEXT: cvt.u32.u16 %r42, %rs21;
; SM70-NEXT: selp.b16 %rs22, %rs6, %rs5, %p3;
; SM70-NEXT: cvt.u32.u16 %r43, %rs22;
; SM70-NEXT: prmt.b32 %r44, %r43, %r42, 0x3340U;
; SM70-NEXT: selp.b16 %rs23, %rs4, %rs3, %p2;
; SM70-NEXT: cvt.u32.u16 %r45, %rs23;
; SM70-NEXT: selp.b16 %rs24, %rs2, %rs1, %p1;
; SM70-NEXT: cvt.u32.u16 %r46, %rs24;
; SM70-NEXT: prmt.b32 %r47, %r46, %r45, 0x3340U;
; SM70-NEXT: prmt.b32 %r48, %r47, %r44, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r48;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NEXT: @%p9 bra $L__BB131_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @min_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: min_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<4>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [min_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [min_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB132_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: min.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs3;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB132_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @min_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: min_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [min_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB133_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: min.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: min.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB133_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @min_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: min_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [min_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB134_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NEXT: min.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: min.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r6;
; SM70-NEXT: min.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: min.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r4, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB134_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @min_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: min_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [min_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB135_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NEXT: min.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: min.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r10;
; SM70-NEXT: min.s16 %rs11, %rs10, %rs8;
; SM70-NEXT: min.s16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r6, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB135_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NEXT: $L__BB135_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs15, %rs16}, %r11;
; SM70-NEXT: min.s16 %rs17, %rs16, %rs14;
; SM70-NEXT: min.s16 %rs18, %rs15, %rs13;
; SM70-NEXT: mov.b32 %r7, {%rs18, %rs17};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: min.s16 %rs23, %rs22, %rs20;
; SM70-NEXT: min.s16 %rs24, %rs21, %rs19;
; SM70-NEXT: mov.b32 %r8, {%rs24, %rs23};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB135_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @min_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: min_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [min_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @min_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: min_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [min_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @min_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: min_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [min_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @min_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: min_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [min_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [min_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.min.s32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @min_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: min_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [min_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @min_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: min_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [min_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @min_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: min_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [min_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [min_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @min_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: min_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [min_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [min_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [min_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [min_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [min_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.min.s64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise min ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @umax_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: umax_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<5>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b8 %rs1, [umax_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd2, [umax_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB144_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: and.b16 %rs3, %rs2, 255;
; SM70-NEXT: max.u16 %rs4, %rs3, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs4;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB144_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @umax_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: umax_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [umax_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [umax_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r4;
; SM70-NEXT: $L__BB145_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r16, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: mov.b32 %r9, {%rs3, %rs4};
; SM70-NEXT: and.b32 %r10, %r9, 16711935;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r10;
; SM70-NEXT: max.u16 %rs9, %rs5, %rs7;
; SM70-NEXT: max.u16 %rs10, %rs6, %rs8;
; SM70-NEXT: shl.b16 %rs11, %rs10, 8;
; SM70-NEXT: or.b16 %rs12, %rs9, %rs11;
; SM70-NEXT: cvt.u32.u16 %r11, %rs12;
; SM70-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-NEXT: mov.b32 %r16, %r3;
; SM70-NEXT: @%p1 bra $L__BB145_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @umax_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: umax_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [umax_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x7771U;
; SM70-NEXT: $L__BB146_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7770U;
; SM70-NEXT: setp.gt.u32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r6, %r18, 0, 0x7771U;
; SM70-NEXT: setp.gt.u32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r8, %r18, 0, 0x7772U;
; SM70-NEXT: setp.gt.u32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r10, %r18, 0, 0x7773U;
; SM70-NEXT: setp.gt.u32 %p4, %r10, %r9;
; SM70-NEXT: selp.b32 %r11, %r10, %r9, %p4;
; SM70-NEXT: selp.b32 %r12, %r8, %r7, %p3;
; SM70-NEXT: prmt.b32 %r13, %r12, %r11, 0x3340U;
; SM70-NEXT: selp.b32 %r14, %r6, %r5, %p2;
; SM70-NEXT: selp.b32 %r15, %r4, %r3, %p1;
; SM70-NEXT: prmt.b32 %r16, %r15, %r14, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r13, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p5 bra $L__BB146_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @umax_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: umax_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [umax_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB147_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r33;
; SM70-NEXT: cvt.u64.u32 %rd4, %r34;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r4, %r34, 0, 0x7770U;
; SM70-NEXT: setp.gt.u32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r6, %r34, 0, 0x7771U;
; SM70-NEXT: setp.gt.u32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r8, %r34, 0, 0x7772U;
; SM70-NEXT: setp.gt.u32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r10, %r34, 0, 0x7773U;
; SM70-NEXT: setp.gt.u32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r1, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r12, %r33, 0, 0x7770U;
; SM70-NEXT: setp.gt.u32 %p5, %r12, %r11;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7771U;
; SM70-NEXT: setp.gt.u32 %p6, %r14, %r13;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r16, %r33, 0, 0x7772U;
; SM70-NEXT: setp.gt.u32 %p7, %r16, %r15;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r18, %r33, 0, 0x7773U;
; SM70-NEXT: setp.gt.u32 %p8, %r18, %r17;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: cvt.u16.u32 %rs3, %r5;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: cvt.u16.u32 %rs6, %r8;
; SM70-NEXT: cvt.u16.u32 %rs7, %r9;
; SM70-NEXT: cvt.u16.u32 %rs8, %r10;
; SM70-NEXT: cvt.u16.u32 %rs9, %r11;
; SM70-NEXT: cvt.u16.u32 %rs10, %r12;
; SM70-NEXT: cvt.u16.u32 %rs11, %r13;
; SM70-NEXT: cvt.u16.u32 %rs12, %r14;
; SM70-NEXT: cvt.u16.u32 %rs13, %r15;
; SM70-NEXT: cvt.u16.u32 %rs14, %r16;
; SM70-NEXT: cvt.u16.u32 %rs15, %r17;
; SM70-NEXT: cvt.u16.u32 %rs16, %r18;
; SM70-NEXT: selp.b16 %rs17, %rs16, %rs15, %p8;
; SM70-NEXT: cvt.u32.u16 %r19, %rs17;
; SM70-NEXT: selp.b16 %rs18, %rs14, %rs13, %p7;
; SM70-NEXT: cvt.u32.u16 %r20, %rs18;
; SM70-NEXT: prmt.b32 %r21, %r20, %r19, 0x3340U;
; SM70-NEXT: selp.b16 %rs19, %rs12, %rs11, %p6;
; SM70-NEXT: cvt.u32.u16 %r22, %rs19;
; SM70-NEXT: selp.b16 %rs20, %rs10, %rs9, %p5;
; SM70-NEXT: cvt.u32.u16 %r23, %rs20;
; SM70-NEXT: prmt.b32 %r24, %r23, %r22, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r21, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r25;
; SM70-NEXT: selp.b16 %rs21, %rs8, %rs7, %p4;
; SM70-NEXT: cvt.u32.u16 %r26, %rs21;
; SM70-NEXT: selp.b16 %rs22, %rs6, %rs5, %p3;
; SM70-NEXT: cvt.u32.u16 %r27, %rs22;
; SM70-NEXT: prmt.b32 %r28, %r27, %r26, 0x3340U;
; SM70-NEXT: selp.b16 %rs23, %rs4, %rs3, %p2;
; SM70-NEXT: cvt.u32.u16 %r29, %rs23;
; SM70-NEXT: selp.b16 %rs24, %rs2, %rs1, %p1;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r29, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r28, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r32;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p9 bra $L__BB147_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @umax_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: umax_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<4>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [umax_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [umax_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB148_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: max.u16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs3;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB148_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @umax_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: umax_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [umax_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB149_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: max.u16 %rs5, %rs4, %rs2;
; SM70-NEXT: max.u16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB149_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @umax_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: umax_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [umax_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB150_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NEXT: max.u16 %rs5, %rs4, %rs2;
; SM70-NEXT: max.u16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r6;
; SM70-NEXT: max.u16 %rs11, %rs10, %rs8;
; SM70-NEXT: max.u16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r4, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB150_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @umax_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: umax_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [umax_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB151_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NEXT: max.u16 %rs5, %rs4, %rs2;
; SM70-NEXT: max.u16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r10;
; SM70-NEXT: max.u16 %rs11, %rs10, %rs8;
; SM70-NEXT: max.u16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r6, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB151_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NEXT: $L__BB151_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs15, %rs16}, %r11;
; SM70-NEXT: max.u16 %rs17, %rs16, %rs14;
; SM70-NEXT: max.u16 %rs18, %rs15, %rs13;
; SM70-NEXT: mov.b32 %r7, {%rs18, %rs17};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: max.u16 %rs23, %rs22, %rs20;
; SM70-NEXT: max.u16 %rs24, %rs21, %rs19;
; SM70-NEXT: mov.b32 %r8, {%rs24, %rs23};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB151_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @umax_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: umax_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [umax_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @umax_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: umax_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [umax_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @umax_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: umax_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [umax_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @umax_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: umax_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [umax_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [umax_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.max.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @umax_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: umax_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [umax_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @umax_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: umax_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [umax_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @umax_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: umax_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [umax_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [umax_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @umax_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: umax_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umax_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [umax_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [umax_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [umax_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [umax_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.max.u64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umax ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @umin_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: umin_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<5>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b8 %rs1, [umin_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd2, [umin_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB160_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: and.b16 %rs3, %rs2, 255;
; SM70-NEXT: min.u16 %rs4, %rs3, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs4;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB160_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @umin_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: umin_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [umin_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [umin_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r4;
; SM70-NEXT: $L__BB161_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r16, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: mov.b32 %r9, {%rs3, %rs4};
; SM70-NEXT: and.b32 %r10, %r9, 16711935;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r10;
; SM70-NEXT: min.u16 %rs9, %rs5, %rs7;
; SM70-NEXT: min.u16 %rs10, %rs6, %rs8;
; SM70-NEXT: shl.b16 %rs11, %rs10, 8;
; SM70-NEXT: or.b16 %rs12, %rs9, %rs11;
; SM70-NEXT: cvt.u32.u16 %r11, %rs12;
; SM70-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-NEXT: mov.b32 %r16, %r3;
; SM70-NEXT: @%p1 bra $L__BB161_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @umin_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: umin_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [umin_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x7771U;
; SM70-NEXT: $L__BB162_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7770U;
; SM70-NEXT: setp.le.u32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r6, %r18, 0, 0x7771U;
; SM70-NEXT: setp.le.u32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r8, %r18, 0, 0x7772U;
; SM70-NEXT: setp.le.u32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r10, %r18, 0, 0x7773U;
; SM70-NEXT: setp.le.u32 %p4, %r10, %r9;
; SM70-NEXT: selp.b32 %r11, %r10, %r9, %p4;
; SM70-NEXT: selp.b32 %r12, %r8, %r7, %p3;
; SM70-NEXT: prmt.b32 %r13, %r12, %r11, 0x3340U;
; SM70-NEXT: selp.b32 %r14, %r6, %r5, %p2;
; SM70-NEXT: selp.b32 %r15, %r4, %r3, %p1;
; SM70-NEXT: prmt.b32 %r16, %r15, %r14, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r13, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p5 bra $L__BB162_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @umin_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: umin_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [umin_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB163_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r33;
; SM70-NEXT: cvt.u64.u32 %rd4, %r34;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r4, %r34, 0, 0x7770U;
; SM70-NEXT: setp.le.u32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r6, %r34, 0, 0x7771U;
; SM70-NEXT: setp.le.u32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r8, %r34, 0, 0x7772U;
; SM70-NEXT: setp.le.u32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r10, %r34, 0, 0x7773U;
; SM70-NEXT: setp.le.u32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r1, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r12, %r33, 0, 0x7770U;
; SM70-NEXT: setp.le.u32 %p5, %r12, %r11;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7771U;
; SM70-NEXT: setp.le.u32 %p6, %r14, %r13;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r16, %r33, 0, 0x7772U;
; SM70-NEXT: setp.le.u32 %p7, %r16, %r15;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r18, %r33, 0, 0x7773U;
; SM70-NEXT: setp.le.u32 %p8, %r18, %r17;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: cvt.u16.u32 %rs3, %r5;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: cvt.u16.u32 %rs6, %r8;
; SM70-NEXT: cvt.u16.u32 %rs7, %r9;
; SM70-NEXT: cvt.u16.u32 %rs8, %r10;
; SM70-NEXT: cvt.u16.u32 %rs9, %r11;
; SM70-NEXT: cvt.u16.u32 %rs10, %r12;
; SM70-NEXT: cvt.u16.u32 %rs11, %r13;
; SM70-NEXT: cvt.u16.u32 %rs12, %r14;
; SM70-NEXT: cvt.u16.u32 %rs13, %r15;
; SM70-NEXT: cvt.u16.u32 %rs14, %r16;
; SM70-NEXT: cvt.u16.u32 %rs15, %r17;
; SM70-NEXT: cvt.u16.u32 %rs16, %r18;
; SM70-NEXT: selp.b16 %rs17, %rs16, %rs15, %p8;
; SM70-NEXT: cvt.u32.u16 %r19, %rs17;
; SM70-NEXT: selp.b16 %rs18, %rs14, %rs13, %p7;
; SM70-NEXT: cvt.u32.u16 %r20, %rs18;
; SM70-NEXT: prmt.b32 %r21, %r20, %r19, 0x3340U;
; SM70-NEXT: selp.b16 %rs19, %rs12, %rs11, %p6;
; SM70-NEXT: cvt.u32.u16 %r22, %rs19;
; SM70-NEXT: selp.b16 %rs20, %rs10, %rs9, %p5;
; SM70-NEXT: cvt.u32.u16 %r23, %rs20;
; SM70-NEXT: prmt.b32 %r24, %r23, %r22, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r21, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r25;
; SM70-NEXT: selp.b16 %rs21, %rs8, %rs7, %p4;
; SM70-NEXT: cvt.u32.u16 %r26, %rs21;
; SM70-NEXT: selp.b16 %rs22, %rs6, %rs5, %p3;
; SM70-NEXT: cvt.u32.u16 %r27, %rs22;
; SM70-NEXT: prmt.b32 %r28, %r27, %r26, 0x3340U;
; SM70-NEXT: selp.b16 %rs23, %rs4, %rs3, %p2;
; SM70-NEXT: cvt.u32.u16 %r29, %rs23;
; SM70-NEXT: selp.b16 %rs24, %rs2, %rs1, %p1;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r29, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r28, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r32;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p9 bra $L__BB163_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @umin_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: umin_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<4>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [umin_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [umin_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB164_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: min.u16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs3;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB164_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @umin_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: umin_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [umin_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB165_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: min.u16 %rs5, %rs4, %rs2;
; SM70-NEXT: min.u16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p1 bra $L__BB165_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @umin_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: umin_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [umin_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB166_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NEXT: min.u16 %rs5, %rs4, %rs2;
; SM70-NEXT: min.u16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r6;
; SM70-NEXT: min.u16 %rs11, %rs10, %rs8;
; SM70-NEXT: min.u16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r4, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p1 bra $L__BB166_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @umin_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: umin_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [umin_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NEXT: $L__BB167_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NEXT: min.u16 %rs5, %rs4, %rs2;
; SM70-NEXT: min.u16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r10;
; SM70-NEXT: min.u16 %rs11, %rs10, %rs8;
; SM70-NEXT: min.u16 %rs12, %rs9, %rs7;
; SM70-NEXT: mov.b32 %r6, {%rs12, %rs11};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p1 bra $L__BB167_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NEXT: $L__BB167_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs15, %rs16}, %r11;
; SM70-NEXT: min.u16 %rs17, %rs16, %rs14;
; SM70-NEXT: min.u16 %rs18, %rs15, %rs13;
; SM70-NEXT: mov.b32 %r7, {%rs18, %rs17};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: min.u16 %rs23, %rs22, %rs20;
; SM70-NEXT: min.u16 %rs24, %rs21, %rs19;
; SM70-NEXT: mov.b32 %r8, {%rs24, %rs23};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p2 bra $L__BB167_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @umin_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: umin_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [umin_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @umin_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: umin_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [umin_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @umin_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: umin_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [umin_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @umin_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: umin_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [umin_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [umin_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.min.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @umin_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: umin_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [umin_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @umin_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: umin_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [umin_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @umin_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: umin_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [umin_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [umin_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @umin_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: umin_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [umin_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [umin_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [umin_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [umin_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [umin_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.min.u64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise umin ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @uinc_wrap_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<6>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b8 %rs1, [uinc_wrap_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd2, [uinc_wrap_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB176_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: and.b16 %rs3, %rs2, 255;
; SM70-NEXT: add.s16 %rs4, %rs2, 1;
; SM70-NEXT: setp.ge.u16 %p1, %rs3, %rs1;
; SM70-NEXT: selp.b16 %rs5, 0, %rs4, %p1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs5;
; SM70-NEXT: and.b32 %r9, %r8, 255;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p2, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p2 bra $L__BB176_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @uinc_wrap_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<15>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [uinc_wrap_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [uinc_wrap_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs8, %rs9}, %r4;
; SM70-NEXT: $L__BB177_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: and.b16 %rs4, %rs3, 255;
; SM70-NEXT: shr.u16 %rs5, %rs3, 8;
; SM70-NEXT: add.s16 %rs6, %rs5, 1;
; SM70-NEXT: add.s16 %rs7, %rs3, 1;
; SM70-NEXT: setp.ge.u16 %p1, %rs5, %rs9;
; SM70-NEXT: setp.ge.u16 %p2, %rs4, %rs8;
; SM70-NEXT: selp.b16 %rs10, 0, %rs7, %p2;
; SM70-NEXT: selp.b16 %rs11, 0, %rs6, %p1;
; SM70-NEXT: shl.b16 %rs12, %rs11, 8;
; SM70-NEXT: and.b16 %rs13, %rs10, 255;
; SM70-NEXT: or.b16 %rs14, %rs13, %rs12;
; SM70-NEXT: cvt.u32.u16 %r9, %rs14;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p3, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p3 bra $L__BB177_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @uinc_wrap_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<9>;
; SM70-NEXT: .reg .b32 %r<23>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [uinc_wrap_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r22, [%rd1];
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r8, %r2, 0, 0x7771U;
; SM70-NEXT: $L__BB178_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r22, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: add.s16 %rs2, %rs1, 1;
; SM70-NEXT: prmt.b32 %r4, %r22, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r4;
; SM70-NEXT: add.s16 %rs4, %rs3, 1;
; SM70-NEXT: prmt.b32 %r5, %r22, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r5;
; SM70-NEXT: add.s16 %rs6, %rs5, 1;
; SM70-NEXT: prmt.b32 %r6, %r22, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r6;
; SM70-NEXT: add.s16 %rs8, %rs7, 1;
; SM70-NEXT: setp.ge.u32 %p1, %r3, %r7;
; SM70-NEXT: setp.ge.u32 %p2, %r4, %r8;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7772U;
; SM70-NEXT: setp.ge.u32 %p3, %r5, %r9;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7773U;
; SM70-NEXT: setp.ge.u32 %p4, %r6, %r10;
; SM70-NEXT: cvt.u32.u16 %r11, %rs8;
; SM70-NEXT: selp.b32 %r12, 0, %r11, %p4;
; SM70-NEXT: cvt.u32.u16 %r13, %rs6;
; SM70-NEXT: selp.b32 %r14, 0, %r13, %p3;
; SM70-NEXT: prmt.b32 %r15, %r14, %r12, 0x3340U;
; SM70-NEXT: cvt.u32.u16 %r16, %rs4;
; SM70-NEXT: selp.b32 %r17, 0, %r16, %p2;
; SM70-NEXT: cvt.u32.u16 %r18, %rs2;
; SM70-NEXT: selp.b32 %r19, 0, %r18, %p1;
; SM70-NEXT: prmt.b32 %r20, %r19, %r17, 0x3340U;
; SM70-NEXT: prmt.b32 %r21, %r20, %r15, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r22, %r21;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r22;
; SM70-NEXT: mov.b32 %r22, %r1;
; SM70-NEXT: @%p5 bra $L__BB178_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @uinc_wrap_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [uinc_wrap_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB179_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r33;
; SM70-NEXT: cvt.u64.u32 %rd4, %r34;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: add.s16 %rs2, %rs1, 1;
; SM70-NEXT: prmt.b32 %r4, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r4;
; SM70-NEXT: add.s16 %rs4, %rs3, 1;
; SM70-NEXT: prmt.b32 %r5, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r5;
; SM70-NEXT: add.s16 %rs6, %rs5, 1;
; SM70-NEXT: prmt.b32 %r6, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r6;
; SM70-NEXT: add.s16 %rs8, %rs7, 1;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs9, %r7;
; SM70-NEXT: add.s16 %rs10, %rs9, 1;
; SM70-NEXT: prmt.b32 %r8, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r8;
; SM70-NEXT: add.s16 %rs12, %rs11, 1;
; SM70-NEXT: prmt.b32 %r9, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r9;
; SM70-NEXT: add.s16 %rs14, %rs13, 1;
; SM70-NEXT: prmt.b32 %r10, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs15, %r10;
; SM70-NEXT: add.s16 %rs16, %rs15, 1;
; SM70-NEXT: prmt.b32 %r11, %r2, 0, 0x7770U;
; SM70-NEXT: setp.ge.u32 %p1, %r3, %r11;
; SM70-NEXT: prmt.b32 %r12, %r2, 0, 0x7771U;
; SM70-NEXT: setp.ge.u32 %p2, %r4, %r12;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7772U;
; SM70-NEXT: setp.ge.u32 %p3, %r5, %r13;
; SM70-NEXT: prmt.b32 %r14, %r2, 0, 0x7773U;
; SM70-NEXT: setp.ge.u32 %p4, %r6, %r14;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0x7770U;
; SM70-NEXT: setp.ge.u32 %p5, %r7, %r15;
; SM70-NEXT: prmt.b32 %r16, %r1, 0, 0x7771U;
; SM70-NEXT: setp.ge.u32 %p6, %r8, %r16;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0x7772U;
; SM70-NEXT: setp.ge.u32 %p7, %r9, %r17;
; SM70-NEXT: prmt.b32 %r18, %r1, 0, 0x7773U;
; SM70-NEXT: setp.ge.u32 %p8, %r10, %r18;
; SM70-NEXT: selp.b16 %rs17, 0, %rs16, %p8;
; SM70-NEXT: cvt.u32.u16 %r19, %rs17;
; SM70-NEXT: selp.b16 %rs18, 0, %rs14, %p7;
; SM70-NEXT: cvt.u32.u16 %r20, %rs18;
; SM70-NEXT: prmt.b32 %r21, %r20, %r19, 0x3340U;
; SM70-NEXT: selp.b16 %rs19, 0, %rs12, %p6;
; SM70-NEXT: cvt.u32.u16 %r22, %rs19;
; SM70-NEXT: selp.b16 %rs20, 0, %rs10, %p5;
; SM70-NEXT: cvt.u32.u16 %r23, %rs20;
; SM70-NEXT: prmt.b32 %r24, %r23, %r22, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r21, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r25;
; SM70-NEXT: selp.b16 %rs21, 0, %rs8, %p4;
; SM70-NEXT: cvt.u32.u16 %r26, %rs21;
; SM70-NEXT: selp.b16 %rs22, 0, %rs6, %p3;
; SM70-NEXT: cvt.u32.u16 %r27, %rs22;
; SM70-NEXT: prmt.b32 %r28, %r27, %r26, 0x3340U;
; SM70-NEXT: selp.b16 %rs23, 0, %rs4, %p2;
; SM70-NEXT: cvt.u32.u16 %r29, %rs23;
; SM70-NEXT: selp.b16 %rs24, 0, %rs2, %p1;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r29, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r28, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r32;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p9 bra $L__BB179_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @uinc_wrap_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<5>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [uinc_wrap_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [uinc_wrap_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB180_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: add.s16 %rs3, %rs2, 1;
; SM70-NEXT: setp.ge.u16 %p1, %rs2, %rs1;
; SM70-NEXT: selp.b16 %rs4, 0, %rs3, %p1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs4;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p2, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p2 bra $L__BB180_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @uinc_wrap_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<9>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [uinc_wrap_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NEXT: $L__BB181_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-NEXT: add.s16 %rs3, %rs1, 1;
; SM70-NEXT: add.s16 %rs4, %rs2, 1;
; SM70-NEXT: setp.ge.u16 %p1, %rs1, %rs5;
; SM70-NEXT: setp.ge.u16 %p2, %rs2, %rs6;
; SM70-NEXT: selp.b16 %rs7, 0, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs8, 0, %rs3, %p1;
; SM70-NEXT: mov.b32 %r3, {%rs8, %rs7};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p3, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p3 bra $L__BB181_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @uinc_wrap_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [uinc_wrap_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r2;
; SM70-NEXT: mov.b32 {%rs11, %rs12}, %r1;
; SM70-NEXT: $L__BB182_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r6;
; SM70-NEXT: add.s16 %rs3, %rs1, 1;
; SM70-NEXT: add.s16 %rs4, %rs2, 1;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r5;
; SM70-NEXT: add.s16 %rs7, %rs5, 1;
; SM70-NEXT: add.s16 %rs8, %rs6, 1;
; SM70-NEXT: setp.ge.u16 %p1, %rs1, %rs9;
; SM70-NEXT: setp.ge.u16 %p2, %rs2, %rs10;
; SM70-NEXT: setp.ge.u16 %p3, %rs5, %rs11;
; SM70-NEXT: setp.ge.u16 %p4, %rs6, %rs12;
; SM70-NEXT: selp.b16 %rs13, 0, %rs8, %p4;
; SM70-NEXT: selp.b16 %rs14, 0, %rs7, %p3;
; SM70-NEXT: mov.b32 %r3, {%rs14, %rs13};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: selp.b16 %rs15, 0, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs16, 0, %rs3, %p1;
; SM70-NEXT: mov.b32 %r4, {%rs16, %rs15};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p5, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p5 bra $L__BB182_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @uinc_wrap_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<11>;
; SM70-NEXT: .reg .b16 %rs<33>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [uinc_wrap_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r2;
; SM70-NEXT: mov.b32 {%rs11, %rs12}, %r1;
; SM70-NEXT: $L__BB183_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r10;
; SM70-NEXT: add.s16 %rs3, %rs1, 1;
; SM70-NEXT: add.s16 %rs4, %rs2, 1;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r9;
; SM70-NEXT: add.s16 %rs7, %rs5, 1;
; SM70-NEXT: add.s16 %rs8, %rs6, 1;
; SM70-NEXT: setp.ge.u16 %p1, %rs1, %rs9;
; SM70-NEXT: setp.ge.u16 %p2, %rs2, %rs10;
; SM70-NEXT: setp.ge.u16 %p3, %rs5, %rs11;
; SM70-NEXT: setp.ge.u16 %p4, %rs6, %rs12;
; SM70-NEXT: selp.b16 %rs13, 0, %rs8, %p4;
; SM70-NEXT: selp.b16 %rs14, 0, %rs7, %p3;
; SM70-NEXT: mov.b32 %r5, {%rs14, %rs13};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: selp.b16 %rs15, 0, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs16, 0, %rs3, %p1;
; SM70-NEXT: mov.b32 %r6, {%rs16, %rs15};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p5, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p5 bra $L__BB183_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: $L__BB183_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs17, %rs18}, %r12;
; SM70-NEXT: add.s16 %rs19, %rs17, 1;
; SM70-NEXT: add.s16 %rs20, %rs18, 1;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r11;
; SM70-NEXT: add.s16 %rs23, %rs21, 1;
; SM70-NEXT: add.s16 %rs24, %rs22, 1;
; SM70-NEXT: mov.b32 {%rs25, %rs26}, %r4;
; SM70-NEXT: setp.ge.u16 %p6, %rs17, %rs25;
; SM70-NEXT: setp.ge.u16 %p7, %rs18, %rs26;
; SM70-NEXT: mov.b32 {%rs27, %rs28}, %r3;
; SM70-NEXT: setp.ge.u16 %p8, %rs21, %rs27;
; SM70-NEXT: setp.ge.u16 %p9, %rs22, %rs28;
; SM70-NEXT: selp.b16 %rs29, 0, %rs24, %p9;
; SM70-NEXT: selp.b16 %rs30, 0, %rs23, %p8;
; SM70-NEXT: mov.b32 %r7, {%rs30, %rs29};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: selp.b16 %rs31, 0, %rs20, %p7;
; SM70-NEXT: selp.b16 %rs32, 0, %rs19, %p6;
; SM70-NEXT: mov.b32 %r8, {%rs32, %rs31};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p10, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p10 bra $L__BB183_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @uinc_wrap_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [uinc_wrap_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @uinc_wrap_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [uinc_wrap_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @uinc_wrap_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [uinc_wrap_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @uinc_wrap_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [uinc_wrap_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [uinc_wrap_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.inc.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @uinc_wrap_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b64 %rd<7>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [uinc_wrap_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [uinc_wrap_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd6, [%rd3];
; SM70-NEXT: $L__BB188_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd4, %rd6, 1;
; SM70-NEXT: setp.ge.u64 %p1, %rd6, %rd1;
; SM70-NEXT: selp.b64 %rd5, 0, %rd4, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd6, %rd5;
; SM70-NEXT: setp.ne.b64 %p2, %rd2, %rd6;
; SM70-NEXT: mov.b64 %rd6, %rd2;
; SM70-NEXT: @%p2 bra $L__BB188_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @uinc_wrap_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [uinc_wrap_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [uinc_wrap_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd10, [%rd5];
; SM70-NEXT: $L__BB189_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd10;
; SM70-NEXT: add.s64 %rd6, %rd3, 1;
; SM70-NEXT: setp.ge.u64 %p1, %rd3, %rd2;
; SM70-NEXT: selp.b64 %rd7, 0, %rd6, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd10, [%rd5], %rd3, %rd7;
; SM70-NEXT: setp.ne.b64 %p2, %rd10, %rd3;
; SM70-NEXT: @%p2 bra $L__BB189_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd11, [%rd5+8];
; SM70-NEXT: $L__BB189_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd8, %rd11, 1;
; SM70-NEXT: setp.ge.u64 %p3, %rd11, %rd1;
; SM70-NEXT: selp.b64 %rd9, 0, %rd8, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd11, %rd9;
; SM70-NEXT: setp.ne.b64 %p4, %rd4, %rd11;
; SM70-NEXT: mov.b64 %rd11, %rd4;
; SM70-NEXT: @%p4 bra $L__BB189_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @uinc_wrap_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [uinc_wrap_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [uinc_wrap_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [uinc_wrap_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd18, [%rd9];
; SM70-NEXT: $L__BB190_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd18;
; SM70-NEXT: add.s64 %rd10, %rd4, 1;
; SM70-NEXT: setp.ge.u64 %p1, %rd4, %rd3;
; SM70-NEXT: selp.b64 %rd11, 0, %rd10, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd18, [%rd9], %rd4, %rd11;
; SM70-NEXT: setp.ne.b64 %p2, %rd18, %rd4;
; SM70-NEXT: @%p2 bra $L__BB190_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd19, [%rd9+8];
; SM70-NEXT: $L__BB190_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd19;
; SM70-NEXT: add.s64 %rd12, %rd5, 1;
; SM70-NEXT: setp.ge.u64 %p3, %rd5, %rd2;
; SM70-NEXT: selp.b64 %rd13, 0, %rd12, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd19, [%rd9+8], %rd5, %rd13;
; SM70-NEXT: setp.ne.b64 %p4, %rd19, %rd5;
; SM70-NEXT: @%p4 bra $L__BB190_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd20, [%rd9+16];
; SM70-NEXT: $L__BB190_5: // %atomicrmw.start20
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd20;
; SM70-NEXT: add.s64 %rd14, %rd7, 1;
; SM70-NEXT: setp.ge.u64 %p5, %rd7, %rd1;
; SM70-NEXT: selp.b64 %rd15, 0, %rd14, %p5;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd20, [%rd9+16], %rd7, %rd15;
; SM70-NEXT: setp.ne.b64 %p6, %rd20, %rd7;
; SM70-NEXT: @%p6 bra $L__BB190_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end19
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd21, [%rd9+24];
; SM70-NEXT: $L__BB190_7: // %atomicrmw.start28
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd16, %rd21, 1;
; SM70-NEXT: setp.ge.u64 %p7, %rd21, %rd6;
; SM70-NEXT: selp.b64 %rd17, 0, %rd16, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd21, %rd17;
; SM70-NEXT: setp.ne.b64 %p8, %rd8, %rd21;
; SM70-NEXT: mov.b64 %rd21, %rd8;
; SM70-NEXT: @%p8 bra $L__BB190_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end27
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd20, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd18, %rd19};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @uinc_wrap_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: uinc_wrap_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<17>;
; SM70-NEXT: .reg .b64 %rd<42>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [uinc_wrap_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [uinc_wrap_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [uinc_wrap_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [uinc_wrap_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [uinc_wrap_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd34, [%rd17];
; SM70-NEXT: $L__BB191_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd34;
; SM70-NEXT: add.s64 %rd18, %rd5, 1;
; SM70-NEXT: setp.ge.u64 %p1, %rd5, %rd4;
; SM70-NEXT: selp.b64 %rd19, 0, %rd18, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd17], %rd5, %rd19;
; SM70-NEXT: setp.ne.b64 %p2, %rd34, %rd5;
; SM70-NEXT: @%p2 bra $L__BB191_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd17+8];
; SM70-NEXT: $L__BB191_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd35;
; SM70-NEXT: add.s64 %rd20, %rd6, 1;
; SM70-NEXT: setp.ge.u64 %p3, %rd6, %rd3;
; SM70-NEXT: selp.b64 %rd21, 0, %rd20, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd35, [%rd17+8], %rd6, %rd21;
; SM70-NEXT: setp.ne.b64 %p4, %rd35, %rd6;
; SM70-NEXT: @%p4 bra $L__BB191_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd36, [%rd17+16];
; SM70-NEXT: $L__BB191_5: // %atomicrmw.start24
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd36;
; SM70-NEXT: add.s64 %rd22, %rd8, 1;
; SM70-NEXT: setp.ge.u64 %p5, %rd8, %rd2;
; SM70-NEXT: selp.b64 %rd23, 0, %rd22, %p5;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd36, [%rd17+16], %rd8, %rd23;
; SM70-NEXT: setp.ne.b64 %p6, %rd36, %rd8;
; SM70-NEXT: @%p6 bra $L__BB191_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end23
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd37, [%rd17+24];
; SM70-NEXT: $L__BB191_7: // %atomicrmw.start32
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd37;
; SM70-NEXT: add.s64 %rd24, %rd9, 1;
; SM70-NEXT: setp.ge.u64 %p7, %rd9, %rd7;
; SM70-NEXT: selp.b64 %rd25, 0, %rd24, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd37, [%rd17+24], %rd9, %rd25;
; SM70-NEXT: setp.ne.b64 %p8, %rd37, %rd9;
; SM70-NEXT: @%p8 bra $L__BB191_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end31
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd38, [%rd17+32];
; SM70-NEXT: $L__BB191_9: // %atomicrmw.start48
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd38;
; SM70-NEXT: add.s64 %rd26, %rd12, 1;
; SM70-NEXT: setp.ge.u64 %p9, %rd12, %rd1;
; SM70-NEXT: selp.b64 %rd27, 0, %rd26, %p9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd38, [%rd17+32], %rd12, %rd27;
; SM70-NEXT: setp.ne.b64 %p10, %rd38, %rd12;
; SM70-NEXT: @%p10 bra $L__BB191_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end47
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd39, [%rd17+40];
; SM70-NEXT: $L__BB191_11: // %atomicrmw.start56
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd39;
; SM70-NEXT: add.s64 %rd28, %rd13, 1;
; SM70-NEXT: setp.ge.u64 %p11, %rd13, %rd11;
; SM70-NEXT: selp.b64 %rd29, 0, %rd28, %p11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd39, [%rd17+40], %rd13, %rd29;
; SM70-NEXT: setp.ne.b64 %p12, %rd39, %rd13;
; SM70-NEXT: @%p12 bra $L__BB191_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end55
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd40, [%rd17+48];
; SM70-NEXT: $L__BB191_13: // %atomicrmw.start68
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd40;
; SM70-NEXT: add.s64 %rd30, %rd15, 1;
; SM70-NEXT: setp.ge.u64 %p13, %rd15, %rd10;
; SM70-NEXT: selp.b64 %rd31, 0, %rd30, %p13;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd40, [%rd17+48], %rd15, %rd31;
; SM70-NEXT: setp.ne.b64 %p14, %rd40, %rd15;
; SM70-NEXT: @%p14 bra $L__BB191_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end67
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd41, [%rd17+56];
; SM70-NEXT: $L__BB191_15: // %atomicrmw.start76
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd32, %rd41, 1;
; SM70-NEXT: setp.ge.u64 %p15, %rd41, %rd14;
; SM70-NEXT: selp.b64 %rd33, 0, %rd32, %p15;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd41, %rd33;
; SM70-NEXT: setp.ne.b64 %p16, %rd16, %rd41;
; SM70-NEXT: mov.b64 %rd41, %rd16;
; SM70-NEXT: @%p16 bra $L__BB191_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end75
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd40, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd38, %rd39};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd34, %rd35};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd36, %rd37};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise uinc_wrap ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @udec_wrap_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<7>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b8 %rs1, [udec_wrap_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd2, [udec_wrap_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB192_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: and.b16 %rs3, %rs2, 255;
; SM70-NEXT: add.s16 %rs4, %rs2, -1;
; SM70-NEXT: setp.eq.b16 %p1, %rs3, 0;
; SM70-NEXT: setp.gt.u16 %p2, %rs3, %rs1;
; SM70-NEXT: selp.b16 %rs5, %rs1, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs6, %rs1, %rs5, %p1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: and.b32 %r9, %r8, 255;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p3, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p3 bra $L__BB192_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @udec_wrap_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [udec_wrap_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [udec_wrap_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs8, %rs9}, %r4;
; SM70-NEXT: $L__BB193_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: and.b16 %rs4, %rs3, 255;
; SM70-NEXT: shr.u16 %rs5, %rs3, 8;
; SM70-NEXT: add.s16 %rs6, %rs5, -1;
; SM70-NEXT: add.s16 %rs7, %rs3, -1;
; SM70-NEXT: setp.eq.b16 %p1, %rs5, 0;
; SM70-NEXT: setp.eq.b16 %p2, %rs4, 0;
; SM70-NEXT: setp.gt.u16 %p3, %rs5, %rs9;
; SM70-NEXT: setp.gt.u16 %p4, %rs4, %rs8;
; SM70-NEXT: selp.b16 %rs10, %rs8, %rs7, %p4;
; SM70-NEXT: selp.b16 %rs11, %rs8, %rs10, %p2;
; SM70-NEXT: selp.b16 %rs12, %rs9, %rs6, %p3;
; SM70-NEXT: selp.b16 %rs13, %rs9, %rs12, %p1;
; SM70-NEXT: shl.b16 %rs14, %rs13, 8;
; SM70-NEXT: and.b16 %rs15, %rs11, 255;
; SM70-NEXT: or.b16 %rs16, %rs15, %rs14;
; SM70-NEXT: cvt.u32.u16 %r9, %rs16;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p5, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p5 bra $L__BB193_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @udec_wrap_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<9>;
; SM70-NEXT: .reg .b32 %r<27>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [udec_wrap_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r8, %r2, 0, 0x7771U;
; SM70-NEXT: $L__BB194_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r26, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: add.s16 %rs2, %rs1, -1;
; SM70-NEXT: prmt.b32 %r4, %r26, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r4;
; SM70-NEXT: add.s16 %rs4, %rs3, -1;
; SM70-NEXT: prmt.b32 %r5, %r26, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r5;
; SM70-NEXT: add.s16 %rs6, %rs5, -1;
; SM70-NEXT: prmt.b32 %r6, %r26, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r6;
; SM70-NEXT: add.s16 %rs8, %rs7, -1;
; SM70-NEXT: setp.eq.b32 %p1, %r3, 0;
; SM70-NEXT: setp.eq.b32 %p2, %r4, 0;
; SM70-NEXT: setp.eq.b32 %p3, %r5, 0;
; SM70-NEXT: setp.eq.b32 %p4, %r6, 0;
; SM70-NEXT: setp.gt.u32 %p5, %r3, %r7;
; SM70-NEXT: setp.gt.u32 %p6, %r4, %r8;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7772U;
; SM70-NEXT: setp.gt.u32 %p7, %r5, %r9;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7773U;
; SM70-NEXT: setp.gt.u32 %p8, %r6, %r10;
; SM70-NEXT: cvt.u32.u16 %r11, %rs8;
; SM70-NEXT: selp.b32 %r12, %r10, %r11, %p8;
; SM70-NEXT: selp.b32 %r13, %r10, %r12, %p4;
; SM70-NEXT: cvt.u32.u16 %r14, %rs6;
; SM70-NEXT: selp.b32 %r15, %r9, %r14, %p7;
; SM70-NEXT: selp.b32 %r16, %r9, %r15, %p3;
; SM70-NEXT: prmt.b32 %r17, %r16, %r13, 0x3340U;
; SM70-NEXT: cvt.u32.u16 %r18, %rs4;
; SM70-NEXT: selp.b32 %r19, %r8, %r18, %p6;
; SM70-NEXT: selp.b32 %r20, %r8, %r19, %p2;
; SM70-NEXT: cvt.u32.u16 %r21, %rs2;
; SM70-NEXT: selp.b32 %r22, %r7, %r21, %p5;
; SM70-NEXT: selp.b32 %r23, %r7, %r22, %p1;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r17, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NEXT: setp.ne.b32 %p9, %r1, %r26;
; SM70-NEXT: mov.b32 %r26, %r1;
; SM70-NEXT: @%p9 bra $L__BB194_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @udec_wrap_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<18>;
; SM70-NEXT: .reg .b16 %rs<41>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [udec_wrap_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB195_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r33;
; SM70-NEXT: cvt.u64.u32 %rd4, %r34;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: add.s16 %rs2, %rs1, -1;
; SM70-NEXT: prmt.b32 %r4, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r4;
; SM70-NEXT: add.s16 %rs4, %rs3, -1;
; SM70-NEXT: prmt.b32 %r5, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r5;
; SM70-NEXT: add.s16 %rs6, %rs5, -1;
; SM70-NEXT: prmt.b32 %r6, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r6;
; SM70-NEXT: add.s16 %rs8, %rs7, -1;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs9, %r7;
; SM70-NEXT: add.s16 %rs10, %rs9, -1;
; SM70-NEXT: prmt.b32 %r8, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r8;
; SM70-NEXT: add.s16 %rs12, %rs11, -1;
; SM70-NEXT: prmt.b32 %r9, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r9;
; SM70-NEXT: add.s16 %rs14, %rs13, -1;
; SM70-NEXT: prmt.b32 %r10, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs15, %r10;
; SM70-NEXT: add.s16 %rs16, %rs15, -1;
; SM70-NEXT: setp.eq.b32 %p1, %r3, 0;
; SM70-NEXT: setp.eq.b32 %p2, %r4, 0;
; SM70-NEXT: setp.eq.b32 %p3, %r5, 0;
; SM70-NEXT: setp.eq.b32 %p4, %r6, 0;
; SM70-NEXT: setp.eq.b32 %p5, %r7, 0;
; SM70-NEXT: setp.eq.b32 %p6, %r8, 0;
; SM70-NEXT: setp.eq.b32 %p7, %r9, 0;
; SM70-NEXT: setp.eq.b32 %p8, %r10, 0;
; SM70-NEXT: prmt.b32 %r11, %r2, 0, 0x7770U;
; SM70-NEXT: setp.gt.u32 %p9, %r3, %r11;
; SM70-NEXT: prmt.b32 %r12, %r2, 0, 0x7771U;
; SM70-NEXT: setp.gt.u32 %p10, %r4, %r12;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7772U;
; SM70-NEXT: setp.gt.u32 %p11, %r5, %r13;
; SM70-NEXT: prmt.b32 %r14, %r2, 0, 0x7773U;
; SM70-NEXT: setp.gt.u32 %p12, %r6, %r14;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0x7770U;
; SM70-NEXT: setp.gt.u32 %p13, %r7, %r15;
; SM70-NEXT: prmt.b32 %r16, %r1, 0, 0x7771U;
; SM70-NEXT: setp.gt.u32 %p14, %r8, %r16;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0x7772U;
; SM70-NEXT: setp.gt.u32 %p15, %r9, %r17;
; SM70-NEXT: prmt.b32 %r18, %r1, 0, 0x7773U;
; SM70-NEXT: setp.gt.u32 %p16, %r10, %r18;
; SM70-NEXT: cvt.u16.u32 %rs17, %r11;
; SM70-NEXT: cvt.u16.u32 %rs18, %r12;
; SM70-NEXT: cvt.u16.u32 %rs19, %r13;
; SM70-NEXT: cvt.u16.u32 %rs20, %r14;
; SM70-NEXT: cvt.u16.u32 %rs21, %r15;
; SM70-NEXT: cvt.u16.u32 %rs22, %r16;
; SM70-NEXT: cvt.u16.u32 %rs23, %r17;
; SM70-NEXT: cvt.u16.u32 %rs24, %r18;
; SM70-NEXT: selp.b16 %rs25, %rs24, %rs16, %p16;
; SM70-NEXT: selp.b16 %rs26, %rs24, %rs25, %p8;
; SM70-NEXT: cvt.u32.u16 %r19, %rs26;
; SM70-NEXT: selp.b16 %rs27, %rs23, %rs14, %p15;
; SM70-NEXT: selp.b16 %rs28, %rs23, %rs27, %p7;
; SM70-NEXT: cvt.u32.u16 %r20, %rs28;
; SM70-NEXT: prmt.b32 %r21, %r20, %r19, 0x3340U;
; SM70-NEXT: selp.b16 %rs29, %rs22, %rs12, %p14;
; SM70-NEXT: selp.b16 %rs30, %rs22, %rs29, %p6;
; SM70-NEXT: cvt.u32.u16 %r22, %rs30;
; SM70-NEXT: selp.b16 %rs31, %rs21, %rs10, %p13;
; SM70-NEXT: selp.b16 %rs32, %rs21, %rs31, %p5;
; SM70-NEXT: cvt.u32.u16 %r23, %rs32;
; SM70-NEXT: prmt.b32 %r24, %r23, %r22, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r21, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r25;
; SM70-NEXT: selp.b16 %rs33, %rs20, %rs8, %p12;
; SM70-NEXT: selp.b16 %rs34, %rs20, %rs33, %p4;
; SM70-NEXT: cvt.u32.u16 %r26, %rs34;
; SM70-NEXT: selp.b16 %rs35, %rs19, %rs6, %p11;
; SM70-NEXT: selp.b16 %rs36, %rs19, %rs35, %p3;
; SM70-NEXT: cvt.u32.u16 %r27, %rs36;
; SM70-NEXT: prmt.b32 %r28, %r27, %r26, 0x3340U;
; SM70-NEXT: selp.b16 %rs37, %rs18, %rs4, %p10;
; SM70-NEXT: selp.b16 %rs38, %rs18, %rs37, %p2;
; SM70-NEXT: cvt.u32.u16 %r29, %rs38;
; SM70-NEXT: selp.b16 %rs39, %rs17, %rs2, %p9;
; SM70-NEXT: selp.b16 %rs40, %rs17, %rs39, %p1;
; SM70-NEXT: cvt.u32.u16 %r30, %rs40;
; SM70-NEXT: prmt.b32 %r31, %r30, %r29, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r28, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r32;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p17, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p17 bra $L__BB195_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @udec_wrap_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<6>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [udec_wrap_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [udec_wrap_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB196_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: add.s16 %rs3, %rs2, -1;
; SM70-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-NEXT: setp.gt.u16 %p2, %rs2, %rs1;
; SM70-NEXT: selp.b16 %rs4, %rs1, %rs3, %p2;
; SM70-NEXT: selp.b16 %rs5, %rs1, %rs4, %p1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs5;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p3, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p3 bra $L__BB196_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @udec_wrap_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<11>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [udec_wrap_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NEXT: $L__BB197_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-NEXT: add.s16 %rs3, %rs1, -1;
; SM70-NEXT: add.s16 %rs4, %rs2, -1;
; SM70-NEXT: setp.eq.b16 %p1, %rs1, 0;
; SM70-NEXT: setp.eq.b16 %p2, %rs2, 0;
; SM70-NEXT: setp.gt.u16 %p3, %rs1, %rs5;
; SM70-NEXT: setp.gt.u16 %p4, %rs2, %rs6;
; SM70-NEXT: selp.b16 %rs7, %rs6, %rs4, %p4;
; SM70-NEXT: selp.b16 %rs8, %rs6, %rs7, %p2;
; SM70-NEXT: selp.b16 %rs9, %rs5, %rs3, %p3;
; SM70-NEXT: selp.b16 %rs10, %rs5, %rs9, %p1;
; SM70-NEXT: mov.b32 %r3, {%rs10, %rs8};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p5 bra $L__BB197_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @udec_wrap_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<21>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [udec_wrap_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r2;
; SM70-NEXT: mov.b32 {%rs11, %rs12}, %r1;
; SM70-NEXT: $L__BB198_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r6;
; SM70-NEXT: add.s16 %rs3, %rs1, -1;
; SM70-NEXT: add.s16 %rs4, %rs2, -1;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r5;
; SM70-NEXT: add.s16 %rs7, %rs5, -1;
; SM70-NEXT: add.s16 %rs8, %rs6, -1;
; SM70-NEXT: setp.eq.b16 %p1, %rs1, 0;
; SM70-NEXT: setp.eq.b16 %p2, %rs2, 0;
; SM70-NEXT: setp.eq.b16 %p3, %rs5, 0;
; SM70-NEXT: setp.eq.b16 %p4, %rs6, 0;
; SM70-NEXT: setp.gt.u16 %p5, %rs1, %rs9;
; SM70-NEXT: setp.gt.u16 %p6, %rs2, %rs10;
; SM70-NEXT: setp.gt.u16 %p7, %rs5, %rs11;
; SM70-NEXT: setp.gt.u16 %p8, %rs6, %rs12;
; SM70-NEXT: selp.b16 %rs13, %rs12, %rs8, %p8;
; SM70-NEXT: selp.b16 %rs14, %rs12, %rs13, %p4;
; SM70-NEXT: selp.b16 %rs15, %rs11, %rs7, %p7;
; SM70-NEXT: selp.b16 %rs16, %rs11, %rs15, %p3;
; SM70-NEXT: mov.b32 %r3, {%rs16, %rs14};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: selp.b16 %rs17, %rs10, %rs4, %p6;
; SM70-NEXT: selp.b16 %rs18, %rs10, %rs17, %p2;
; SM70-NEXT: selp.b16 %rs19, %rs9, %rs3, %p5;
; SM70-NEXT: selp.b16 %rs20, %rs9, %rs19, %p1;
; SM70-NEXT: mov.b32 %r4, {%rs20, %rs18};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p9 bra $L__BB198_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @udec_wrap_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<19>;
; SM70-NEXT: .reg .b16 %rs<41>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [udec_wrap_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r2;
; SM70-NEXT: mov.b32 {%rs11, %rs12}, %r1;
; SM70-NEXT: $L__BB199_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r10;
; SM70-NEXT: add.s16 %rs3, %rs1, -1;
; SM70-NEXT: add.s16 %rs4, %rs2, -1;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r9;
; SM70-NEXT: add.s16 %rs7, %rs5, -1;
; SM70-NEXT: add.s16 %rs8, %rs6, -1;
; SM70-NEXT: setp.eq.b16 %p1, %rs1, 0;
; SM70-NEXT: setp.eq.b16 %p2, %rs2, 0;
; SM70-NEXT: setp.eq.b16 %p3, %rs5, 0;
; SM70-NEXT: setp.eq.b16 %p4, %rs6, 0;
; SM70-NEXT: setp.gt.u16 %p5, %rs1, %rs9;
; SM70-NEXT: setp.gt.u16 %p6, %rs2, %rs10;
; SM70-NEXT: setp.gt.u16 %p7, %rs5, %rs11;
; SM70-NEXT: setp.gt.u16 %p8, %rs6, %rs12;
; SM70-NEXT: selp.b16 %rs13, %rs12, %rs8, %p8;
; SM70-NEXT: selp.b16 %rs14, %rs12, %rs13, %p4;
; SM70-NEXT: selp.b16 %rs15, %rs11, %rs7, %p7;
; SM70-NEXT: selp.b16 %rs16, %rs11, %rs15, %p3;
; SM70-NEXT: mov.b32 %r5, {%rs16, %rs14};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: selp.b16 %rs17, %rs10, %rs4, %p6;
; SM70-NEXT: selp.b16 %rs18, %rs10, %rs17, %p2;
; SM70-NEXT: selp.b16 %rs19, %rs9, %rs3, %p5;
; SM70-NEXT: selp.b16 %rs20, %rs9, %rs19, %p1;
; SM70-NEXT: mov.b32 %r6, {%rs20, %rs18};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p9 bra $L__BB199_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: $L__BB199_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r12;
; SM70-NEXT: add.s16 %rs23, %rs21, -1;
; SM70-NEXT: add.s16 %rs24, %rs22, -1;
; SM70-NEXT: mov.b32 {%rs25, %rs26}, %r11;
; SM70-NEXT: add.s16 %rs27, %rs25, -1;
; SM70-NEXT: add.s16 %rs28, %rs26, -1;
; SM70-NEXT: setp.eq.b16 %p10, %rs21, 0;
; SM70-NEXT: setp.eq.b16 %p11, %rs22, 0;
; SM70-NEXT: setp.eq.b16 %p12, %rs25, 0;
; SM70-NEXT: setp.eq.b16 %p13, %rs26, 0;
; SM70-NEXT: mov.b32 {%rs29, %rs30}, %r4;
; SM70-NEXT: setp.gt.u16 %p14, %rs21, %rs29;
; SM70-NEXT: setp.gt.u16 %p15, %rs22, %rs30;
; SM70-NEXT: mov.b32 {%rs31, %rs32}, %r3;
; SM70-NEXT: setp.gt.u16 %p16, %rs25, %rs31;
; SM70-NEXT: setp.gt.u16 %p17, %rs26, %rs32;
; SM70-NEXT: selp.b16 %rs33, %rs32, %rs28, %p17;
; SM70-NEXT: selp.b16 %rs34, %rs32, %rs33, %p13;
; SM70-NEXT: selp.b16 %rs35, %rs31, %rs27, %p16;
; SM70-NEXT: selp.b16 %rs36, %rs31, %rs35, %p12;
; SM70-NEXT: mov.b32 %r7, {%rs36, %rs34};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: selp.b16 %rs37, %rs30, %rs24, %p15;
; SM70-NEXT: selp.b16 %rs38, %rs30, %rs37, %p11;
; SM70-NEXT: selp.b16 %rs39, %rs29, %rs23, %p14;
; SM70-NEXT: selp.b16 %rs40, %rs29, %rs39, %p10;
; SM70-NEXT: mov.b32 %r8, {%rs40, %rs38};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p18, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p18 bra $L__BB199_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @udec_wrap_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [udec_wrap_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @udec_wrap_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [udec_wrap_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @udec_wrap_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [udec_wrap_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @udec_wrap_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [udec_wrap_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [udec_wrap_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.dec.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @udec_wrap_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b64 %rd<8>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [udec_wrap_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [udec_wrap_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd7, [%rd3];
; SM70-NEXT: $L__BB204_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd4, %rd7, -1;
; SM70-NEXT: setp.eq.b64 %p1, %rd7, 0;
; SM70-NEXT: setp.gt.u64 %p2, %rd7, %rd1;
; SM70-NEXT: selp.b64 %rd5, %rd1, %rd4, %p2;
; SM70-NEXT: selp.b64 %rd6, %rd1, %rd5, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd7, %rd6;
; SM70-NEXT: setp.ne.b64 %p3, %rd2, %rd7;
; SM70-NEXT: mov.b64 %rd7, %rd2;
; SM70-NEXT: @%p3 bra $L__BB204_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @udec_wrap_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<7>;
; SM70-NEXT: .reg .b64 %rd<14>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [udec_wrap_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [udec_wrap_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd5];
; SM70-NEXT: $L__BB205_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd12;
; SM70-NEXT: add.s64 %rd6, %rd3, -1;
; SM70-NEXT: setp.eq.b64 %p1, %rd3, 0;
; SM70-NEXT: setp.gt.u64 %p2, %rd3, %rd2;
; SM70-NEXT: selp.b64 %rd7, %rd2, %rd6, %p2;
; SM70-NEXT: selp.b64 %rd8, %rd2, %rd7, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd5], %rd3, %rd8;
; SM70-NEXT: setp.ne.b64 %p3, %rd12, %rd3;
; SM70-NEXT: @%p3 bra $L__BB205_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd5+8];
; SM70-NEXT: $L__BB205_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd9, %rd13, -1;
; SM70-NEXT: setp.eq.b64 %p4, %rd13, 0;
; SM70-NEXT: setp.gt.u64 %p5, %rd13, %rd1;
; SM70-NEXT: selp.b64 %rd10, %rd1, %rd9, %p5;
; SM70-NEXT: selp.b64 %rd11, %rd1, %rd10, %p4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd13, %rd11;
; SM70-NEXT: setp.ne.b64 %p6, %rd4, %rd13;
; SM70-NEXT: mov.b64 %rd13, %rd4;
; SM70-NEXT: @%p6 bra $L__BB205_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd12, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @udec_wrap_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<13>;
; SM70-NEXT: .reg .b64 %rd<26>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [udec_wrap_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [udec_wrap_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [udec_wrap_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd9];
; SM70-NEXT: $L__BB206_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd22;
; SM70-NEXT: add.s64 %rd10, %rd4, -1;
; SM70-NEXT: setp.eq.b64 %p1, %rd4, 0;
; SM70-NEXT: setp.gt.u64 %p2, %rd4, %rd3;
; SM70-NEXT: selp.b64 %rd11, %rd3, %rd10, %p2;
; SM70-NEXT: selp.b64 %rd12, %rd3, %rd11, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd22, [%rd9], %rd4, %rd12;
; SM70-NEXT: setp.ne.b64 %p3, %rd22, %rd4;
; SM70-NEXT: @%p3 bra $L__BB206_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd23, [%rd9+8];
; SM70-NEXT: $L__BB206_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd23;
; SM70-NEXT: add.s64 %rd13, %rd5, -1;
; SM70-NEXT: setp.eq.b64 %p4, %rd5, 0;
; SM70-NEXT: setp.gt.u64 %p5, %rd5, %rd2;
; SM70-NEXT: selp.b64 %rd14, %rd2, %rd13, %p5;
; SM70-NEXT: selp.b64 %rd15, %rd2, %rd14, %p4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd9+8], %rd5, %rd15;
; SM70-NEXT: setp.ne.b64 %p6, %rd23, %rd5;
; SM70-NEXT: @%p6 bra $L__BB206_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd24, [%rd9+16];
; SM70-NEXT: $L__BB206_5: // %atomicrmw.start20
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd24;
; SM70-NEXT: add.s64 %rd16, %rd7, -1;
; SM70-NEXT: setp.eq.b64 %p7, %rd7, 0;
; SM70-NEXT: setp.gt.u64 %p8, %rd7, %rd1;
; SM70-NEXT: selp.b64 %rd17, %rd1, %rd16, %p8;
; SM70-NEXT: selp.b64 %rd18, %rd1, %rd17, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd24, [%rd9+16], %rd7, %rd18;
; SM70-NEXT: setp.ne.b64 %p9, %rd24, %rd7;
; SM70-NEXT: @%p9 bra $L__BB206_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end19
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd25, [%rd9+24];
; SM70-NEXT: $L__BB206_7: // %atomicrmw.start28
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd19, %rd25, -1;
; SM70-NEXT: setp.eq.b64 %p10, %rd25, 0;
; SM70-NEXT: setp.gt.u64 %p11, %rd25, %rd6;
; SM70-NEXT: selp.b64 %rd20, %rd6, %rd19, %p11;
; SM70-NEXT: selp.b64 %rd21, %rd6, %rd20, %p10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd25, %rd21;
; SM70-NEXT: setp.ne.b64 %p12, %rd8, %rd25;
; SM70-NEXT: mov.b64 %rd25, %rd8;
; SM70-NEXT: @%p12 bra $L__BB206_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end27
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd24, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd22, %rd23};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @udec_wrap_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: udec_wrap_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<25>;
; SM70-NEXT: .reg .b64 %rd<50>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [udec_wrap_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [udec_wrap_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [udec_wrap_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [udec_wrap_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [udec_wrap_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd42, [%rd17];
; SM70-NEXT: $L__BB207_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd42;
; SM70-NEXT: add.s64 %rd18, %rd5, -1;
; SM70-NEXT: setp.eq.b64 %p1, %rd5, 0;
; SM70-NEXT: setp.gt.u64 %p2, %rd5, %rd4;
; SM70-NEXT: selp.b64 %rd19, %rd4, %rd18, %p2;
; SM70-NEXT: selp.b64 %rd20, %rd4, %rd19, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd42, [%rd17], %rd5, %rd20;
; SM70-NEXT: setp.ne.b64 %p3, %rd42, %rd5;
; SM70-NEXT: @%p3 bra $L__BB207_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd43, [%rd17+8];
; SM70-NEXT: $L__BB207_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd43;
; SM70-NEXT: add.s64 %rd21, %rd6, -1;
; SM70-NEXT: setp.eq.b64 %p4, %rd6, 0;
; SM70-NEXT: setp.gt.u64 %p5, %rd6, %rd3;
; SM70-NEXT: selp.b64 %rd22, %rd3, %rd21, %p5;
; SM70-NEXT: selp.b64 %rd23, %rd3, %rd22, %p4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd43, [%rd17+8], %rd6, %rd23;
; SM70-NEXT: setp.ne.b64 %p6, %rd43, %rd6;
; SM70-NEXT: @%p6 bra $L__BB207_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd44, [%rd17+16];
; SM70-NEXT: $L__BB207_5: // %atomicrmw.start24
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd44;
; SM70-NEXT: add.s64 %rd24, %rd8, -1;
; SM70-NEXT: setp.eq.b64 %p7, %rd8, 0;
; SM70-NEXT: setp.gt.u64 %p8, %rd8, %rd2;
; SM70-NEXT: selp.b64 %rd25, %rd2, %rd24, %p8;
; SM70-NEXT: selp.b64 %rd26, %rd2, %rd25, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd44, [%rd17+16], %rd8, %rd26;
; SM70-NEXT: setp.ne.b64 %p9, %rd44, %rd8;
; SM70-NEXT: @%p9 bra $L__BB207_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end23
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd45, [%rd17+24];
; SM70-NEXT: $L__BB207_7: // %atomicrmw.start32
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd45;
; SM70-NEXT: add.s64 %rd27, %rd9, -1;
; SM70-NEXT: setp.eq.b64 %p10, %rd9, 0;
; SM70-NEXT: setp.gt.u64 %p11, %rd9, %rd7;
; SM70-NEXT: selp.b64 %rd28, %rd7, %rd27, %p11;
; SM70-NEXT: selp.b64 %rd29, %rd7, %rd28, %p10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd45, [%rd17+24], %rd9, %rd29;
; SM70-NEXT: setp.ne.b64 %p12, %rd45, %rd9;
; SM70-NEXT: @%p12 bra $L__BB207_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end31
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd46, [%rd17+32];
; SM70-NEXT: $L__BB207_9: // %atomicrmw.start48
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd46;
; SM70-NEXT: add.s64 %rd30, %rd12, -1;
; SM70-NEXT: setp.eq.b64 %p13, %rd12, 0;
; SM70-NEXT: setp.gt.u64 %p14, %rd12, %rd1;
; SM70-NEXT: selp.b64 %rd31, %rd1, %rd30, %p14;
; SM70-NEXT: selp.b64 %rd32, %rd1, %rd31, %p13;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd46, [%rd17+32], %rd12, %rd32;
; SM70-NEXT: setp.ne.b64 %p15, %rd46, %rd12;
; SM70-NEXT: @%p15 bra $L__BB207_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end47
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd47, [%rd17+40];
; SM70-NEXT: $L__BB207_11: // %atomicrmw.start56
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd47;
; SM70-NEXT: add.s64 %rd33, %rd13, -1;
; SM70-NEXT: setp.eq.b64 %p16, %rd13, 0;
; SM70-NEXT: setp.gt.u64 %p17, %rd13, %rd11;
; SM70-NEXT: selp.b64 %rd34, %rd11, %rd33, %p17;
; SM70-NEXT: selp.b64 %rd35, %rd11, %rd34, %p16;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd47, [%rd17+40], %rd13, %rd35;
; SM70-NEXT: setp.ne.b64 %p18, %rd47, %rd13;
; SM70-NEXT: @%p18 bra $L__BB207_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end55
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd48, [%rd17+48];
; SM70-NEXT: $L__BB207_13: // %atomicrmw.start68
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd48;
; SM70-NEXT: add.s64 %rd36, %rd15, -1;
; SM70-NEXT: setp.eq.b64 %p19, %rd15, 0;
; SM70-NEXT: setp.gt.u64 %p20, %rd15, %rd10;
; SM70-NEXT: selp.b64 %rd37, %rd10, %rd36, %p20;
; SM70-NEXT: selp.b64 %rd38, %rd10, %rd37, %p19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd48, [%rd17+48], %rd15, %rd38;
; SM70-NEXT: setp.ne.b64 %p21, %rd48, %rd15;
; SM70-NEXT: @%p21 bra $L__BB207_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end67
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd49, [%rd17+56];
; SM70-NEXT: $L__BB207_15: // %atomicrmw.start76
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s64 %rd39, %rd49, -1;
; SM70-NEXT: setp.eq.b64 %p22, %rd49, 0;
; SM70-NEXT: setp.gt.u64 %p23, %rd49, %rd14;
; SM70-NEXT: selp.b64 %rd40, %rd14, %rd39, %p23;
; SM70-NEXT: selp.b64 %rd41, %rd14, %rd40, %p22;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd49, %rd41;
; SM70-NEXT: setp.ne.b64 %p24, %rd16, %rd49;
; SM70-NEXT: mov.b64 %rd49, %rd16;
; SM70-NEXT: @%p24 bra $L__BB207_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end75
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd48, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd46, %rd47};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd42, %rd43};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd44, %rd45};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise udec_wrap ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @usub_cond_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: usub_cond_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<6>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b8 %rs1, [usub_cond_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd2, [usub_cond_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB208_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: and.b16 %rs3, %rs2, 255;
; SM70-NEXT: setp.ge.u16 %p1, %rs3, %rs1;
; SM70-NEXT: sub.s16 %rs4, %rs2, %rs1;
; SM70-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs5;
; SM70-NEXT: and.b32 %r9, %r8, 255;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p2, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p2 bra $L__BB208_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @usub_cond_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: usub_cond_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<15>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [usub_cond_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [usub_cond_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs6, %rs7}, %r4;
; SM70-NEXT: $L__BB209_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: and.b16 %rs4, %rs3, 255;
; SM70-NEXT: shr.u16 %rs5, %rs3, 8;
; SM70-NEXT: setp.ge.u16 %p1, %rs5, %rs7;
; SM70-NEXT: setp.ge.u16 %p2, %rs4, %rs6;
; SM70-NEXT: sub.s16 %rs8, %rs5, %rs7;
; SM70-NEXT: sub.s16 %rs9, %rs3, %rs6;
; SM70-NEXT: selp.b16 %rs10, %rs9, %rs3, %p2;
; SM70-NEXT: selp.b16 %rs11, %rs8, %rs5, %p1;
; SM70-NEXT: shl.b16 %rs12, %rs11, 8;
; SM70-NEXT: and.b16 %rs13, %rs10, 255;
; SM70-NEXT: or.b16 %rs14, %rs13, %rs12;
; SM70-NEXT: cvt.u32.u16 %r9, %rs14;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p3, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p3 bra $L__BB209_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @usub_cond_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: usub_cond_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<23>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [usub_cond_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r22, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs3, %r5;
; SM70-NEXT: cvt.u16.u32 %rs4, %r3;
; SM70-NEXT: $L__BB210_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r22, 0, 0x7770U;
; SM70-NEXT: setp.ge.u32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r6, %r22, 0, 0x7771U;
; SM70-NEXT: setp.ge.u32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r8, %r22, 0, 0x7772U;
; SM70-NEXT: setp.ge.u32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r10, %r22, 0, 0x7773U;
; SM70-NEXT: setp.ge.u32 %p4, %r10, %r9;
; SM70-NEXT: cvt.u16.u32 %rs1, %r9;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: cvt.u16.u32 %rs5, %r4;
; SM70-NEXT: sub.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u16.u32 %rs7, %r6;
; SM70-NEXT: sub.s16 %rs8, %rs7, %rs3;
; SM70-NEXT: cvt.u16.u32 %rs9, %r8;
; SM70-NEXT: sub.s16 %rs10, %rs9, %rs2;
; SM70-NEXT: cvt.u16.u32 %rs11, %r10;
; SM70-NEXT: sub.s16 %rs12, %rs11, %rs1;
; SM70-NEXT: cvt.u32.u16 %r11, %rs12;
; SM70-NEXT: selp.b32 %r12, %r11, %r10, %p4;
; SM70-NEXT: cvt.u32.u16 %r13, %rs10;
; SM70-NEXT: selp.b32 %r14, %r13, %r8, %p3;
; SM70-NEXT: prmt.b32 %r15, %r14, %r12, 0x3340U;
; SM70-NEXT: cvt.u32.u16 %r16, %rs8;
; SM70-NEXT: selp.b32 %r17, %r16, %r6, %p2;
; SM70-NEXT: cvt.u32.u16 %r18, %rs6;
; SM70-NEXT: selp.b32 %r19, %r18, %r4, %p1;
; SM70-NEXT: prmt.b32 %r20, %r19, %r17, 0x3340U;
; SM70-NEXT: prmt.b32 %r21, %r20, %r15, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r22, %r21;
; SM70-NEXT: setp.ne.b32 %p5, %r1, %r22;
; SM70-NEXT: mov.b32 %r22, %r1;
; SM70-NEXT: @%p5 bra $L__BB210_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @usub_cond_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: usub_cond_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<10>;
; SM70-NEXT: .reg .b16 %rs<33>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [usub_cond_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB211_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r33;
; SM70-NEXT: cvt.u64.u32 %rd4, %r34;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r4, %r34, 0, 0x7770U;
; SM70-NEXT: setp.ge.u32 %p1, %r4, %r3;
; SM70-NEXT: prmt.b32 %r5, %r2, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r6, %r34, 0, 0x7771U;
; SM70-NEXT: setp.ge.u32 %p2, %r6, %r5;
; SM70-NEXT: prmt.b32 %r7, %r2, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r8, %r34, 0, 0x7772U;
; SM70-NEXT: setp.ge.u32 %p3, %r8, %r7;
; SM70-NEXT: prmt.b32 %r9, %r2, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r10, %r34, 0, 0x7773U;
; SM70-NEXT: setp.ge.u32 %p4, %r10, %r9;
; SM70-NEXT: prmt.b32 %r11, %r1, 0, 0x7770U;
; SM70-NEXT: prmt.b32 %r12, %r33, 0, 0x7770U;
; SM70-NEXT: setp.ge.u32 %p5, %r12, %r11;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7771U;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7771U;
; SM70-NEXT: setp.ge.u32 %p6, %r14, %r13;
; SM70-NEXT: prmt.b32 %r15, %r1, 0, 0x7772U;
; SM70-NEXT: prmt.b32 %r16, %r33, 0, 0x7772U;
; SM70-NEXT: setp.ge.u32 %p7, %r16, %r15;
; SM70-NEXT: prmt.b32 %r17, %r1, 0, 0x7773U;
; SM70-NEXT: prmt.b32 %r18, %r33, 0, 0x7773U;
; SM70-NEXT: setp.ge.u32 %p8, %r18, %r17;
; SM70-NEXT: cvt.u16.u32 %rs1, %r17;
; SM70-NEXT: cvt.u16.u32 %rs2, %r18;
; SM70-NEXT: cvt.u16.u32 %rs3, %r15;
; SM70-NEXT: cvt.u16.u32 %rs4, %r16;
; SM70-NEXT: cvt.u16.u32 %rs5, %r13;
; SM70-NEXT: cvt.u16.u32 %rs6, %r14;
; SM70-NEXT: cvt.u16.u32 %rs7, %r11;
; SM70-NEXT: cvt.u16.u32 %rs8, %r12;
; SM70-NEXT: cvt.u16.u32 %rs9, %r9;
; SM70-NEXT: cvt.u16.u32 %rs10, %r10;
; SM70-NEXT: cvt.u16.u32 %rs11, %r7;
; SM70-NEXT: cvt.u16.u32 %rs12, %r8;
; SM70-NEXT: cvt.u16.u32 %rs13, %r5;
; SM70-NEXT: cvt.u16.u32 %rs14, %r6;
; SM70-NEXT: cvt.u16.u32 %rs15, %r3;
; SM70-NEXT: cvt.u16.u32 %rs16, %r4;
; SM70-NEXT: sub.s16 %rs17, %rs16, %rs15;
; SM70-NEXT: sub.s16 %rs18, %rs14, %rs13;
; SM70-NEXT: sub.s16 %rs19, %rs12, %rs11;
; SM70-NEXT: sub.s16 %rs20, %rs10, %rs9;
; SM70-NEXT: sub.s16 %rs21, %rs8, %rs7;
; SM70-NEXT: sub.s16 %rs22, %rs6, %rs5;
; SM70-NEXT: sub.s16 %rs23, %rs4, %rs3;
; SM70-NEXT: sub.s16 %rs24, %rs2, %rs1;
; SM70-NEXT: selp.b16 %rs25, %rs24, %rs2, %p8;
; SM70-NEXT: cvt.u32.u16 %r19, %rs25;
; SM70-NEXT: selp.b16 %rs26, %rs23, %rs4, %p7;
; SM70-NEXT: cvt.u32.u16 %r20, %rs26;
; SM70-NEXT: prmt.b32 %r21, %r20, %r19, 0x3340U;
; SM70-NEXT: selp.b16 %rs27, %rs22, %rs6, %p6;
; SM70-NEXT: cvt.u32.u16 %r22, %rs27;
; SM70-NEXT: selp.b16 %rs28, %rs21, %rs8, %p5;
; SM70-NEXT: cvt.u32.u16 %r23, %rs28;
; SM70-NEXT: prmt.b32 %r24, %r23, %r22, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r24, %r21, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd7, %r25;
; SM70-NEXT: selp.b16 %rs29, %rs20, %rs10, %p4;
; SM70-NEXT: cvt.u32.u16 %r26, %rs29;
; SM70-NEXT: selp.b16 %rs30, %rs19, %rs12, %p3;
; SM70-NEXT: cvt.u32.u16 %r27, %rs30;
; SM70-NEXT: prmt.b32 %r28, %r27, %r26, 0x3340U;
; SM70-NEXT: selp.b16 %rs31, %rs18, %rs14, %p2;
; SM70-NEXT: cvt.u32.u16 %r29, %rs31;
; SM70-NEXT: selp.b16 %rs32, %rs17, %rs16, %p1;
; SM70-NEXT: cvt.u32.u16 %r30, %rs32;
; SM70-NEXT: prmt.b32 %r31, %r30, %r29, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r28, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd8, %r32;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p9, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p9 bra $L__BB211_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @usub_cond_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: usub_cond_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b16 %rs<5>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [usub_cond_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [usub_cond_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB212_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: setp.ge.u16 %p1, %rs2, %rs1;
; SM70-NEXT: sub.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: selp.b16 %rs4, %rs3, %rs2, %p1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs4;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p2, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p2 bra $L__BB212_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @usub_cond_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: usub_cond_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<9>;
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [usub_cond_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB213_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NEXT: setp.ge.u16 %p1, %rs3, %rs1;
; SM70-NEXT: setp.ge.u16 %p2, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs5, %rs3, %rs1;
; SM70-NEXT: sub.s16 %rs6, %rs4, %rs2;
; SM70-NEXT: selp.b16 %rs7, %rs6, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs8, %rs5, %rs3, %p1;
; SM70-NEXT: mov.b32 %r3, {%rs8, %rs7};
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NEXT: setp.ne.b32 %p3, %r1, %r4;
; SM70-NEXT: mov.b32 %r4, %r1;
; SM70-NEXT: @%p3 bra $L__BB213_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @usub_cond_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: usub_cond_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [usub_cond_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r1;
; SM70-NEXT: $L__BB214_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r6;
; SM70-NEXT: setp.ge.u16 %p1, %rs3, %rs1;
; SM70-NEXT: setp.ge.u16 %p2, %rs4, %rs2;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r5;
; SM70-NEXT: setp.ge.u16 %p3, %rs7, %rs5;
; SM70-NEXT: setp.ge.u16 %p4, %rs8, %rs6;
; SM70-NEXT: sub.s16 %rs9, %rs3, %rs1;
; SM70-NEXT: sub.s16 %rs10, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs11, %rs7, %rs5;
; SM70-NEXT: sub.s16 %rs12, %rs8, %rs6;
; SM70-NEXT: selp.b16 %rs13, %rs12, %rs8, %p4;
; SM70-NEXT: selp.b16 %rs14, %rs11, %rs7, %p3;
; SM70-NEXT: mov.b32 %r3, {%rs14, %rs13};
; SM70-NEXT: cvt.u64.u32 %rd7, %r3;
; SM70-NEXT: selp.b16 %rs15, %rs10, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs16, %rs9, %rs3, %p1;
; SM70-NEXT: mov.b32 %r4, {%rs16, %rs15};
; SM70-NEXT: cvt.u64.u32 %rd8, %r4;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p5, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NEXT: @%p5 bra $L__BB214_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @usub_cond_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: usub_cond_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<11>;
; SM70-NEXT: .reg .b16 %rs<33>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [usub_cond_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r1;
; SM70-NEXT: $L__BB215_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-NEXT: setp.ge.u16 %p1, %rs3, %rs1;
; SM70-NEXT: setp.ge.u16 %p2, %rs4, %rs2;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r9;
; SM70-NEXT: setp.ge.u16 %p3, %rs7, %rs5;
; SM70-NEXT: setp.ge.u16 %p4, %rs8, %rs6;
; SM70-NEXT: sub.s16 %rs9, %rs3, %rs1;
; SM70-NEXT: sub.s16 %rs10, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs11, %rs7, %rs5;
; SM70-NEXT: sub.s16 %rs12, %rs8, %rs6;
; SM70-NEXT: selp.b16 %rs13, %rs12, %rs8, %p4;
; SM70-NEXT: selp.b16 %rs14, %rs11, %rs7, %p3;
; SM70-NEXT: mov.b32 %r5, {%rs14, %rs13};
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: selp.b16 %rs15, %rs10, %rs4, %p2;
; SM70-NEXT: selp.b16 %rs16, %rs9, %rs3, %p1;
; SM70-NEXT: mov.b32 %r6, {%rs16, %rs15};
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p5, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NEXT: @%p5 bra $L__BB215_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NEXT: $L__BB215_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: mov.b32 {%rs17, %rs18}, %r4;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r12;
; SM70-NEXT: setp.ge.u16 %p6, %rs19, %rs17;
; SM70-NEXT: setp.ge.u16 %p7, %rs20, %rs18;
; SM70-NEXT: mov.b32 {%rs21, %rs22}, %r3;
; SM70-NEXT: mov.b32 {%rs23, %rs24}, %r11;
; SM70-NEXT: setp.ge.u16 %p8, %rs23, %rs21;
; SM70-NEXT: setp.ge.u16 %p9, %rs24, %rs22;
; SM70-NEXT: sub.s16 %rs25, %rs19, %rs17;
; SM70-NEXT: sub.s16 %rs26, %rs20, %rs18;
; SM70-NEXT: sub.s16 %rs27, %rs23, %rs21;
; SM70-NEXT: sub.s16 %rs28, %rs24, %rs22;
; SM70-NEXT: selp.b16 %rs29, %rs28, %rs24, %p9;
; SM70-NEXT: selp.b16 %rs30, %rs27, %rs23, %p8;
; SM70-NEXT: mov.b32 %r7, {%rs30, %rs29};
; SM70-NEXT: cvt.u64.u32 %rd17, %r7;
; SM70-NEXT: selp.b16 %rs31, %rs26, %rs20, %p7;
; SM70-NEXT: selp.b16 %rs32, %rs25, %rs19, %p6;
; SM70-NEXT: mov.b32 %r8, {%rs32, %rs31};
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p10, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NEXT: @%p10 bra $L__BB215_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @usub_cond_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: usub_cond_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [usub_cond_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB216_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.ge.u32 %p1, %r5, %r1;
; SM70-NEXT: sub.s32 %r3, %r5, %r1;
; SM70-NEXT: selp.b32 %r4, %r3, %r5, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p2, %r2, %r5;
; SM70-NEXT: mov.b32 %r5, %r2;
; SM70-NEXT: @%p2 bra $L__BB216_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @usub_cond_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: usub_cond_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [usub_cond_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB217_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r7;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: setp.ge.u32 %p1, %r8, %r2;
; SM70-NEXT: setp.ge.u32 %p2, %r7, %r1;
; SM70-NEXT: sub.s32 %r3, %r8, %r2;
; SM70-NEXT: sub.s32 %r4, %r7, %r1;
; SM70-NEXT: selp.b32 %r5, %r4, %r7, %p2;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: selp.b32 %r6, %r3, %r8, %p1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p3, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p3 bra $L__BB217_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @usub_cond_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: usub_cond_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<7>;
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [usub_cond_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r14}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r13, %rd2;
; SM70-NEXT: $L__BB218_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-NEXT: cvt.u64.u32 %rd4, %r14;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: setp.ge.u32 %p1, %r14, %r2;
; SM70-NEXT: setp.ge.u32 %p2, %r13, %r1;
; SM70-NEXT: sub.s32 %r5, %r14, %r2;
; SM70-NEXT: sub.s32 %r6, %r13, %r1;
; SM70-NEXT: selp.b32 %r7, %r6, %r13, %p2;
; SM70-NEXT: cvt.u64.u32 %rd7, %r7;
; SM70-NEXT: selp.b32 %r8, %r5, %r14, %p1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r8;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p3, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r14}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r13, %rd11;
; SM70-NEXT: @%p3 bra $L__BB218_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r16}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r15, %rd12;
; SM70-NEXT: $L__BB218_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r15;
; SM70-NEXT: cvt.u64.u32 %rd14, %r16;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: setp.ge.u32 %p4, %r16, %r4;
; SM70-NEXT: setp.ge.u32 %p5, %r15, %r3;
; SM70-NEXT: sub.s32 %r9, %r16, %r4;
; SM70-NEXT: sub.s32 %r10, %r15, %r3;
; SM70-NEXT: selp.b32 %r11, %r10, %r15, %p5;
; SM70-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NEXT: selp.b32 %r12, %r9, %r16, %p4;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p6, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r16}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r15, %rd21;
; SM70-NEXT: @%p6 bra $L__BB218_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r13, %r14, %r15, %r16};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @usub_cond_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: usub_cond_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<13>;
; SM70-NEXT: .reg .b32 %r<33>;
; SM70-NEXT: .reg .b64 %rd<42>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [usub_cond_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [usub_cond_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r26}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r25, %rd2;
; SM70-NEXT: $L__BB219_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NEXT: cvt.u64.u32 %rd4, %r26;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: setp.ge.u32 %p1, %r26, %r6;
; SM70-NEXT: setp.ge.u32 %p2, %r25, %r5;
; SM70-NEXT: sub.s32 %r9, %r26, %r6;
; SM70-NEXT: sub.s32 %r10, %r25, %r5;
; SM70-NEXT: selp.b32 %r11, %r10, %r25, %p2;
; SM70-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-NEXT: selp.b32 %r12, %r9, %r26, %p1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p3, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r26}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r25, %rd11;
; SM70-NEXT: @%p3 bra $L__BB219_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r28}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r27, %rd12;
; SM70-NEXT: $L__BB219_3: // %atomicrmw.start6
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd13, %r27;
; SM70-NEXT: cvt.u64.u32 %rd14, %r28;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: setp.ge.u32 %p4, %r28, %r8;
; SM70-NEXT: setp.ge.u32 %p5, %r27, %r7;
; SM70-NEXT: sub.s32 %r13, %r28, %r8;
; SM70-NEXT: sub.s32 %r14, %r27, %r7;
; SM70-NEXT: selp.b32 %r15, %r14, %r27, %p5;
; SM70-NEXT: cvt.u64.u32 %rd17, %r15;
; SM70-NEXT: selp.b32 %r16, %r13, %r28, %p4;
; SM70-NEXT: cvt.u64.u32 %rd18, %r16;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd16, %rd20;
; SM70-NEXT: setp.ne.b64 %p6, %rd21, %rd16;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r28}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r27, %rd21;
; SM70-NEXT: @%p6 bra $L__BB219_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r30}, %rd22; }
; SM70-NEXT: cvt.u32.u64 %r29, %rd22;
; SM70-NEXT: $L__BB219_5: // %atomicrmw.start16
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd23, %r29;
; SM70-NEXT: cvt.u64.u32 %rd24, %r30;
; SM70-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NEXT: setp.ge.u32 %p7, %r30, %r2;
; SM70-NEXT: setp.ge.u32 %p8, %r29, %r1;
; SM70-NEXT: sub.s32 %r17, %r30, %r2;
; SM70-NEXT: sub.s32 %r18, %r29, %r1;
; SM70-NEXT: selp.b32 %r19, %r18, %r29, %p8;
; SM70-NEXT: cvt.u64.u32 %rd27, %r19;
; SM70-NEXT: selp.b32 %r20, %r17, %r30, %p7;
; SM70-NEXT: cvt.u64.u32 %rd28, %r20;
; SM70-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd26, %rd30;
; SM70-NEXT: setp.ne.b64 %p9, %rd31, %rd26;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r30}, %rd31; }
; SM70-NEXT: cvt.u32.u64 %r29, %rd31;
; SM70-NEXT: @%p9 bra $L__BB219_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r32}, %rd32; }
; SM70-NEXT: cvt.u32.u64 %r31, %rd32;
; SM70-NEXT: $L__BB219_7: // %atomicrmw.start22
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd33, %r31;
; SM70-NEXT: cvt.u64.u32 %rd34, %r32;
; SM70-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NEXT: setp.ge.u32 %p10, %r32, %r4;
; SM70-NEXT: setp.ge.u32 %p11, %r31, %r3;
; SM70-NEXT: sub.s32 %r21, %r32, %r4;
; SM70-NEXT: sub.s32 %r22, %r31, %r3;
; SM70-NEXT: selp.b32 %r23, %r22, %r31, %p11;
; SM70-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NEXT: selp.b32 %r24, %r21, %r32, %p10;
; SM70-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd36, %rd40;
; SM70-NEXT: setp.ne.b64 %p12, %rd41, %rd36;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r32}, %rd41; }
; SM70-NEXT: cvt.u32.u64 %r31, %rd41;
; SM70-NEXT: @%p12 bra $L__BB219_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r29, %r30, %r31, %r32};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r25, %r26, %r27, %r28};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @usub_cond_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: usub_cond_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b64 %rd<7>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [usub_cond_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [usub_cond_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd6, [%rd3];
; SM70-NEXT: $L__BB220_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.ge.u64 %p1, %rd6, %rd1;
; SM70-NEXT: sub.s64 %rd4, %rd6, %rd1;
; SM70-NEXT: selp.b64 %rd5, %rd4, %rd6, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd6, %rd5;
; SM70-NEXT: setp.ne.b64 %p2, %rd2, %rd6;
; SM70-NEXT: mov.b64 %rd6, %rd2;
; SM70-NEXT: @%p2 bra $L__BB220_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @usub_cond_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: usub_cond_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [usub_cond_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [usub_cond_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd10, [%rd5];
; SM70-NEXT: $L__BB221_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd10;
; SM70-NEXT: setp.ge.u64 %p1, %rd3, %rd2;
; SM70-NEXT: sub.s64 %rd6, %rd3, %rd2;
; SM70-NEXT: selp.b64 %rd7, %rd6, %rd3, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd10, [%rd5], %rd3, %rd7;
; SM70-NEXT: setp.ne.b64 %p2, %rd10, %rd3;
; SM70-NEXT: @%p2 bra $L__BB221_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd11, [%rd5+8];
; SM70-NEXT: $L__BB221_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.ge.u64 %p3, %rd11, %rd1;
; SM70-NEXT: sub.s64 %rd8, %rd11, %rd1;
; SM70-NEXT: selp.b64 %rd9, %rd8, %rd11, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd11, %rd9;
; SM70-NEXT: setp.ne.b64 %p4, %rd4, %rd11;
; SM70-NEXT: mov.b64 %rd11, %rd4;
; SM70-NEXT: @%p4 bra $L__BB221_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @usub_cond_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: usub_cond_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [usub_cond_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [usub_cond_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [usub_cond_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd18, [%rd9];
; SM70-NEXT: $L__BB222_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd18;
; SM70-NEXT: setp.ge.u64 %p1, %rd4, %rd3;
; SM70-NEXT: sub.s64 %rd10, %rd4, %rd3;
; SM70-NEXT: selp.b64 %rd11, %rd10, %rd4, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd18, [%rd9], %rd4, %rd11;
; SM70-NEXT: setp.ne.b64 %p2, %rd18, %rd4;
; SM70-NEXT: @%p2 bra $L__BB222_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd19, [%rd9+8];
; SM70-NEXT: $L__BB222_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd19;
; SM70-NEXT: setp.ge.u64 %p3, %rd5, %rd2;
; SM70-NEXT: sub.s64 %rd12, %rd5, %rd2;
; SM70-NEXT: selp.b64 %rd13, %rd12, %rd5, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd19, [%rd9+8], %rd5, %rd13;
; SM70-NEXT: setp.ne.b64 %p4, %rd19, %rd5;
; SM70-NEXT: @%p4 bra $L__BB222_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd20, [%rd9+16];
; SM70-NEXT: $L__BB222_5: // %atomicrmw.start20
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd20;
; SM70-NEXT: setp.ge.u64 %p5, %rd7, %rd1;
; SM70-NEXT: sub.s64 %rd14, %rd7, %rd1;
; SM70-NEXT: selp.b64 %rd15, %rd14, %rd7, %p5;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd20, [%rd9+16], %rd7, %rd15;
; SM70-NEXT: setp.ne.b64 %p6, %rd20, %rd7;
; SM70-NEXT: @%p6 bra $L__BB222_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end19
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd21, [%rd9+24];
; SM70-NEXT: $L__BB222_7: // %atomicrmw.start28
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.ge.u64 %p7, %rd21, %rd6;
; SM70-NEXT: sub.s64 %rd16, %rd21, %rd6;
; SM70-NEXT: selp.b64 %rd17, %rd16, %rd21, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd21, %rd17;
; SM70-NEXT: setp.ne.b64 %p8, %rd8, %rd21;
; SM70-NEXT: mov.b64 %rd21, %rd8;
; SM70-NEXT: @%p8 bra $L__BB222_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end27
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd20, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd18, %rd19};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @usub_cond_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: usub_cond_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<17>;
; SM70-NEXT: .reg .b64 %rd<42>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [usub_cond_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [usub_cond_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [usub_cond_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [usub_cond_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [usub_cond_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd34, [%rd17];
; SM70-NEXT: $L__BB223_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd34;
; SM70-NEXT: setp.ge.u64 %p1, %rd5, %rd4;
; SM70-NEXT: sub.s64 %rd18, %rd5, %rd4;
; SM70-NEXT: selp.b64 %rd19, %rd18, %rd5, %p1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd17], %rd5, %rd19;
; SM70-NEXT: setp.ne.b64 %p2, %rd34, %rd5;
; SM70-NEXT: @%p2 bra $L__BB223_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd17+8];
; SM70-NEXT: $L__BB223_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd35;
; SM70-NEXT: setp.ge.u64 %p3, %rd6, %rd3;
; SM70-NEXT: sub.s64 %rd20, %rd6, %rd3;
; SM70-NEXT: selp.b64 %rd21, %rd20, %rd6, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd35, [%rd17+8], %rd6, %rd21;
; SM70-NEXT: setp.ne.b64 %p4, %rd35, %rd6;
; SM70-NEXT: @%p4 bra $L__BB223_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd36, [%rd17+16];
; SM70-NEXT: $L__BB223_5: // %atomicrmw.start24
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd36;
; SM70-NEXT: setp.ge.u64 %p5, %rd8, %rd2;
; SM70-NEXT: sub.s64 %rd22, %rd8, %rd2;
; SM70-NEXT: selp.b64 %rd23, %rd22, %rd8, %p5;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd36, [%rd17+16], %rd8, %rd23;
; SM70-NEXT: setp.ne.b64 %p6, %rd36, %rd8;
; SM70-NEXT: @%p6 bra $L__BB223_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end23
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd37, [%rd17+24];
; SM70-NEXT: $L__BB223_7: // %atomicrmw.start32
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd37;
; SM70-NEXT: setp.ge.u64 %p7, %rd9, %rd7;
; SM70-NEXT: sub.s64 %rd24, %rd9, %rd7;
; SM70-NEXT: selp.b64 %rd25, %rd24, %rd9, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd37, [%rd17+24], %rd9, %rd25;
; SM70-NEXT: setp.ne.b64 %p8, %rd37, %rd9;
; SM70-NEXT: @%p8 bra $L__BB223_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end31
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd38, [%rd17+32];
; SM70-NEXT: $L__BB223_9: // %atomicrmw.start48
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd38;
; SM70-NEXT: setp.ge.u64 %p9, %rd12, %rd1;
; SM70-NEXT: sub.s64 %rd26, %rd12, %rd1;
; SM70-NEXT: selp.b64 %rd27, %rd26, %rd12, %p9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd38, [%rd17+32], %rd12, %rd27;
; SM70-NEXT: setp.ne.b64 %p10, %rd38, %rd12;
; SM70-NEXT: @%p10 bra $L__BB223_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end47
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd39, [%rd17+40];
; SM70-NEXT: $L__BB223_11: // %atomicrmw.start56
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd39;
; SM70-NEXT: setp.ge.u64 %p11, %rd13, %rd11;
; SM70-NEXT: sub.s64 %rd28, %rd13, %rd11;
; SM70-NEXT: selp.b64 %rd29, %rd28, %rd13, %p11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd39, [%rd17+40], %rd13, %rd29;
; SM70-NEXT: setp.ne.b64 %p12, %rd39, %rd13;
; SM70-NEXT: @%p12 bra $L__BB223_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end55
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd40, [%rd17+48];
; SM70-NEXT: $L__BB223_13: // %atomicrmw.start68
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd40;
; SM70-NEXT: setp.ge.u64 %p13, %rd15, %rd10;
; SM70-NEXT: sub.s64 %rd30, %rd15, %rd10;
; SM70-NEXT: selp.b64 %rd31, %rd30, %rd15, %p13;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd40, [%rd17+48], %rd15, %rd31;
; SM70-NEXT: setp.ne.b64 %p14, %rd40, %rd15;
; SM70-NEXT: @%p14 bra $L__BB223_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end67
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd41, [%rd17+56];
; SM70-NEXT: $L__BB223_15: // %atomicrmw.start76
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.ge.u64 %p15, %rd41, %rd14;
; SM70-NEXT: sub.s64 %rd32, %rd41, %rd14;
; SM70-NEXT: selp.b64 %rd33, %rd32, %rd41, %p15;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd41, %rd33;
; SM70-NEXT: setp.ne.b64 %p16, %rd16, %rd41;
; SM70-NEXT: mov.b64 %rd41, %rd16;
; SM70-NEXT: @%p16 bra $L__BB223_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end75
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd40, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd38, %rd39};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd34, %rd35};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd36, %rd37};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_cond ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x i8> @usub_sat_acq_rel_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: usub_sat_acq_rel_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<6>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b8 %rs1, [usub_sat_acq_rel_v1i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd2, [usub_sat_acq_rel_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 255, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB224_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: and.b16 %rs3, %rs2, 255;
; SM70-NEXT: max.u16 %rs4, %rs3, %rs1;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs5;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB224_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acq_rel
ret <1 x i8> %retval
}
define <2 x i8> @usub_sat_acq_rel_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: usub_sat_acq_rel_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<21>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [usub_sat_acq_rel_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [usub_sat_acq_rel_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r20, [%rd1];
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r4;
; SM70-NEXT: $L__BB225_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r20, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: mov.b32 %r9, {%rs3, %rs4};
; SM70-NEXT: and.b32 %r10, %r9, 16711935;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r10;
; SM70-NEXT: sub.s16 %rs9, %rs6, %rs8;
; SM70-NEXT: setp.gt.u16 %p1, %rs9, %rs6;
; SM70-NEXT: selp.b16 %rs10, -1, 0, %p1;
; SM70-NEXT: sub.s16 %rs11, %rs5, %rs7;
; SM70-NEXT: setp.gt.u16 %p2, %rs11, %rs5;
; SM70-NEXT: selp.b16 %rs12, -1, 0, %p2;
; SM70-NEXT: mov.b32 %r11, {%rs12, %rs10};
; SM70-NEXT: xor.b32 %r12, %r11, -1;
; SM70-NEXT: mov.b32 %r13, {%rs11, %rs9};
; SM70-NEXT: and.b32 %r14, %r13, %r12;
; SM70-NEXT: mov.b32 {%rs13, %rs14}, %r14;
; SM70-NEXT: shl.b16 %rs15, %rs14, 8;
; SM70-NEXT: or.b16 %rs16, %rs13, %rs15;
; SM70-NEXT: cvt.u32.u16 %r15, %rs16;
; SM70-NEXT: shl.b32 %r16, %r15, %r1;
; SM70-NEXT: and.b32 %r17, %r20, %r2;
; SM70-NEXT: or.b32 %r18, %r17, %r16;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r20, %r18;
; SM70-NEXT: setp.ne.b32 %p3, %r3, %r20;
; SM70-NEXT: mov.b32 %r20, %r3;
; SM70-NEXT: @%p3 bra $L__BB225_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r19, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r19;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acq_rel
ret <2 x i8> %retval
}
define <4 x i8> @usub_sat_acq_rel_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: usub_sat_acq_rel_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [usub_sat_acq_rel_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r6, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r6;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs9, %r10;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r13;
; SM70-NEXT: $L__BB226_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: max.u16 %rs3, %rs2, %rs1;
; SM70-NEXT: sub.s16 %rs4, %rs3, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NEXT: prmt.b32 %r7, %r18, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs6, %r7;
; SM70-NEXT: max.u16 %rs7, %rs6, %rs5;
; SM70-NEXT: sub.s16 %rs8, %rs7, %rs5;
; SM70-NEXT: cvt.u32.u16 %r8, %rs8;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r11, %r18, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r11;
; SM70-NEXT: max.u16 %rs11, %rs10, %rs9;
; SM70-NEXT: sub.s16 %rs12, %rs11, %rs9;
; SM70-NEXT: cvt.u32.u16 %r12, %rs12;
; SM70-NEXT: prmt.b32 %r14, %r18, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r14;
; SM70-NEXT: max.u16 %rs15, %rs14, %rs13;
; SM70-NEXT: sub.s16 %rs16, %rs15, %rs13;
; SM70-NEXT: cvt.u32.u16 %r15, %rs16;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p1 bra $L__BB226_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acq_rel
ret <4 x i8> %retval
}
define <8 x i8> @usub_sat_acq_rel_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: usub_sat_acq_rel_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<33>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [usub_sat_acq_rel_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB227_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r4, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: max.u16 %rs3, %rs2, %rs1;
; SM70-NEXT: sub.s16 %rs4, %rs3, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NEXT: prmt.b32 %r6, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r6;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs6, %r7;
; SM70-NEXT: max.u16 %rs7, %rs6, %rs5;
; SM70-NEXT: sub.s16 %rs8, %rs7, %rs5;
; SM70-NEXT: cvt.u32.u16 %r8, %rs8;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r10, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs9, %r10;
; SM70-NEXT: prmt.b32 %r11, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r11;
; SM70-NEXT: max.u16 %rs11, %rs10, %rs9;
; SM70-NEXT: sub.s16 %rs12, %rs11, %rs9;
; SM70-NEXT: cvt.u32.u16 %r12, %rs12;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r13;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r14;
; SM70-NEXT: max.u16 %rs15, %rs14, %rs13;
; SM70-NEXT: sub.s16 %rs16, %rs15, %rs13;
; SM70-NEXT: cvt.u32.u16 %r15, %rs16;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: prmt.b32 %r18, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs17, %r18;
; SM70-NEXT: prmt.b32 %r19, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs18, %r19;
; SM70-NEXT: max.u16 %rs19, %rs18, %rs17;
; SM70-NEXT: sub.s16 %rs20, %rs19, %rs17;
; SM70-NEXT: cvt.u32.u16 %r20, %rs20;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs21, %r21;
; SM70-NEXT: prmt.b32 %r22, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs22, %r22;
; SM70-NEXT: max.u16 %rs23, %rs22, %rs21;
; SM70-NEXT: sub.s16 %rs24, %rs23, %rs21;
; SM70-NEXT: cvt.u32.u16 %r23, %rs24;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs25, %r25;
; SM70-NEXT: prmt.b32 %r26, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs26, %r26;
; SM70-NEXT: max.u16 %rs27, %rs26, %rs25;
; SM70-NEXT: sub.s16 %rs28, %rs27, %rs25;
; SM70-NEXT: cvt.u32.u16 %r27, %rs28;
; SM70-NEXT: prmt.b32 %r28, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs29, %r28;
; SM70-NEXT: prmt.b32 %r29, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs30, %r29;
; SM70-NEXT: max.u16 %rs31, %rs30, %rs29;
; SM70-NEXT: sub.s16 %rs32, %rs31, %rs29;
; SM70-NEXT: cvt.u32.u16 %r30, %rs32;
; SM70-NEXT: prmt.b32 %r31, %r30, %r27, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r24, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd4, %r32;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p1 bra $L__BB227_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acq_rel
ret <8 x i8> %retval
}
define <1 x i16> @usub_sat_acq_rel_v1i16_global_cta(ptr addrspace(1) %addr, <1 x i16> %val) {
; SM70-LABEL: usub_sat_acq_rel_v1i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<5>;
; SM70-NEXT: .reg .b32 %r<14>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [usub_sat_acq_rel_v1i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [usub_sat_acq_rel_v1i16_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NEXT: and.b32 %r5, %r4, 3;
; SM70-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r6;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NEXT: $L__BB228_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NEXT: max.u16 %rs3, %rs2, %rs1;
; SM70-NEXT: sub.s16 %rs4, %rs3, %rs1;
; SM70-NEXT: cvt.u32.u16 %r8, %rs4;
; SM70-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r13;
; SM70-NEXT: mov.b32 %r13, %r3;
; SM70-NEXT: @%p1 bra $L__BB228_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <1 x i16> %val syncscope("block") acq_rel
ret <1 x i16> %retval
}
define <2 x i16> @usub_sat_acq_rel_v2i16_global_cta(ptr addrspace(1) %addr, <2 x i16> %val) {
; SM70-LABEL: usub_sat_acq_rel_v2i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<4>;
; SM70-NEXT: .reg .b16 %rs<9>;
; SM70-NEXT: .reg .b32 %r<8>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [usub_sat_acq_rel_v2i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v2i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NEXT: $L__BB229_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r7;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: setp.gt.u16 %p1, %rs5, %rs4;
; SM70-NEXT: selp.b16 %rs7, -1, 0, %p1;
; SM70-NEXT: setp.gt.u16 %p2, %rs6, %rs3;
; SM70-NEXT: selp.b16 %rs8, -1, 0, %p2;
; SM70-NEXT: mov.b32 %r4, {%rs8, %rs7};
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: and.b32 %r6, %r3, %r5;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r7, %r6;
; SM70-NEXT: setp.ne.b32 %p3, %r1, %r7;
; SM70-NEXT: mov.b32 %r7, %r1;
; SM70-NEXT: @%p3 bra $L__BB229_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <2 x i16> %val syncscope("block") acq_rel
ret <2 x i16> %retval
}
define <4 x i16> @usub_sat_acq_rel_v4i16_global_cta(ptr addrspace(1) %addr, <4 x i16> %val) {
; SM70-LABEL: usub_sat_acq_rel_v4i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<6>;
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [usub_sat_acq_rel_v4i16_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v4i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r2;
; SM70-NEXT: $L__BB230_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r11;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r3, {%rs6, %rs5};
; SM70-NEXT: setp.gt.u16 %p1, %rs5, %rs4;
; SM70-NEXT: selp.b16 %rs7, -1, 0, %p1;
; SM70-NEXT: setp.gt.u16 %p2, %rs6, %rs3;
; SM70-NEXT: selp.b16 %rs8, -1, 0, %p2;
; SM70-NEXT: mov.b32 %r4, {%rs8, %rs7};
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: and.b32 %r6, %r3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NEXT: mov.b32 {%rs11, %rs12}, %r12;
; SM70-NEXT: sub.s16 %rs13, %rs12, %rs10;
; SM70-NEXT: sub.s16 %rs14, %rs11, %rs9;
; SM70-NEXT: mov.b32 %r7, {%rs14, %rs13};
; SM70-NEXT: setp.gt.u16 %p3, %rs13, %rs12;
; SM70-NEXT: selp.b16 %rs15, -1, 0, %p3;
; SM70-NEXT: setp.gt.u16 %p4, %rs14, %rs11;
; SM70-NEXT: selp.b16 %rs16, -1, 0, %p4;
; SM70-NEXT: mov.b32 %r8, {%rs16, %rs15};
; SM70-NEXT: xor.b32 %r9, %r8, -1;
; SM70-NEXT: and.b32 %r10, %r7, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-NEXT: @%p5 bra $L__BB230_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <4 x i16> %val syncscope("block") acq_rel
ret <4 x i16> %retval
}
define <8 x i16> @usub_sat_acq_rel_v8i16_global_cta(ptr addrspace(1) %addr, <8 x i16> %val) {
; SM70-LABEL: usub_sat_acq_rel_v8i16_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<11>;
; SM70-NEXT: .reg .b16 %rs<33>;
; SM70-NEXT: .reg .b32 %r<25>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v8i16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [usub_sat_acq_rel_v8i16_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NEXT: mov.b32 {%rs9, %rs10}, %r2;
; SM70-NEXT: $L__BB231_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-NEXT: sub.s16 %rs5, %rs4, %rs2;
; SM70-NEXT: sub.s16 %rs6, %rs3, %rs1;
; SM70-NEXT: mov.b32 %r5, {%rs6, %rs5};
; SM70-NEXT: setp.gt.u16 %p1, %rs5, %rs4;
; SM70-NEXT: selp.b16 %rs7, -1, 0, %p1;
; SM70-NEXT: setp.gt.u16 %p2, %rs6, %rs3;
; SM70-NEXT: selp.b16 %rs8, -1, 0, %p2;
; SM70-NEXT: mov.b32 %r6, {%rs8, %rs7};
; SM70-NEXT: xor.b32 %r7, %r6, -1;
; SM70-NEXT: and.b32 %r8, %r5, %r7;
; SM70-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-NEXT: mov.b32 {%rs11, %rs12}, %r22;
; SM70-NEXT: sub.s16 %rs13, %rs12, %rs10;
; SM70-NEXT: sub.s16 %rs14, %rs11, %rs9;
; SM70-NEXT: mov.b32 %r9, {%rs14, %rs13};
; SM70-NEXT: setp.gt.u16 %p3, %rs13, %rs12;
; SM70-NEXT: selp.b16 %rs15, -1, 0, %p3;
; SM70-NEXT: setp.gt.u16 %p4, %rs14, %rs11;
; SM70-NEXT: selp.b16 %rs16, -1, 0, %p4;
; SM70-NEXT: mov.b32 %r10, {%rs16, %rs15};
; SM70-NEXT: xor.b32 %r11, %r10, -1;
; SM70-NEXT: and.b32 %r12, %r9, %r11;
; SM70-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NEXT: @%p5 bra $L__BB231_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-NEXT: $L__BB231_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b32 {%rs17, %rs18}, %r3;
; SM70-NEXT: mov.b32 {%rs19, %rs20}, %r23;
; SM70-NEXT: sub.s16 %rs21, %rs20, %rs18;
; SM70-NEXT: sub.s16 %rs22, %rs19, %rs17;
; SM70-NEXT: mov.b32 %r13, {%rs22, %rs21};
; SM70-NEXT: setp.gt.u16 %p6, %rs21, %rs20;
; SM70-NEXT: selp.b16 %rs23, -1, 0, %p6;
; SM70-NEXT: setp.gt.u16 %p7, %rs22, %rs19;
; SM70-NEXT: selp.b16 %rs24, -1, 0, %p7;
; SM70-NEXT: mov.b32 %r14, {%rs24, %rs23};
; SM70-NEXT: xor.b32 %r15, %r14, -1;
; SM70-NEXT: and.b32 %r16, %r13, %r15;
; SM70-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-NEXT: mov.b32 {%rs25, %rs26}, %r4;
; SM70-NEXT: mov.b32 {%rs27, %rs28}, %r24;
; SM70-NEXT: sub.s16 %rs29, %rs28, %rs26;
; SM70-NEXT: sub.s16 %rs30, %rs27, %rs25;
; SM70-NEXT: mov.b32 %r17, {%rs30, %rs29};
; SM70-NEXT: setp.gt.u16 %p8, %rs29, %rs28;
; SM70-NEXT: selp.b16 %rs31, -1, 0, %p8;
; SM70-NEXT: setp.gt.u16 %p9, %rs30, %rs27;
; SM70-NEXT: selp.b16 %rs32, -1, 0, %p9;
; SM70-NEXT: mov.b32 %r18, {%rs32, %rs31};
; SM70-NEXT: xor.b32 %r19, %r18, -1;
; SM70-NEXT: and.b32 %r20, %r17, %r19;
; SM70-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-NEXT: @%p10 bra $L__BB231_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <8 x i16> %val syncscope("block") acq_rel
ret <8 x i16> %retval
}
define <1 x i32> @usub_sat_acq_rel_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: usub_sat_acq_rel_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [usub_sat_acq_rel_v1i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB232_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r3, %r5, %r1;
; SM70-NEXT: sub.s32 %r4, %r3, %r1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r2, %r5;
; SM70-NEXT: mov.b32 %r5, %r2;
; SM70-NEXT: @%p1 bra $L__BB232_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acq_rel
ret <1 x i32> %retval
}
define <2 x i32> @usub_sat_acq_rel_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: usub_sat_acq_rel_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [usub_sat_acq_rel_v2i32_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB233_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r3, %r7, %r1;
; SM70-NEXT: sub.s32 %r4, %r3, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r4;
; SM70-NEXT: max.u32 %r5, %r8, %r2;
; SM70-NEXT: sub.s32 %r6, %r5, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r7;
; SM70-NEXT: cvt.u64.u32 %rd8, %r8;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p1 bra $L__BB233_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acq_rel
ret <2 x i32> %retval
}
define <4 x i32> @usub_sat_acq_rel_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: usub_sat_acq_rel_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [usub_sat_acq_rel_v4i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r14}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r13, %rd2;
; SM70-NEXT: $L__BB234_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r5, %r13, %r1;
; SM70-NEXT: sub.s32 %r6, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NEXT: max.u32 %r7, %r14, %r2;
; SM70-NEXT: sub.s32 %r8, %r7, %r2;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r13;
; SM70-NEXT: cvt.u64.u32 %rd8, %r14;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r14}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r13, %rd11;
; SM70-NEXT: @%p1 bra $L__BB234_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r16}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r15, %rd12;
; SM70-NEXT: $L__BB234_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r9, %r15, %r3;
; SM70-NEXT: sub.s32 %r10, %r9, %r3;
; SM70-NEXT: cvt.u64.u32 %rd13, %r10;
; SM70-NEXT: max.u32 %r11, %r16, %r4;
; SM70-NEXT: sub.s32 %r12, %r11, %r4;
; SM70-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r15;
; SM70-NEXT: cvt.u64.u32 %rd18, %r16;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r16}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r15, %rd21;
; SM70-NEXT: @%p2 bra $L__BB234_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r13, %r14, %r15, %r16};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acq_rel
ret <4 x i32> %retval
}
define <8 x i32> @usub_sat_acq_rel_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: usub_sat_acq_rel_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b32 %r<33>;
; SM70-NEXT: .reg .b64 %rd<42>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [usub_sat_acq_rel_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [usub_sat_acq_rel_v8i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r26}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r25, %rd2;
; SM70-NEXT: $L__BB235_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r9, %r25, %r5;
; SM70-NEXT: sub.s32 %r10, %r9, %r5;
; SM70-NEXT: cvt.u64.u32 %rd3, %r10;
; SM70-NEXT: max.u32 %r11, %r26, %r6;
; SM70-NEXT: sub.s32 %r12, %r11, %r6;
; SM70-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r25;
; SM70-NEXT: cvt.u64.u32 %rd8, %r26;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r26}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r25, %rd11;
; SM70-NEXT: @%p1 bra $L__BB235_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r28}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r27, %rd12;
; SM70-NEXT: $L__BB235_3: // %atomicrmw.start6
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r13, %r27, %r7;
; SM70-NEXT: sub.s32 %r14, %r13, %r7;
; SM70-NEXT: cvt.u64.u32 %rd13, %r14;
; SM70-NEXT: max.u32 %r15, %r28, %r8;
; SM70-NEXT: sub.s32 %r16, %r15, %r8;
; SM70-NEXT: cvt.u64.u32 %rd14, %r16;
; SM70-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NEXT: cvt.u64.u32 %rd17, %r27;
; SM70-NEXT: cvt.u64.u32 %rd18, %r28;
; SM70-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r28}, %rd21; }
; SM70-NEXT: cvt.u32.u64 %r27, %rd21;
; SM70-NEXT: @%p2 bra $L__BB235_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r30}, %rd22; }
; SM70-NEXT: cvt.u32.u64 %r29, %rd22;
; SM70-NEXT: $L__BB235_5: // %atomicrmw.start16
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r17, %r29, %r1;
; SM70-NEXT: sub.s32 %r18, %r17, %r1;
; SM70-NEXT: cvt.u64.u32 %rd23, %r18;
; SM70-NEXT: max.u32 %r19, %r30, %r2;
; SM70-NEXT: sub.s32 %r20, %r19, %r2;
; SM70-NEXT: cvt.u64.u32 %rd24, %r20;
; SM70-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NEXT: cvt.u64.u32 %rd27, %r29;
; SM70-NEXT: cvt.u64.u32 %rd28, %r30;
; SM70-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r30}, %rd31; }
; SM70-NEXT: cvt.u32.u64 %r29, %rd31;
; SM70-NEXT: @%p3 bra $L__BB235_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r32}, %rd32; }
; SM70-NEXT: cvt.u32.u64 %r31, %rd32;
; SM70-NEXT: $L__BB235_7: // %atomicrmw.start22
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u32 %r21, %r31, %r3;
; SM70-NEXT: sub.s32 %r22, %r21, %r3;
; SM70-NEXT: cvt.u64.u32 %rd33, %r22;
; SM70-NEXT: max.u32 %r23, %r32, %r4;
; SM70-NEXT: sub.s32 %r24, %r23, %r4;
; SM70-NEXT: cvt.u64.u32 %rd34, %r24;
; SM70-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NEXT: cvt.u64.u32 %rd37, %r31;
; SM70-NEXT: cvt.u64.u32 %rd38, %r32;
; SM70-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r32}, %rd41; }
; SM70-NEXT: cvt.u32.u64 %r31, %rd41;
; SM70-NEXT: @%p4 bra $L__BB235_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r29, %r30, %r31, %r32};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r25, %r26, %r27, %r28};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acq_rel
ret <8 x i32> %retval
}
define <1 x i64> @usub_sat_acq_rel_v1i64_global_cta(ptr addrspace(1) %addr, <1 x i64> %val) {
; SM70-LABEL: usub_sat_acq_rel_v1i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b64 %rd<7>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [usub_sat_acq_rel_v1i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [usub_sat_acq_rel_v1i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd6, [%rd3];
; SM70-NEXT: $L__BB236_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u64 %rd4, %rd6, %rd1;
; SM70-NEXT: sub.s64 %rd5, %rd4, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd6, %rd5;
; SM70-NEXT: setp.ne.b64 %p1, %rd2, %rd6;
; SM70-NEXT: mov.b64 %rd6, %rd2;
; SM70-NEXT: @%p1 bra $L__BB236_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <1 x i64> %val syncscope("block") acq_rel
ret <1 x i64> %retval
}
define <2 x i64> @usub_sat_acq_rel_v2i64_global_cta(ptr addrspace(1) %addr, <2 x i64> %val) {
; SM70-LABEL: usub_sat_acq_rel_v2i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [usub_sat_acq_rel_v2i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [usub_sat_acq_rel_v2i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd10, [%rd5];
; SM70-NEXT: $L__BB237_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd10;
; SM70-NEXT: max.u64 %rd6, %rd3, %rd2;
; SM70-NEXT: sub.s64 %rd7, %rd6, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd10, [%rd5], %rd3, %rd7;
; SM70-NEXT: setp.ne.b64 %p1, %rd10, %rd3;
; SM70-NEXT: @%p1 bra $L__BB237_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd11, [%rd5+8];
; SM70-NEXT: $L__BB237_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u64 %rd8, %rd11, %rd1;
; SM70-NEXT: sub.s64 %rd9, %rd8, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd11, %rd9;
; SM70-NEXT: setp.ne.b64 %p2, %rd4, %rd11;
; SM70-NEXT: mov.b64 %rd11, %rd4;
; SM70-NEXT: @%p2 bra $L__BB237_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <2 x i64> %val syncscope("block") acq_rel
ret <2 x i64> %retval
}
define <4 x i64> @usub_sat_acq_rel_v4i64_global_cta(ptr addrspace(1) %addr, <4 x i64> %val) {
; SM70-LABEL: usub_sat_acq_rel_v4i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<22>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [usub_sat_acq_rel_v4i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [usub_sat_acq_rel_v4i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [usub_sat_acq_rel_v4i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd18, [%rd9];
; SM70-NEXT: $L__BB238_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd18;
; SM70-NEXT: max.u64 %rd10, %rd4, %rd3;
; SM70-NEXT: sub.s64 %rd11, %rd10, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd18, [%rd9], %rd4, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd18, %rd4;
; SM70-NEXT: @%p1 bra $L__BB238_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd19, [%rd9+8];
; SM70-NEXT: $L__BB238_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd19;
; SM70-NEXT: max.u64 %rd12, %rd5, %rd2;
; SM70-NEXT: sub.s64 %rd13, %rd12, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd19, [%rd9+8], %rd5, %rd13;
; SM70-NEXT: setp.ne.b64 %p2, %rd19, %rd5;
; SM70-NEXT: @%p2 bra $L__BB238_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd20, [%rd9+16];
; SM70-NEXT: $L__BB238_5: // %atomicrmw.start20
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd20;
; SM70-NEXT: max.u64 %rd14, %rd7, %rd1;
; SM70-NEXT: sub.s64 %rd15, %rd14, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd20, [%rd9+16], %rd7, %rd15;
; SM70-NEXT: setp.ne.b64 %p3, %rd20, %rd7;
; SM70-NEXT: @%p3 bra $L__BB238_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end19
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd21, [%rd9+24];
; SM70-NEXT: $L__BB238_7: // %atomicrmw.start28
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u64 %rd16, %rd21, %rd6;
; SM70-NEXT: sub.s64 %rd17, %rd16, %rd6;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd21, %rd17;
; SM70-NEXT: setp.ne.b64 %p4, %rd8, %rd21;
; SM70-NEXT: mov.b64 %rd21, %rd8;
; SM70-NEXT: @%p4 bra $L__BB238_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end27
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd20, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd18, %rd19};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <4 x i64> %val syncscope("block") acq_rel
ret <4 x i64> %retval
}
define <8 x i64> @usub_sat_acq_rel_v8i64_global_cta(ptr addrspace(1) %addr, <8 x i64> %val) {
; SM70-LABEL: usub_sat_acq_rel_v8i64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<42>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [usub_sat_acq_rel_v8i64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [usub_sat_acq_rel_v8i64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [usub_sat_acq_rel_v8i64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [usub_sat_acq_rel_v8i64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [usub_sat_acq_rel_v8i64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd34, [%rd17];
; SM70-NEXT: $L__BB239_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd34;
; SM70-NEXT: max.u64 %rd18, %rd5, %rd4;
; SM70-NEXT: sub.s64 %rd19, %rd18, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd17], %rd5, %rd19;
; SM70-NEXT: setp.ne.b64 %p1, %rd34, %rd5;
; SM70-NEXT: @%p1 bra $L__BB239_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd17+8];
; SM70-NEXT: $L__BB239_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd35;
; SM70-NEXT: max.u64 %rd20, %rd6, %rd3;
; SM70-NEXT: sub.s64 %rd21, %rd20, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd35, [%rd17+8], %rd6, %rd21;
; SM70-NEXT: setp.ne.b64 %p2, %rd35, %rd6;
; SM70-NEXT: @%p2 bra $L__BB239_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd36, [%rd17+16];
; SM70-NEXT: $L__BB239_5: // %atomicrmw.start24
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd36;
; SM70-NEXT: max.u64 %rd22, %rd8, %rd2;
; SM70-NEXT: sub.s64 %rd23, %rd22, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd36, [%rd17+16], %rd8, %rd23;
; SM70-NEXT: setp.ne.b64 %p3, %rd36, %rd8;
; SM70-NEXT: @%p3 bra $L__BB239_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end23
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd37, [%rd17+24];
; SM70-NEXT: $L__BB239_7: // %atomicrmw.start32
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd37;
; SM70-NEXT: max.u64 %rd24, %rd9, %rd7;
; SM70-NEXT: sub.s64 %rd25, %rd24, %rd7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd37, [%rd17+24], %rd9, %rd25;
; SM70-NEXT: setp.ne.b64 %p4, %rd37, %rd9;
; SM70-NEXT: @%p4 bra $L__BB239_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end31
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd38, [%rd17+32];
; SM70-NEXT: $L__BB239_9: // %atomicrmw.start48
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd38;
; SM70-NEXT: max.u64 %rd26, %rd12, %rd1;
; SM70-NEXT: sub.s64 %rd27, %rd26, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd38, [%rd17+32], %rd12, %rd27;
; SM70-NEXT: setp.ne.b64 %p5, %rd38, %rd12;
; SM70-NEXT: @%p5 bra $L__BB239_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end47
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd39, [%rd17+40];
; SM70-NEXT: $L__BB239_11: // %atomicrmw.start56
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd39;
; SM70-NEXT: max.u64 %rd28, %rd13, %rd11;
; SM70-NEXT: sub.s64 %rd29, %rd28, %rd11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd39, [%rd17+40], %rd13, %rd29;
; SM70-NEXT: setp.ne.b64 %p6, %rd39, %rd13;
; SM70-NEXT: @%p6 bra $L__BB239_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end55
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd40, [%rd17+48];
; SM70-NEXT: $L__BB239_13: // %atomicrmw.start68
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd40;
; SM70-NEXT: max.u64 %rd30, %rd15, %rd10;
; SM70-NEXT: sub.s64 %rd31, %rd30, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd40, [%rd17+48], %rd15, %rd31;
; SM70-NEXT: setp.ne.b64 %p7, %rd40, %rd15;
; SM70-NEXT: @%p7 bra $L__BB239_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end67
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd41, [%rd17+56];
; SM70-NEXT: $L__BB239_15: // %atomicrmw.start76
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.u64 %rd32, %rd41, %rd14;
; SM70-NEXT: sub.s64 %rd33, %rd32, %rd14;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd41, %rd33;
; SM70-NEXT: setp.ne.b64 %p8, %rd16, %rd41;
; SM70-NEXT: mov.b64 %rd41, %rd16;
; SM70-NEXT: @%p8 bra $L__BB239_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end75
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd40, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd38, %rd39};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd34, %rd35};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd36, %rd37};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise usub_sat ptr addrspace(1) %addr, <8 x i64> %val syncscope("block") acq_rel
ret <8 x i64> %retval
}
define <1 x float> @fadd_acq_rel_v1f32_global_cta(ptr addrspace(1) %addr, <1 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fadd_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB240_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r3, %r4, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB240_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r1, [fadd_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r2, [%rd1], %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v1f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fadd_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r2, [%rd1], %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v1f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r1, [fadd_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r2, [%rd1], %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <1 x float> %val syncscope("block") acq_rel
ret <1 x float> %retval
}
define <2 x float> @fadd_acq_rel_v2f32_global_cta(ptr addrspace(1) %addr, <2 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB241_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r3, %r5, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r4, %r6, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB241_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r3, [%rd1], %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r4, [%rd1+4], %r2;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v2f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r3, [%rd1], %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r4, [%rd1+4], %r2;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v2f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r3, [%rd1], %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r4, [%rd1+4], %r2;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <2 x float> %val syncscope("block") acq_rel
ret <2 x float> %retval
}
define <4 x float> @fadd_acq_rel_v4f32_global_cta(ptr addrspace(1) %addr, <4 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB242_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r5, %r9, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r6, %r10, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB242_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB242_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r7, %r11, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r8, %r12, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB242_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<9>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r5, [%rd1], %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1+4], %r2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r7, [%rd1+8], %r3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r8, [%rd1+12], %r4;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v4f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<9>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r5, [%rd1], %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1+4], %r2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r7, [%rd1+8], %r3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r8, [%rd1+12], %r4;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v4f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<9>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r5, [%rd1], %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1+4], %r2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r7, [%rd1+8], %r3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r8, [%rd1+12], %r4;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <4 x float> %val syncscope("block") acq_rel
ret <4 x float> %retval
}
define <8 x float> @fadd_acq_rel_v8f32_global_cta(ptr addrspace(1) %addr, <8 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fadd_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB243_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r9, %r17, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r10, %r18, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB243_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB243_3: // %atomicrmw.start6
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r11, %r19, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r12, %r20, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB243_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB243_5: // %atomicrmw.start16
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r13, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r14, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB243_5;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB243_7: // %atomicrmw.start22
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r15, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r16, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-NOFTZ-DISALLOW-NEXT: @%p4 bra $L__BB243_7;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fadd_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r9, [%rd1], %r5;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1+4], %r6;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r11, [%rd1+8], %r7;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+12], %r8;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r13, [%rd1+16], %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r14, [%rd1+20], %r2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r15, [%rd1+24], %r3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r16, [%rd1+28], %r4;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v8f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fadd_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r9, [%rd1], %r5;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1+4], %r6;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r11, [%rd1+8], %r7;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+12], %r8;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r13, [%rd1+16], %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r14, [%rd1+20], %r2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r15, [%rd1+24], %r3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r16, [%rd1+28], %r4;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v8f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fadd_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r9, [%rd1], %r5;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1+4], %r6;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r11, [%rd1+8], %r7;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+12], %r8;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r13, [%rd1+16], %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r14, [%rd1+20], %r2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r15, [%rd1+24], %r3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r16, [%rd1+28], %r4;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <8 x float> %val syncscope("block") acq_rel
ret <8 x float> %retval
}
define <1 x float> @fsub_acq_rel_v1f32_global_cta(ptr addrspace(1) %addr, <1 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fsub_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB244_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r3, %r4, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB244_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r1, [fsub_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r2, %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r3, [%rd1], %r2;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r3;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v1f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fsub_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r2, %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r3, [%rd1], %r2;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r3;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v1f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r1, [fsub_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r2, %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r3, [%rd1], %r2;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r3;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <1 x float> %val syncscope("block") acq_rel
ret <1 x float> %retval
}
define <2 x float> @fsub_acq_rel_v2f32_global_cta(ptr addrspace(1) %addr, <2 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB245_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r3, %r5, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r4, %r6, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB245_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r4, [%rd1], %r3;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r5, %r2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1+4], %r5;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r4, %r6};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v2f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r4, [%rd1], %r3;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r5, %r2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1+4], %r5;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r4, %r6};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v2f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r4, [%rd1], %r3;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r5, %r2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1+4], %r5;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r4, %r6};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <2 x float> %val syncscope("block") acq_rel
ret <2 x float> %retval
}
define <4 x float> @fsub_acq_rel_v4f32_global_cta(ptr addrspace(1) %addr, <4 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB246_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r5, %r9, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r6, %r10, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB246_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB246_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r7, %r11, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r8, %r12, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB246_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r5, %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1], %r5;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r7, %r2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r8, [%rd1+4], %r7;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r9, %r3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1+8], %r9;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r11, %r4;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+12], %r11;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r6, %r8, %r10, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v4f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r5, %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1], %r5;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r7, %r2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r8, [%rd1+4], %r7;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r9, %r3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1+8], %r9;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r11, %r4;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+12], %r11;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r6, %r8, %r10, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v4f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r5, %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r6, [%rd1], %r5;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r7, %r2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r8, [%rd1+4], %r7;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r9, %r3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1+8], %r9;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r11, %r4;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+12], %r11;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r6, %r8, %r10, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <4 x float> %val syncscope("block") acq_rel
ret <4 x float> %retval
}
define <8 x float> @fsub_acq_rel_v8f32_global_cta(ptr addrspace(1) %addr, <8 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fsub_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB247_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r9, %r17, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r10, %r18, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB247_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB247_3: // %atomicrmw.start6
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r11, %r19, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r12, %r20, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB247_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB247_5: // %atomicrmw.start16
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r13, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r14, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB247_5;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB247_7: // %atomicrmw.start22
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r15, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r16, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-NOFTZ-DISALLOW-NEXT: @%p4 bra $L__BB247_7;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fsub_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r9, %r5;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1], %r9;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r11, %r6;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+4], %r11;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r13, %r7;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r14, [%rd1+8], %r13;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r15, %r8;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r16, [%rd1+12], %r15;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r17, %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r18, [%rd1+16], %r17;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r19, %r2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r20, [%rd1+20], %r19;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r21, %r3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r22, [%rd1+24], %r21;
; SM70-NOFTZ-ALLOW-NEXT: neg.f32 %r23, %r4;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r24, [%rd1+28], %r23;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r18, %r20, %r22, %r24};
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r10, %r12, %r14, %r16};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v8f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fsub_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r9, %r5;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1], %r9;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r11, %r6;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+4], %r11;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r13, %r7;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r14, [%rd1+8], %r13;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r15, %r8;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r16, [%rd1+12], %r15;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r17, %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r18, [%rd1+16], %r17;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r19, %r2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r20, [%rd1+20], %r19;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r21, %r3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r22, [%rd1+24], %r21;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f32 %r23, %r4;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r24, [%rd1+28], %r23;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r18, %r20, %r22, %r24};
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r10, %r12, %r14, %r16};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v8f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fsub_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r9, %r5;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r10, [%rd1], %r9;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r11, %r6;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r12, [%rd1+4], %r11;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r13, %r7;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r14, [%rd1+8], %r13;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r15, %r8;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r16, [%rd1+12], %r15;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r17, %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r18, [%rd1+16], %r17;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r19, %r2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r20, [%rd1+20], %r19;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r21, %r3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r22, [%rd1+24], %r21;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f32 %r23, %r4;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.f32 %r24, [%rd1+28], %r23;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r18, %r20, %r22, %r24};
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r10, %r12, %r14, %r16};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <8 x float> %val syncscope("block") acq_rel
ret <8 x float> %retval
}
define <1 x float> @fmin_acq_rel_v1f32_global_cta(ptr addrspace(1) %addr, <1 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fmin_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB248_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r3, %r4, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB248_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r1, [fmin_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: $L__BB248_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r3, %r4, %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB248_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v1f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fmin_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: $L__BB248_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r3, %r4, %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB248_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v1f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r1, [fmin_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-ALLOW-NEXT: $L__BB248_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r3, %r4, %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB248_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <1 x float> %val syncscope("block") acq_rel
ret <1 x float> %retval
}
define <2 x float> @fmin_acq_rel_v2f32_global_cta(ptr addrspace(1) %addr, <2 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB249_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r3, %r5, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r4, %r6, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB249_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB249_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r3, %r5, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r4, %r6, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB249_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v2f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB249_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r3, %r5, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r4, %r6, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB249_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v2f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB249_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r3, %r5, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r4, %r6, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB249_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <2 x float> %val syncscope("block") acq_rel
ret <2 x float> %retval
}
define <4 x float> @fmin_acq_rel_v4f32_global_cta(ptr addrspace(1) %addr, <4 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB250_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r5, %r9, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r6, %r10, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB250_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB250_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r7, %r11, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r8, %r12, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB250_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB250_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r5, %r9, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r6, %r10, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB250_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB250_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r7, %r11, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r8, %r12, %r4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB250_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v4f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB250_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r5, %r9, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r6, %r10, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB250_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB250_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r7, %r11, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r8, %r12, %r4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB250_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v4f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB250_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r5, %r9, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r6, %r10, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB250_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB250_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r7, %r11, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r8, %r12, %r4;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB250_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <4 x float> %val syncscope("block") acq_rel
ret <4 x float> %retval
}
define <8 x float> @fmin_acq_rel_v8f32_global_cta(ptr addrspace(1) %addr, <8 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmin_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB251_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r9, %r17, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r10, %r18, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB251_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB251_3: // %atomicrmw.start6
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r11, %r19, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r12, %r20, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB251_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB251_5: // %atomicrmw.start15
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r13, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r14, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB251_5;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB251_7: // %atomicrmw.start20
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r15, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r16, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-NOFTZ-DISALLOW-NEXT: @%p4 bra $L__BB251_7;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmin_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB251_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r9, %r17, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r10, %r18, %r6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB251_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB251_3: // %atomicrmw.start6
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r11, %r19, %r7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r12, %r20, %r8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB251_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB251_5: // %atomicrmw.start15
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r13, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r14, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-NOFTZ-ALLOW-NEXT: @%p3 bra $L__BB251_5;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB251_7: // %atomicrmw.start20
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r15, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r16, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-NOFTZ-ALLOW-NEXT: @%p4 bra $L__BB251_7;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v8f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmin_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB251_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r9, %r17, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r10, %r18, %r6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB251_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB251_3: // %atomicrmw.start6
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r11, %r19, %r7;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r12, %r20, %r8;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB251_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-FTZ-DISALLOW-NEXT: $L__BB251_5: // %atomicrmw.start15
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r13, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r14, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-FTZ-DISALLOW-NEXT: @%p3 bra $L__BB251_5;
; SM70-FTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-FTZ-DISALLOW-NEXT: $L__BB251_7: // %atomicrmw.start20
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r15, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r16, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-FTZ-DISALLOW-NEXT: @%p4 bra $L__BB251_7;
; SM70-FTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v8f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmin_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB251_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r9, %r17, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r10, %r18, %r6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB251_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB251_3: // %atomicrmw.start6
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r11, %r19, %r7;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r12, %r20, %r8;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB251_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-FTZ-ALLOW-NEXT: $L__BB251_5: // %atomicrmw.start15
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r13, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r14, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-FTZ-ALLOW-NEXT: @%p3 bra $L__BB251_5;
; SM70-FTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-FTZ-ALLOW-NEXT: $L__BB251_7: // %atomicrmw.start20
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r15, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r16, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-FTZ-ALLOW-NEXT: @%p4 bra $L__BB251_7;
; SM70-FTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <8 x float> %val syncscope("block") acq_rel
ret <8 x float> %retval
}
define <1 x float> @fmax_acq_rel_v1f32_global_cta(ptr addrspace(1) %addr, <1 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fmax_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB252_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r3, %r4, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB252_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r1, [fmax_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: $L__BB252_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r3, %r4, %r1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB252_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v1f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fmax_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: $L__BB252_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r3, %r4, %r1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB252_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v1f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r1, [fmax_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-ALLOW-NEXT: $L__BB252_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r3, %r4, %r1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r2, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r4, %r2;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB252_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <1 x float> %val syncscope("block") acq_rel
ret <1 x float> %retval
}
define <2 x float> @fmax_acq_rel_v2f32_global_cta(ptr addrspace(1) %addr, <2 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB253_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r3, %r5, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r4, %r6, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB253_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB253_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r3, %r5, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r4, %r6, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB253_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v2f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB253_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r3, %r5, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r4, %r6, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB253_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v2f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB253_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r3, %r5, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r4, %r6, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB253_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <2 x float> %val syncscope("block") acq_rel
ret <2 x float> %retval
}
define <4 x float> @fmax_acq_rel_v4f32_global_cta(ptr addrspace(1) %addr, <4 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB254_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r5, %r9, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r6, %r10, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB254_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB254_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r7, %r11, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r8, %r12, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB254_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB254_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r5, %r9, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r6, %r10, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB254_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB254_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r7, %r11, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r8, %r12, %r4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB254_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v4f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB254_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r5, %r9, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r6, %r10, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB254_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB254_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r7, %r11, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r8, %r12, %r4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB254_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v4f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB254_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r5, %r9, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r6, %r10, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB254_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB254_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r7, %r11, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r8, %r12, %r4;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB254_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <4 x float> %val syncscope("block") acq_rel
ret <4 x float> %retval
}
define <8 x float> @fmax_acq_rel_v8f32_global_cta(ptr addrspace(1) %addr, <8 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmax_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB255_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r9, %r17, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r10, %r18, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB255_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB255_3: // %atomicrmw.start6
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r11, %r19, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r12, %r20, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB255_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB255_5: // %atomicrmw.start15
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r13, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r14, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB255_5;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB255_7: // %atomicrmw.start20
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r15, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r16, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-NOFTZ-DISALLOW-NEXT: @%p4 bra $L__BB255_7;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmax_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB255_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r9, %r17, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r10, %r18, %r6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB255_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB255_3: // %atomicrmw.start6
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r11, %r19, %r7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r12, %r20, %r8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB255_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB255_5: // %atomicrmw.start15
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r13, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r14, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-NOFTZ-ALLOW-NEXT: @%p3 bra $L__BB255_5;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB255_7: // %atomicrmw.start20
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r15, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r16, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-NOFTZ-ALLOW-NEXT: @%p4 bra $L__BB255_7;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v8f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmax_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB255_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r9, %r17, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r10, %r18, %r6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB255_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB255_3: // %atomicrmw.start6
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r11, %r19, %r7;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r12, %r20, %r8;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB255_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-FTZ-DISALLOW-NEXT: $L__BB255_5: // %atomicrmw.start15
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r13, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r14, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-FTZ-DISALLOW-NEXT: @%p3 bra $L__BB255_5;
; SM70-FTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-FTZ-DISALLOW-NEXT: $L__BB255_7: // %atomicrmw.start20
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r15, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r16, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-FTZ-DISALLOW-NEXT: @%p4 bra $L__BB255_7;
; SM70-FTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v8f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmax_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB255_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r9, %r17, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r10, %r18, %r6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB255_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB255_3: // %atomicrmw.start6
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r11, %r19, %r7;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r11;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r12, %r20, %r8;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r19;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r20;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r19, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB255_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd22; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd22;
; SM70-FTZ-ALLOW-NEXT: $L__BB255_5: // %atomicrmw.start15
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r13, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r13;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r14, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r14;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p3, %rd31, %rd30;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd31; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd31;
; SM70-FTZ-ALLOW-NEXT: @%p3 bra $L__BB255_5;
; SM70-FTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd32; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd32;
; SM70-FTZ-ALLOW-NEXT: $L__BB255_7: // %atomicrmw.start20
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r15, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r15;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r16, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r16;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r23;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r24;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p4, %rd41, %rd40;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd41; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd41;
; SM70-FTZ-ALLOW-NEXT: @%p4 bra $L__BB255_7;
; SM70-FTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <8 x float> %val syncscope("block") acq_rel
ret <8 x float> %retval
}
define <1 x float> @fminimum_acq_rel_v1f32_global_cta(ptr addrspace(1) %addr, <1 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<8>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fminimum_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB256_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r7, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r7, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r4, %r7, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r7, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: @%p4 bra $L__BB256_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<8>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r1, [fminimum_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: $L__BB256_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r7, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r7, %r1;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r4, %r7, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r7, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-NOFTZ-ALLOW-NEXT: @%p4 bra $L__BB256_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v1f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<8>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fminimum_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: $L__BB256_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r7, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r7, %r1;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r4, %r7, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r7, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-FTZ-DISALLOW-NEXT: @%p4 bra $L__BB256_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v1f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<8>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r1, [fminimum_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-FTZ-ALLOW-NEXT: $L__BB256_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r7, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r7, %r1;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r4, %r7, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r7, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-FTZ-ALLOW-NEXT: @%p4 bra $L__BB256_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <1 x float> %val syncscope("block") acq_rel
ret <1 x float> %retval
}
define <2 x float> @fminimum_acq_rel_v2f32_global_cta(ptr addrspace(1) %addr, <2 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<8>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB257_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r11, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r4, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r12, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p5, %r12, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r8, %r12, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p6, %r12, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p7 bra $L__BB257_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<8>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB257_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r11, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r4, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r12, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p5, %r12, %r2;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r8, %r12, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p6, %r12, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p7 bra $L__BB257_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v2f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<8>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB257_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r11, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r4, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r12, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p5, %r12, %r2;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r8, %r12, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p6, %r12, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p7 bra $L__BB257_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v2f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<8>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB257_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r11, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r4, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r12, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p5, %r12, %r2;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r8, %r12, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p6, %r12, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p7 bra $L__BB257_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <2 x float> %val syncscope("block") acq_rel
ret <2 x float> %retval
}
define <4 x float> @fminimum_acq_rel_v4f32_global_cta(ptr addrspace(1) %addr, <4 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<15>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB258_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r21, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r6, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r22, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p5, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r10, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p6, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p7 bra $L__BB258_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB258_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r23, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r14, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p10, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r24, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p12, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r18, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p13, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p14 bra $L__BB258_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<15>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB258_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r21, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r6, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r22, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p5, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r10, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p6, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p7 bra $L__BB258_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB258_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r23, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r14, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p10, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r24, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p12, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r18, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p13, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p14 bra $L__BB258_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v4f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<15>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB258_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r21, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r6, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r22, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p5, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r10, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p6, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p7 bra $L__BB258_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB258_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r23, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r14, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p10, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r24, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p12, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r18, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p13, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p14 bra $L__BB258_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v4f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<15>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB258_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r21, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r6, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r22, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p5, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r10, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p6, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p7 bra $L__BB258_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB258_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r23, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r14, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p10, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r24, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p12, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r18, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p13, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p14 bra $L__BB258_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <4 x float> %val syncscope("block") acq_rel
ret <4 x float> %retval
}
define <8 x float> @fminimum_acq_rel_v8f32_global_cta(ptr addrspace(1) %addr, <8 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<29>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<49>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fminimum_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB259_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r41, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r41, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r10, %r41, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r41, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r42, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p5, %r42, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r14, %r42, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p6, %r42, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p7 bra $L__BB259_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB259_3: // %atomicrmw.start6
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r43, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r43, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r18, %r43, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p10, %r43, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r44, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p12, %r44, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r22, %r44, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p13, %r44, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p14 bra $L__BB259_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB259_5: // %atomicrmw.start15
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p15, %r45, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p16, %r45, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r26, %r45, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p17, %r45, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p18, %r46, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p19, %r46, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r30, %r46, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p20, %r46, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-NOFTZ-DISALLOW-NEXT: @%p21 bra $L__BB259_5;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB259_7: // %atomicrmw.start20
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p22, %r47, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p23, %r47, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r34, %r47, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p24, %r47, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p25, %r48, -2147483648;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p26, %r48, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r38, %r48, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p27, %r48, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-NOFTZ-DISALLOW-NEXT: @%p28 bra $L__BB259_7;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<29>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<49>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fminimum_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB259_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r41, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r41, %r5;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r10, %r41, %r5;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r41, %r5;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r42, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p5, %r42, %r6;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r14, %r42, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p6, %r42, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p7 bra $L__BB259_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB259_3: // %atomicrmw.start6
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r43, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r43, %r7;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r18, %r43, %r7;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p10, %r43, %r7;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r44, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p12, %r44, %r8;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r22, %r44, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p13, %r44, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p14 bra $L__BB259_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB259_5: // %atomicrmw.start15
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p15, %r45, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p16, %r45, %r1;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r26, %r45, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p17, %r45, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p18, %r46, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p19, %r46, %r2;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r30, %r46, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p20, %r46, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-NOFTZ-ALLOW-NEXT: @%p21 bra $L__BB259_5;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB259_7: // %atomicrmw.start20
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p22, %r47, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p23, %r47, %r3;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r34, %r47, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p24, %r47, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p25, %r48, -2147483648;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p26, %r48, %r4;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r38, %r48, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p27, %r48, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-NOFTZ-ALLOW-NEXT: @%p28 bra $L__BB259_7;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v8f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<29>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<49>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fminimum_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB259_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r41, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r41, %r5;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r10, %r41, %r5;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r41, %r5;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r42, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p5, %r42, %r6;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r14, %r42, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p6, %r42, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p7 bra $L__BB259_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB259_3: // %atomicrmw.start6
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r43, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r43, %r7;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r18, %r43, %r7;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p10, %r43, %r7;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r44, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p12, %r44, %r8;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r22, %r44, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p13, %r44, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p14 bra $L__BB259_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-FTZ-DISALLOW-NEXT: $L__BB259_5: // %atomicrmw.start15
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p15, %r45, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p16, %r45, %r1;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r26, %r45, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p17, %r45, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p18, %r46, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p19, %r46, %r2;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r30, %r46, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p20, %r46, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-FTZ-DISALLOW-NEXT: @%p21 bra $L__BB259_5;
; SM70-FTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-FTZ-DISALLOW-NEXT: $L__BB259_7: // %atomicrmw.start20
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p22, %r47, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p23, %r47, %r3;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r34, %r47, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p24, %r47, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p25, %r48, -2147483648;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p26, %r48, %r4;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r38, %r48, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p27, %r48, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-FTZ-DISALLOW-NEXT: @%p28 bra $L__BB259_7;
; SM70-FTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v8f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<29>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<49>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fminimum_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB259_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r41, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r41, %r5;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r10, %r41, %r5;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r41, %r5;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r42, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p5, %r42, %r6;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r14, %r42, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p6, %r42, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p7 bra $L__BB259_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB259_3: // %atomicrmw.start6
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r43, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r43, %r7;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r18, %r43, %r7;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p10, %r43, %r7;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r44, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p12, %r44, %r8;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r22, %r44, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p13, %r44, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p14 bra $L__BB259_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-FTZ-ALLOW-NEXT: $L__BB259_5: // %atomicrmw.start15
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p15, %r45, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p16, %r45, %r1;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r26, %r45, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p17, %r45, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p18, %r46, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p19, %r46, %r2;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r30, %r46, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p20, %r46, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-FTZ-ALLOW-NEXT: @%p21 bra $L__BB259_5;
; SM70-FTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-FTZ-ALLOW-NEXT: $L__BB259_7: // %atomicrmw.start20
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p22, %r47, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p23, %r47, %r3;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r34, %r47, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p24, %r47, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p25, %r48, -2147483648;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p26, %r48, %r4;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r38, %r48, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p27, %r48, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-FTZ-ALLOW-NEXT: @%p28 bra $L__BB259_7;
; SM70-FTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <8 x float> %val syncscope("block") acq_rel
ret <8 x float> %retval
}
define <1 x float> @fmaximum_acq_rel_v1f32_global_cta(ptr addrspace(1) %addr, <1 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<8>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fmaximum_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB260_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r7, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r7, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r4, %r7, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r7, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: @%p4 bra $L__BB260_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v1f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<8>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v1f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r1, [fmaximum_acq_rel_v1f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: $L__BB260_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r7, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r7, %r1;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r4, %r7, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r7, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-NOFTZ-ALLOW-NEXT: @%p4 bra $L__BB260_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v1f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<8>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r1, [fmaximum_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: $L__BB260_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r7, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r7, %r1;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r4, %r7, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r7, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-FTZ-DISALLOW-NEXT: @%p4 bra $L__BB260_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v1f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<8>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v1f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r1, [fmaximum_acq_rel_v1f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r7, [%rd1];
; SM70-FTZ-ALLOW-NEXT: $L__BB260_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r7, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r3, %r7, %r1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r7, %r1;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r4, %r7, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r7, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r7, %r6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p4, %r2, %r7;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r7, %r2;
; SM70-FTZ-ALLOW-NEXT: @%p4 bra $L__BB260_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <1 x float> %val syncscope("block") acq_rel
ret <1 x float> %retval
}
define <2 x float> @fmaximum_acq_rel_v2f32_global_cta(ptr addrspace(1) %addr, <2 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<8>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB261_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r11, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r4, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r12, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p5, %r12, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r8, %r12, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p6, %r12, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p7 bra $L__BB261_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v2f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<8>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v2f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB261_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r11, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r4, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r12, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p5, %r12, %r2;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r8, %r12, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p6, %r12, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p7 bra $L__BB261_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v2f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<8>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB261_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r11, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r4, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r12, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p5, %r12, %r2;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r8, %r12, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p6, %r12, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p7 bra $L__BB261_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v2f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<8>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v2f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB261_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r11, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r3, %r11, %r1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r4, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r5, 0f7FC00000, %r4, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r6, %r3, %r5, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r6;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r12, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r7, %r12, %r2, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p5, %r12, %r2;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r8, %r12, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r9, 0f7FC00000, %r8, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p6, %r12, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r10, %r7, %r9, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p7 bra $L__BB261_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <2 x float> %val syncscope("block") acq_rel
ret <2 x float> %retval
}
define <4 x float> @fmaximum_acq_rel_v4f32_global_cta(ptr addrspace(1) %addr, <4 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<15>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB262_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r21, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r6, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r21, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r22, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p5, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r10, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p6, %r22, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p7 bra $L__BB262_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB262_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r23, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r14, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p10, %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r24, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p12, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r18, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p13, %r24, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p14 bra $L__BB262_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v4f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<15>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v4f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB262_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r21, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r6, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r21, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r22, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p5, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r10, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p6, %r22, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p7 bra $L__BB262_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB262_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r23, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r14, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p10, %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r24, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p12, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r18, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p13, %r24, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p14 bra $L__BB262_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v4f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<15>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB262_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r21, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r6, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r21, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r22, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p5, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r10, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p6, %r22, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p7 bra $L__BB262_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB262_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r23, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r14, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p10, %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r24, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p12, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r18, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p13, %r24, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p14 bra $L__BB262_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v4f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<15>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v4f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB262_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r21, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r5, %r21, %r1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r6, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r7, 0f7FC00000, %r6, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r21, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r8, %r5, %r7, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r8;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r22, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r9, %r22, %r2, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p5, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r10, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p6, %r22, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p7 bra $L__BB262_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB262_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r23, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r13, %r23, %r3, %p8;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r14, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p10, %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p10;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r16;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r24, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r17, %r24, %r4, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p12, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r18, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p13, %r24, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r20;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r23;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r24;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r23, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p14 bra $L__BB262_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r21, %r22, %r23, %r24};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <4 x float> %val syncscope("block") acq_rel
ret <4 x float> %retval
}
define <8 x float> @fmaximum_acq_rel_v8f32_global_cta(ptr addrspace(1) %addr, <8 x float> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<29>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<49>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmaximum_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB263_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r41, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r41, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r10, %r41, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p3, %r41, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r42, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p5, %r42, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r14, %r42, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p6, %r42, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p7 bra $L__BB263_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB263_3: // %atomicrmw.start6
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r43, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r43, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r18, %r43, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p10, %r43, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r44, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p12, %r44, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r22, %r44, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p13, %r44, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p14 bra $L__BB263_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB263_5: // %atomicrmw.start15
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p15, %r45, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p16, %r45, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r26, %r45, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p17, %r45, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p18, %r46, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p19, %r46, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r30, %r46, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p20, %r46, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-NOFTZ-DISALLOW-NEXT: @%p21 bra $L__BB263_5;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB263_7: // %atomicrmw.start20
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p22, %r47, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p23, %r47, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r34, %r47, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p24, %r47, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b32 %p25, %r48, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p26, %r48, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r38, %r48, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p27, %r48, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-NOFTZ-DISALLOW-NEXT: @%p28 bra $L__BB263_7;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v8f32_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<29>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<49>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f32_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmaximum_acq_rel_v8f32_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB263_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r41, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r41, %r5;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r10, %r41, %r5;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p3, %r41, %r5;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r42, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p5, %r42, %r6;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r14, %r42, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p6, %r42, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p7 bra $L__BB263_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB263_3: // %atomicrmw.start6
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r43, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r43, %r7;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r18, %r43, %r7;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p10, %r43, %r7;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r44, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p12, %r44, %r8;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r22, %r44, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p13, %r44, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p14 bra $L__BB263_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB263_5: // %atomicrmw.start15
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p15, %r45, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p16, %r45, %r1;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r26, %r45, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p17, %r45, %r1;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p18, %r46, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p19, %r46, %r2;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r30, %r46, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p20, %r46, %r2;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-NOFTZ-ALLOW-NEXT: @%p21 bra $L__BB263_5;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB263_7: // %atomicrmw.start20
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p22, %r47, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p23, %r47, %r3;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r34, %r47, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p24, %r47, %r3;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b32 %p25, %r48, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p26, %r48, %r4;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r38, %r48, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p27, %r48, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-NOFTZ-ALLOW-NEXT: @%p28 bra $L__BB263_7;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v8f32_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<29>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<49>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmaximum_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB263_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p1, %r41, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r41, %r5;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r10, %r41, %r5;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p3, %r41, %r5;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p4, %r42, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p5, %r42, %r6;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r14, %r42, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p6, %r42, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p7 bra $L__BB263_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB263_3: // %atomicrmw.start6
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p8, %r43, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r43, %r7;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r18, %r43, %r7;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p10, %r43, %r7;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p11, %r44, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p12, %r44, %r8;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r22, %r44, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p13, %r44, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p14 bra $L__BB263_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-FTZ-DISALLOW-NEXT: $L__BB263_5: // %atomicrmw.start15
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p15, %r45, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p16, %r45, %r1;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r26, %r45, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p17, %r45, %r1;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p18, %r46, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p19, %r46, %r2;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r30, %r46, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p20, %r46, %r2;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-FTZ-DISALLOW-NEXT: @%p21 bra $L__BB263_5;
; SM70-FTZ-DISALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-FTZ-DISALLOW-NEXT: $L__BB263_7: // %atomicrmw.start20
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p22, %r47, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p23, %r47, %r3;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r34, %r47, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p24, %r47, %r3;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b32 %p25, %r48, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p26, %r48, %r4;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r38, %r48, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p27, %r48, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-FTZ-DISALLOW-NEXT: @%p28 bra $L__BB263_7;
; SM70-FTZ-DISALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v8f32_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<29>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<49>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<42>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f32_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f32_global_cta_param_1+16];
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [fmaximum_acq_rel_v8f32_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-ALLOW-NEXT: $L__BB263_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p1, %r41, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r9, %r41, %r5, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r41, %r5;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r10, %r41, %r5;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r11, 0f7FC00000, %r10, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p3, %r41, %r5;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r12, %r9, %r11, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p4, %r42, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r13, %r42, %r6, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p5, %r42, %r6;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r14, %r42, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r15, 0f7FC00000, %r14, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p6, %r42, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r16, %r13, %r15, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p7, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p7 bra $L__BB263_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB263_3: // %atomicrmw.start6
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p8, %r43, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r17, %r43, %r7, %p8;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r43, %r7;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r18, %r43, %r7;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r19, 0f7FC00000, %r18, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p10, %r43, %r7;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r20, %r17, %r19, %p10;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r20;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p11, %r44, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r21, %r44, %r8, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p12, %r44, %r8;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r22, %r44, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r23, 0f7FC00000, %r22, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p13, %r44, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r24, %r21, %r23, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r24;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p14, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p14 bra $L__BB263_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd22, [%rd1+16];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd22; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd22;
; SM70-FTZ-ALLOW-NEXT: $L__BB263_5: // %atomicrmw.start15
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p15, %r45, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r25, %r45, %r1, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p16, %r45, %r1;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r26, %r45, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r27, 0f7FC00000, %r26, %p16;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p17, %r45, %r1;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r28, %r25, %r27, %p17;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd23, %r28;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p18, %r46, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r29, %r46, %r2, %p18;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p19, %r46, %r2;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r30, %r46, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r31, 0f7FC00000, %r30, %p19;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p20, %r46, %r2;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r32, %r29, %r31, %p20;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd24, %r32;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd25, %rd24, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd26, %rd23, %rd25;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd27, %r45;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd28, %r46;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd29, %rd28, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd30, %rd27, %rd29;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd1+16], %rd30, %rd26;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p21, %rd31, %rd30;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r46}, %rd31; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r45, %rd31;
; SM70-FTZ-ALLOW-NEXT: @%p21 bra $L__BB263_5;
; SM70-FTZ-ALLOW-NEXT: // %bb.6: // %atomicrmw.end14
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd1+24];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd32; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd32;
; SM70-FTZ-ALLOW-NEXT: $L__BB263_7: // %atomicrmw.start20
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p22, %r47, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r33, %r47, %r3, %p22;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p23, %r47, %r3;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r34, %r47, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r35, 0f7FC00000, %r34, %p23;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p24, %r47, %r3;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r36, %r33, %r35, %p24;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd33, %r36;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b32 %p25, %r48, 0;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r37, %r48, %r4, %p25;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p26, %r48, %r4;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r38, %r48, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r39, 0f7FC00000, %r38, %p26;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p27, %r48, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.f32 %r40, %r37, %r39, %p27;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd34, %r40;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd35, %rd34, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd36, %rd33, %rd35;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd37, %r47;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd38, %r48;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd39, %rd38, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd40, %rd37, %rd39;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd41, [%rd1+24], %rd40, %rd36;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p28, %rd41, %rd40;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r48}, %rd41; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r47, %rd41;
; SM70-FTZ-ALLOW-NEXT: @%p28 bra $L__BB263_7;
; SM70-FTZ-ALLOW-NEXT: // %bb.8: // %atomicrmw.end19
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0+16], {%r45, %r46, %r47, %r48};
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <8 x float> %val syncscope("block") acq_rel
ret <8 x float> %retval
}
define <1 x double> @fadd_acq_rel_v1f64_global_cta(ptr addrspace(1) %addr, <1 x double> %val) {
; SM70-LABEL: fadd_acq_rel_v1f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<4>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v1f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [fadd_acq_rel_v1f64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd3, [%rd1], %rd2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd3;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <1 x double> %val syncscope("block") acq_rel
ret <1 x double> %retval
}
define <2 x double> @fadd_acq_rel_v2f64_global_cta(ptr addrspace(1) %addr, <2 x double> %val) {
; SM70-LABEL: fadd_acq_rel_v2f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [fadd_acq_rel_v2f64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd4, [%rd1], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd5, [%rd1+8], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd4, %rd5};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <2 x double> %val syncscope("block") acq_rel
ret <2 x double> %retval
}
define <4 x double> @fadd_acq_rel_v4f64_global_cta(ptr addrspace(1) %addr, <4 x double> %val) {
; SM70-LABEL: fadd_acq_rel_v4f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [fadd_acq_rel_v4f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [fadd_acq_rel_v4f64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd6, [%rd1], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd7, [%rd1+8], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd8, [%rd1+16], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd9, [%rd1+24], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd8, %rd9};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd6, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <4 x double> %val syncscope("block") acq_rel
ret <4 x double> %retval
}
define <8 x double> @fadd_acq_rel_v8f64_global_cta(ptr addrspace(1) %addr, <8 x double> %val) {
; SM70-LABEL: fadd_acq_rel_v8f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [fadd_acq_rel_v8f64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [fadd_acq_rel_v8f64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [fadd_acq_rel_v8f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [fadd_acq_rel_v8f64_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd10, [%rd1], %rd8;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd11, [%rd1+8], %rd9;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd12, [%rd1+16], %rd6;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd13, [%rd1+24], %rd7;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd14, [%rd1+32], %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd15, [%rd1+40], %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd16, [%rd1+48], %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd17, [%rd1+56], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd16, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd14, %rd15};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd12, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd10, %rd11};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <8 x double> %val syncscope("block") acq_rel
ret <8 x double> %retval
}
define <1 x double> @fsub_acq_rel_v1f64_global_cta(ptr addrspace(1) %addr, <1 x double> %val) {
; SM70-LABEL: fsub_acq_rel_v1f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<5>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd2, [fsub_acq_rel_v1f64_global_cta_param_1];
; SM70-NEXT: neg.f64 %rd3, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd4, [%rd1], %rd3;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd4;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <1 x double> %val syncscope("block") acq_rel
ret <1 x double> %retval
}
define <2 x double> @fsub_acq_rel_v2f64_global_cta(ptr addrspace(1) %addr, <2 x double> %val) {
; SM70-LABEL: fsub_acq_rel_v2f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<8>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [fsub_acq_rel_v2f64_global_cta_param_1];
; SM70-NEXT: neg.f64 %rd4, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd5, [%rd1], %rd4;
; SM70-NEXT: neg.f64 %rd6, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd7, [%rd1+8], %rd6;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd5, %rd7};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <2 x double> %val syncscope("block") acq_rel
ret <2 x double> %retval
}
define <4 x double> @fsub_acq_rel_v4f64_global_cta(ptr addrspace(1) %addr, <4 x double> %val) {
; SM70-LABEL: fsub_acq_rel_v4f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<14>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [fsub_acq_rel_v4f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [fsub_acq_rel_v4f64_global_cta_param_1];
; SM70-NEXT: neg.f64 %rd6, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd7, [%rd1], %rd6;
; SM70-NEXT: neg.f64 %rd8, %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd9, [%rd1+8], %rd8;
; SM70-NEXT: neg.f64 %rd10, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd11, [%rd1+16], %rd10;
; SM70-NEXT: neg.f64 %rd12, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd13, [%rd1+24], %rd12;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd11, %rd13};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd7, %rd9};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <4 x double> %val syncscope("block") acq_rel
ret <4 x double> %retval
}
define <8 x double> @fsub_acq_rel_v8f64_global_cta(ptr addrspace(1) %addr, <8 x double> %val) {
; SM70-LABEL: fsub_acq_rel_v8f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .b64 %rd<26>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd3}, [fsub_acq_rel_v8f64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd5}, [fsub_acq_rel_v8f64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd6, %rd7}, [fsub_acq_rel_v8f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd8, %rd9}, [fsub_acq_rel_v8f64_global_cta_param_1];
; SM70-NEXT: neg.f64 %rd10, %rd8;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd11, [%rd1], %rd10;
; SM70-NEXT: neg.f64 %rd12, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd13, [%rd1+8], %rd12;
; SM70-NEXT: neg.f64 %rd14, %rd6;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd15, [%rd1+16], %rd14;
; SM70-NEXT: neg.f64 %rd16, %rd7;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd17, [%rd1+24], %rd16;
; SM70-NEXT: neg.f64 %rd18, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd19, [%rd1+32], %rd18;
; SM70-NEXT: neg.f64 %rd20, %rd5;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd21, [%rd1+40], %rd20;
; SM70-NEXT: neg.f64 %rd22, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd23, [%rd1+48], %rd22;
; SM70-NEXT: neg.f64 %rd24, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.add.f64 %rd25, [%rd1+56], %rd24;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd23, %rd25};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd19, %rd21};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd15, %rd17};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd11, %rd13};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <8 x double> %val syncscope("block") acq_rel
ret <8 x double> %retval
}
define <1 x double> @fmin_acq_rel_v1f64_global_cta(ptr addrspace(1) %addr, <1 x double> %val) {
; SM70-LABEL: fmin_acq_rel_v1f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [fmin_acq_rel_v1f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v1f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd5, [%rd3];
; SM70-NEXT: $L__BB272_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: min.f64 %rd4, %rd5, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd5, %rd4;
; SM70-NEXT: setp.ne.b64 %p1, %rd2, %rd5;
; SM70-NEXT: mov.b64 %rd5, %rd2;
; SM70-NEXT: @%p1 bra $L__BB272_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <1 x double> %val syncscope("block") acq_rel
ret <1 x double> %retval
}
define <2 x double> @fmin_acq_rel_v2f64_global_cta(ptr addrspace(1) %addr, <2 x double> %val) {
; SM70-LABEL: fmin_acq_rel_v2f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [fmin_acq_rel_v2f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [fmin_acq_rel_v2f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd8, [%rd5];
; SM70-NEXT: $L__BB273_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd8;
; SM70-NEXT: min.f64 %rd6, %rd3, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd5], %rd3, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd8, %rd3;
; SM70-NEXT: @%p1 bra $L__BB273_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd9, [%rd5+8];
; SM70-NEXT: $L__BB273_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: min.f64 %rd7, %rd9, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd9, %rd7;
; SM70-NEXT: setp.ne.b64 %p2, %rd4, %rd9;
; SM70-NEXT: mov.b64 %rd9, %rd4;
; SM70-NEXT: @%p2 bra $L__BB273_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd8, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <2 x double> %val syncscope("block") acq_rel
ret <2 x double> %retval
}
define <4 x double> @fmin_acq_rel_v4f64_global_cta(ptr addrspace(1) %addr, <4 x double> %val) {
; SM70-LABEL: fmin_acq_rel_v4f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [fmin_acq_rel_v4f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [fmin_acq_rel_v4f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [fmin_acq_rel_v4f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd14, [%rd9];
; SM70-NEXT: $L__BB274_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd14;
; SM70-NEXT: min.f64 %rd10, %rd4, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd14, [%rd9], %rd4, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd14, %rd4;
; SM70-NEXT: @%p1 bra $L__BB274_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd15, [%rd9+8];
; SM70-NEXT: $L__BB274_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd15;
; SM70-NEXT: min.f64 %rd11, %rd5, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd15, [%rd9+8], %rd5, %rd11;
; SM70-NEXT: setp.ne.b64 %p2, %rd15, %rd5;
; SM70-NEXT: @%p2 bra $L__BB274_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd16, [%rd9+16];
; SM70-NEXT: $L__BB274_5: // %atomicrmw.start19
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd16;
; SM70-NEXT: min.f64 %rd12, %rd7, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd9+16], %rd7, %rd12;
; SM70-NEXT: setp.ne.b64 %p3, %rd16, %rd7;
; SM70-NEXT: @%p3 bra $L__BB274_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end18
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd17, [%rd9+24];
; SM70-NEXT: $L__BB274_7: // %atomicrmw.start26
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: min.f64 %rd13, %rd17, %rd6;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd17, %rd13;
; SM70-NEXT: setp.ne.b64 %p4, %rd8, %rd17;
; SM70-NEXT: mov.b64 %rd17, %rd8;
; SM70-NEXT: @%p4 bra $L__BB274_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end25
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd16, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd14, %rd15};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <4 x double> %val syncscope("block") acq_rel
ret <4 x double> %retval
}
define <8 x double> @fmin_acq_rel_v8f64_global_cta(ptr addrspace(1) %addr, <8 x double> %val) {
; SM70-LABEL: fmin_acq_rel_v8f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<34>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [fmin_acq_rel_v8f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [fmin_acq_rel_v8f64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [fmin_acq_rel_v8f64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [fmin_acq_rel_v8f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [fmin_acq_rel_v8f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd26, [%rd17];
; SM70-NEXT: $L__BB275_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd26;
; SM70-NEXT: min.f64 %rd18, %rd5, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd26, [%rd17], %rd5, %rd18;
; SM70-NEXT: setp.ne.b64 %p1, %rd26, %rd5;
; SM70-NEXT: @%p1 bra $L__BB275_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd27, [%rd17+8];
; SM70-NEXT: $L__BB275_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd27;
; SM70-NEXT: min.f64 %rd19, %rd6, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd27, [%rd17+8], %rd6, %rd19;
; SM70-NEXT: setp.ne.b64 %p2, %rd27, %rd6;
; SM70-NEXT: @%p2 bra $L__BB275_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd28, [%rd17+16];
; SM70-NEXT: $L__BB275_5: // %atomicrmw.start23
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd28;
; SM70-NEXT: min.f64 %rd20, %rd8, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd28, [%rd17+16], %rd8, %rd20;
; SM70-NEXT: setp.ne.b64 %p3, %rd28, %rd8;
; SM70-NEXT: @%p3 bra $L__BB275_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end22
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd29, [%rd17+24];
; SM70-NEXT: $L__BB275_7: // %atomicrmw.start30
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd29;
; SM70-NEXT: min.f64 %rd21, %rd9, %rd7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd29, [%rd17+24], %rd9, %rd21;
; SM70-NEXT: setp.ne.b64 %p4, %rd29, %rd9;
; SM70-NEXT: @%p4 bra $L__BB275_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end29
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd30, [%rd17+32];
; SM70-NEXT: $L__BB275_9: // %atomicrmw.start45
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd30;
; SM70-NEXT: min.f64 %rd22, %rd12, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd30, [%rd17+32], %rd12, %rd22;
; SM70-NEXT: setp.ne.b64 %p5, %rd30, %rd12;
; SM70-NEXT: @%p5 bra $L__BB275_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end44
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd31, [%rd17+40];
; SM70-NEXT: $L__BB275_11: // %atomicrmw.start52
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd31;
; SM70-NEXT: min.f64 %rd23, %rd13, %rd11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd17+40], %rd13, %rd23;
; SM70-NEXT: setp.ne.b64 %p6, %rd31, %rd13;
; SM70-NEXT: @%p6 bra $L__BB275_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end51
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd17+48];
; SM70-NEXT: $L__BB275_13: // %atomicrmw.start63
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd32;
; SM70-NEXT: min.f64 %rd24, %rd15, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd32, [%rd17+48], %rd15, %rd24;
; SM70-NEXT: setp.ne.b64 %p7, %rd32, %rd15;
; SM70-NEXT: @%p7 bra $L__BB275_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end62
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd33, [%rd17+56];
; SM70-NEXT: $L__BB275_15: // %atomicrmw.start70
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: min.f64 %rd25, %rd33, %rd14;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd33, %rd25;
; SM70-NEXT: setp.ne.b64 %p8, %rd16, %rd33;
; SM70-NEXT: mov.b64 %rd33, %rd16;
; SM70-NEXT: @%p8 bra $L__BB275_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end69
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd32, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd30, %rd31};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd26, %rd27};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd28, %rd29};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <8 x double> %val syncscope("block") acq_rel
ret <8 x double> %retval
}
define <1 x double> @fmax_acq_rel_v1f64_global_cta(ptr addrspace(1) %addr, <1 x double> %val) {
; SM70-LABEL: fmax_acq_rel_v1f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b64 %rd<6>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [fmax_acq_rel_v1f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v1f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd5, [%rd3];
; SM70-NEXT: $L__BB276_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.f64 %rd4, %rd5, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd5, %rd4;
; SM70-NEXT: setp.ne.b64 %p1, %rd2, %rd5;
; SM70-NEXT: mov.b64 %rd5, %rd2;
; SM70-NEXT: @%p1 bra $L__BB276_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <1 x double> %val syncscope("block") acq_rel
ret <1 x double> %retval
}
define <2 x double> @fmax_acq_rel_v2f64_global_cta(ptr addrspace(1) %addr, <2 x double> %val) {
; SM70-LABEL: fmax_acq_rel_v2f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b64 %rd<10>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [fmax_acq_rel_v2f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [fmax_acq_rel_v2f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd8, [%rd5];
; SM70-NEXT: $L__BB277_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd8;
; SM70-NEXT: max.f64 %rd6, %rd3, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd5], %rd3, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd8, %rd3;
; SM70-NEXT: @%p1 bra $L__BB277_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd9, [%rd5+8];
; SM70-NEXT: $L__BB277_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.f64 %rd7, %rd9, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd9, %rd7;
; SM70-NEXT: setp.ne.b64 %p2, %rd4, %rd9;
; SM70-NEXT: mov.b64 %rd9, %rd4;
; SM70-NEXT: @%p2 bra $L__BB277_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd8, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <2 x double> %val syncscope("block") acq_rel
ret <2 x double> %retval
}
define <4 x double> @fmax_acq_rel_v4f64_global_cta(ptr addrspace(1) %addr, <4 x double> %val) {
; SM70-LABEL: fmax_acq_rel_v4f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<18>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [fmax_acq_rel_v4f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [fmax_acq_rel_v4f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [fmax_acq_rel_v4f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd14, [%rd9];
; SM70-NEXT: $L__BB278_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd14;
; SM70-NEXT: max.f64 %rd10, %rd4, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd14, [%rd9], %rd4, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd14, %rd4;
; SM70-NEXT: @%p1 bra $L__BB278_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd15, [%rd9+8];
; SM70-NEXT: $L__BB278_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd15;
; SM70-NEXT: max.f64 %rd11, %rd5, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd15, [%rd9+8], %rd5, %rd11;
; SM70-NEXT: setp.ne.b64 %p2, %rd15, %rd5;
; SM70-NEXT: @%p2 bra $L__BB278_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd16, [%rd9+16];
; SM70-NEXT: $L__BB278_5: // %atomicrmw.start19
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd16;
; SM70-NEXT: max.f64 %rd12, %rd7, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd9+16], %rd7, %rd12;
; SM70-NEXT: setp.ne.b64 %p3, %rd16, %rd7;
; SM70-NEXT: @%p3 bra $L__BB278_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end18
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd17, [%rd9+24];
; SM70-NEXT: $L__BB278_7: // %atomicrmw.start26
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.f64 %rd13, %rd17, %rd6;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd17, %rd13;
; SM70-NEXT: setp.ne.b64 %p4, %rd8, %rd17;
; SM70-NEXT: mov.b64 %rd17, %rd8;
; SM70-NEXT: @%p4 bra $L__BB278_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end25
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd16, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd14, %rd15};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <4 x double> %val syncscope("block") acq_rel
ret <4 x double> %retval
}
define <8 x double> @fmax_acq_rel_v8f64_global_cta(ptr addrspace(1) %addr, <8 x double> %val) {
; SM70-LABEL: fmax_acq_rel_v8f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<34>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [fmax_acq_rel_v8f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [fmax_acq_rel_v8f64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [fmax_acq_rel_v8f64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [fmax_acq_rel_v8f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [fmax_acq_rel_v8f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd26, [%rd17];
; SM70-NEXT: $L__BB279_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd26;
; SM70-NEXT: max.f64 %rd18, %rd5, %rd4;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd26, [%rd17], %rd5, %rd18;
; SM70-NEXT: setp.ne.b64 %p1, %rd26, %rd5;
; SM70-NEXT: @%p1 bra $L__BB279_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd27, [%rd17+8];
; SM70-NEXT: $L__BB279_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd27;
; SM70-NEXT: max.f64 %rd19, %rd6, %rd3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd27, [%rd17+8], %rd6, %rd19;
; SM70-NEXT: setp.ne.b64 %p2, %rd27, %rd6;
; SM70-NEXT: @%p2 bra $L__BB279_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd28, [%rd17+16];
; SM70-NEXT: $L__BB279_5: // %atomicrmw.start23
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd28;
; SM70-NEXT: max.f64 %rd20, %rd8, %rd2;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd28, [%rd17+16], %rd8, %rd20;
; SM70-NEXT: setp.ne.b64 %p3, %rd28, %rd8;
; SM70-NEXT: @%p3 bra $L__BB279_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end22
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd29, [%rd17+24];
; SM70-NEXT: $L__BB279_7: // %atomicrmw.start30
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd29;
; SM70-NEXT: max.f64 %rd21, %rd9, %rd7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd29, [%rd17+24], %rd9, %rd21;
; SM70-NEXT: setp.ne.b64 %p4, %rd29, %rd9;
; SM70-NEXT: @%p4 bra $L__BB279_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end29
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd30, [%rd17+32];
; SM70-NEXT: $L__BB279_9: // %atomicrmw.start45
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd30;
; SM70-NEXT: max.f64 %rd22, %rd12, %rd1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd30, [%rd17+32], %rd12, %rd22;
; SM70-NEXT: setp.ne.b64 %p5, %rd30, %rd12;
; SM70-NEXT: @%p5 bra $L__BB279_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end44
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd31, [%rd17+40];
; SM70-NEXT: $L__BB279_11: // %atomicrmw.start52
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd31;
; SM70-NEXT: max.f64 %rd23, %rd13, %rd11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd31, [%rd17+40], %rd13, %rd23;
; SM70-NEXT: setp.ne.b64 %p6, %rd31, %rd13;
; SM70-NEXT: @%p6 bra $L__BB279_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end51
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd32, [%rd17+48];
; SM70-NEXT: $L__BB279_13: // %atomicrmw.start63
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd32;
; SM70-NEXT: max.f64 %rd24, %rd15, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd32, [%rd17+48], %rd15, %rd24;
; SM70-NEXT: setp.ne.b64 %p7, %rd32, %rd15;
; SM70-NEXT: @%p7 bra $L__BB279_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end62
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd33, [%rd17+56];
; SM70-NEXT: $L__BB279_15: // %atomicrmw.start70
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: max.f64 %rd25, %rd33, %rd14;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd33, %rd25;
; SM70-NEXT: setp.ne.b64 %p8, %rd16, %rd33;
; SM70-NEXT: mov.b64 %rd33, %rd16;
; SM70-NEXT: @%p8 bra $L__BB279_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end69
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd32, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd30, %rd31};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd26, %rd27};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd28, %rd29};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <8 x double> %val syncscope("block") acq_rel
ret <8 x double> %retval
}
define <1 x double> @fminimum_acq_rel_v1f64_global_cta(ptr addrspace(1) %addr, <1 x double> %val) {
; SM70-LABEL: fminimum_acq_rel_v1f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<9>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [fminimum_acq_rel_v1f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v1f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd8, [%rd3];
; SM70-NEXT: $L__BB280_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p1, %rd8, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd4, %rd8, %rd1, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd8, %rd1;
; SM70-NEXT: min.f64 %rd5, %rd8, %rd1;
; SM70-NEXT: selp.f64 %rd6, 0d7FF8000000000000, %rd5, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd8, %rd1;
; SM70-NEXT: selp.f64 %rd7, %rd4, %rd6, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd8, %rd7;
; SM70-NEXT: setp.ne.b64 %p4, %rd2, %rd8;
; SM70-NEXT: mov.b64 %rd8, %rd2;
; SM70-NEXT: @%p4 bra $L__BB280_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <1 x double> %val syncscope("block") acq_rel
ret <1 x double> %retval
}
define <2 x double> @fminimum_acq_rel_v2f64_global_cta(ptr addrspace(1) %addr, <2 x double> %val) {
; SM70-LABEL: fminimum_acq_rel_v2f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<16>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [fminimum_acq_rel_v2f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [fminimum_acq_rel_v2f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd14, [%rd5];
; SM70-NEXT: $L__BB281_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd14;
; SM70-NEXT: setp.eq.b64 %p1, %rd3, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd6, %rd3, %rd2, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd3, %rd2;
; SM70-NEXT: min.f64 %rd7, %rd3, %rd2;
; SM70-NEXT: selp.f64 %rd8, 0d7FF8000000000000, %rd7, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd3, %rd2;
; SM70-NEXT: selp.f64 %rd9, %rd6, %rd8, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd14, [%rd5], %rd3, %rd9;
; SM70-NEXT: setp.ne.b64 %p4, %rd14, %rd3;
; SM70-NEXT: @%p4 bra $L__BB281_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd15, [%rd5+8];
; SM70-NEXT: $L__BB281_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p5, %rd15, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd10, %rd15, %rd1, %p5;
; SM70-NEXT: setp.nan.f64 %p6, %rd15, %rd1;
; SM70-NEXT: min.f64 %rd11, %rd15, %rd1;
; SM70-NEXT: selp.f64 %rd12, 0d7FF8000000000000, %rd11, %p6;
; SM70-NEXT: setp.eq.f64 %p7, %rd15, %rd1;
; SM70-NEXT: selp.f64 %rd13, %rd10, %rd12, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd15, %rd13;
; SM70-NEXT: setp.ne.b64 %p8, %rd4, %rd15;
; SM70-NEXT: mov.b64 %rd15, %rd4;
; SM70-NEXT: @%p8 bra $L__BB281_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd14, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <2 x double> %val syncscope("block") acq_rel
ret <2 x double> %retval
}
define <4 x double> @fminimum_acq_rel_v4f64_global_cta(ptr addrspace(1) %addr, <4 x double> %val) {
; SM70-LABEL: fminimum_acq_rel_v4f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<17>;
; SM70-NEXT: .reg .b64 %rd<30>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [fminimum_acq_rel_v4f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [fminimum_acq_rel_v4f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [fminimum_acq_rel_v4f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd26, [%rd9];
; SM70-NEXT: $L__BB282_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd26;
; SM70-NEXT: setp.eq.b64 %p1, %rd4, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd10, %rd4, %rd3, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd4, %rd3;
; SM70-NEXT: min.f64 %rd11, %rd4, %rd3;
; SM70-NEXT: selp.f64 %rd12, 0d7FF8000000000000, %rd11, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd4, %rd3;
; SM70-NEXT: selp.f64 %rd13, %rd10, %rd12, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd26, [%rd9], %rd4, %rd13;
; SM70-NEXT: setp.ne.b64 %p4, %rd26, %rd4;
; SM70-NEXT: @%p4 bra $L__BB282_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd27, [%rd9+8];
; SM70-NEXT: $L__BB282_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd27;
; SM70-NEXT: setp.eq.b64 %p5, %rd5, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd14, %rd5, %rd2, %p5;
; SM70-NEXT: setp.nan.f64 %p6, %rd5, %rd2;
; SM70-NEXT: min.f64 %rd15, %rd5, %rd2;
; SM70-NEXT: selp.f64 %rd16, 0d7FF8000000000000, %rd15, %p6;
; SM70-NEXT: setp.eq.f64 %p7, %rd5, %rd2;
; SM70-NEXT: selp.f64 %rd17, %rd14, %rd16, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd27, [%rd9+8], %rd5, %rd17;
; SM70-NEXT: setp.ne.b64 %p8, %rd27, %rd5;
; SM70-NEXT: @%p8 bra $L__BB282_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd28, [%rd9+16];
; SM70-NEXT: $L__BB282_5: // %atomicrmw.start19
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd28;
; SM70-NEXT: setp.eq.b64 %p9, %rd7, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd18, %rd7, %rd1, %p9;
; SM70-NEXT: setp.nan.f64 %p10, %rd7, %rd1;
; SM70-NEXT: min.f64 %rd19, %rd7, %rd1;
; SM70-NEXT: selp.f64 %rd20, 0d7FF8000000000000, %rd19, %p10;
; SM70-NEXT: setp.eq.f64 %p11, %rd7, %rd1;
; SM70-NEXT: selp.f64 %rd21, %rd18, %rd20, %p11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd28, [%rd9+16], %rd7, %rd21;
; SM70-NEXT: setp.ne.b64 %p12, %rd28, %rd7;
; SM70-NEXT: @%p12 bra $L__BB282_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end18
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd29, [%rd9+24];
; SM70-NEXT: $L__BB282_7: // %atomicrmw.start26
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p13, %rd29, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd22, %rd29, %rd6, %p13;
; SM70-NEXT: setp.nan.f64 %p14, %rd29, %rd6;
; SM70-NEXT: min.f64 %rd23, %rd29, %rd6;
; SM70-NEXT: selp.f64 %rd24, 0d7FF8000000000000, %rd23, %p14;
; SM70-NEXT: setp.eq.f64 %p15, %rd29, %rd6;
; SM70-NEXT: selp.f64 %rd25, %rd22, %rd24, %p15;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd29, %rd25;
; SM70-NEXT: setp.ne.b64 %p16, %rd8, %rd29;
; SM70-NEXT: mov.b64 %rd29, %rd8;
; SM70-NEXT: @%p16 bra $L__BB282_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end25
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd28, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd26, %rd27};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <4 x double> %val syncscope("block") acq_rel
ret <4 x double> %retval
}
define <8 x double> @fminimum_acq_rel_v8f64_global_cta(ptr addrspace(1) %addr, <8 x double> %val) {
; SM70-LABEL: fminimum_acq_rel_v8f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<33>;
; SM70-NEXT: .reg .b64 %rd<58>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [fminimum_acq_rel_v8f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [fminimum_acq_rel_v8f64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [fminimum_acq_rel_v8f64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [fminimum_acq_rel_v8f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [fminimum_acq_rel_v8f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd50, [%rd17];
; SM70-NEXT: $L__BB283_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd50;
; SM70-NEXT: setp.eq.b64 %p1, %rd5, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd18, %rd5, %rd4, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd5, %rd4;
; SM70-NEXT: min.f64 %rd19, %rd5, %rd4;
; SM70-NEXT: selp.f64 %rd20, 0d7FF8000000000000, %rd19, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd5, %rd4;
; SM70-NEXT: selp.f64 %rd21, %rd18, %rd20, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd50, [%rd17], %rd5, %rd21;
; SM70-NEXT: setp.ne.b64 %p4, %rd50, %rd5;
; SM70-NEXT: @%p4 bra $L__BB283_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd51, [%rd17+8];
; SM70-NEXT: $L__BB283_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd51;
; SM70-NEXT: setp.eq.b64 %p5, %rd6, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd22, %rd6, %rd3, %p5;
; SM70-NEXT: setp.nan.f64 %p6, %rd6, %rd3;
; SM70-NEXT: min.f64 %rd23, %rd6, %rd3;
; SM70-NEXT: selp.f64 %rd24, 0d7FF8000000000000, %rd23, %p6;
; SM70-NEXT: setp.eq.f64 %p7, %rd6, %rd3;
; SM70-NEXT: selp.f64 %rd25, %rd22, %rd24, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd51, [%rd17+8], %rd6, %rd25;
; SM70-NEXT: setp.ne.b64 %p8, %rd51, %rd6;
; SM70-NEXT: @%p8 bra $L__BB283_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd52, [%rd17+16];
; SM70-NEXT: $L__BB283_5: // %atomicrmw.start23
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd52;
; SM70-NEXT: setp.eq.b64 %p9, %rd8, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd26, %rd8, %rd2, %p9;
; SM70-NEXT: setp.nan.f64 %p10, %rd8, %rd2;
; SM70-NEXT: min.f64 %rd27, %rd8, %rd2;
; SM70-NEXT: selp.f64 %rd28, 0d7FF8000000000000, %rd27, %p10;
; SM70-NEXT: setp.eq.f64 %p11, %rd8, %rd2;
; SM70-NEXT: selp.f64 %rd29, %rd26, %rd28, %p11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd52, [%rd17+16], %rd8, %rd29;
; SM70-NEXT: setp.ne.b64 %p12, %rd52, %rd8;
; SM70-NEXT: @%p12 bra $L__BB283_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end22
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd53, [%rd17+24];
; SM70-NEXT: $L__BB283_7: // %atomicrmw.start30
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd53;
; SM70-NEXT: setp.eq.b64 %p13, %rd9, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd30, %rd9, %rd7, %p13;
; SM70-NEXT: setp.nan.f64 %p14, %rd9, %rd7;
; SM70-NEXT: min.f64 %rd31, %rd9, %rd7;
; SM70-NEXT: selp.f64 %rd32, 0d7FF8000000000000, %rd31, %p14;
; SM70-NEXT: setp.eq.f64 %p15, %rd9, %rd7;
; SM70-NEXT: selp.f64 %rd33, %rd30, %rd32, %p15;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd53, [%rd17+24], %rd9, %rd33;
; SM70-NEXT: setp.ne.b64 %p16, %rd53, %rd9;
; SM70-NEXT: @%p16 bra $L__BB283_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end29
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd54, [%rd17+32];
; SM70-NEXT: $L__BB283_9: // %atomicrmw.start45
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd54;
; SM70-NEXT: setp.eq.b64 %p17, %rd12, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd34, %rd12, %rd1, %p17;
; SM70-NEXT: setp.nan.f64 %p18, %rd12, %rd1;
; SM70-NEXT: min.f64 %rd35, %rd12, %rd1;
; SM70-NEXT: selp.f64 %rd36, 0d7FF8000000000000, %rd35, %p18;
; SM70-NEXT: setp.eq.f64 %p19, %rd12, %rd1;
; SM70-NEXT: selp.f64 %rd37, %rd34, %rd36, %p19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd54, [%rd17+32], %rd12, %rd37;
; SM70-NEXT: setp.ne.b64 %p20, %rd54, %rd12;
; SM70-NEXT: @%p20 bra $L__BB283_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end44
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd55, [%rd17+40];
; SM70-NEXT: $L__BB283_11: // %atomicrmw.start52
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd55;
; SM70-NEXT: setp.eq.b64 %p21, %rd13, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd38, %rd13, %rd11, %p21;
; SM70-NEXT: setp.nan.f64 %p22, %rd13, %rd11;
; SM70-NEXT: min.f64 %rd39, %rd13, %rd11;
; SM70-NEXT: selp.f64 %rd40, 0d7FF8000000000000, %rd39, %p22;
; SM70-NEXT: setp.eq.f64 %p23, %rd13, %rd11;
; SM70-NEXT: selp.f64 %rd41, %rd38, %rd40, %p23;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd55, [%rd17+40], %rd13, %rd41;
; SM70-NEXT: setp.ne.b64 %p24, %rd55, %rd13;
; SM70-NEXT: @%p24 bra $L__BB283_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end51
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd56, [%rd17+48];
; SM70-NEXT: $L__BB283_13: // %atomicrmw.start63
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd56;
; SM70-NEXT: setp.eq.b64 %p25, %rd15, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd42, %rd15, %rd10, %p25;
; SM70-NEXT: setp.nan.f64 %p26, %rd15, %rd10;
; SM70-NEXT: min.f64 %rd43, %rd15, %rd10;
; SM70-NEXT: selp.f64 %rd44, 0d7FF8000000000000, %rd43, %p26;
; SM70-NEXT: setp.eq.f64 %p27, %rd15, %rd10;
; SM70-NEXT: selp.f64 %rd45, %rd42, %rd44, %p27;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd56, [%rd17+48], %rd15, %rd45;
; SM70-NEXT: setp.ne.b64 %p28, %rd56, %rd15;
; SM70-NEXT: @%p28 bra $L__BB283_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end62
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd57, [%rd17+56];
; SM70-NEXT: $L__BB283_15: // %atomicrmw.start70
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p29, %rd57, -9223372036854775808;
; SM70-NEXT: selp.f64 %rd46, %rd57, %rd14, %p29;
; SM70-NEXT: setp.nan.f64 %p30, %rd57, %rd14;
; SM70-NEXT: min.f64 %rd47, %rd57, %rd14;
; SM70-NEXT: selp.f64 %rd48, 0d7FF8000000000000, %rd47, %p30;
; SM70-NEXT: setp.eq.f64 %p31, %rd57, %rd14;
; SM70-NEXT: selp.f64 %rd49, %rd46, %rd48, %p31;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd57, %rd49;
; SM70-NEXT: setp.ne.b64 %p32, %rd16, %rd57;
; SM70-NEXT: mov.b64 %rd57, %rd16;
; SM70-NEXT: @%p32 bra $L__BB283_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end69
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd56, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd54, %rd55};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd50, %rd51};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd52, %rd53};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <8 x double> %val syncscope("block") acq_rel
ret <8 x double> %retval
}
define <1 x double> @fmaximum_acq_rel_v1f64_global_cta(ptr addrspace(1) %addr, <1 x double> %val) {
; SM70-LABEL: fmaximum_acq_rel_v1f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b64 %rd<9>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd3, [fmaximum_acq_rel_v1f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v1f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd8, [%rd3];
; SM70-NEXT: $L__BB284_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p1, %rd8, 0;
; SM70-NEXT: selp.f64 %rd4, %rd8, %rd1, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd8, %rd1;
; SM70-NEXT: max.f64 %rd5, %rd8, %rd1;
; SM70-NEXT: selp.f64 %rd6, 0d7FF8000000000000, %rd5, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd8, %rd1;
; SM70-NEXT: selp.f64 %rd7, %rd4, %rd6, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd2, [%rd3], %rd8, %rd7;
; SM70-NEXT: setp.ne.b64 %p4, %rd2, %rd8;
; SM70-NEXT: mov.b64 %rd8, %rd2;
; SM70-NEXT: @%p4 bra $L__BB284_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b64 [func_retval0], %rd2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <1 x double> %val syncscope("block") acq_rel
ret <1 x double> %retval
}
define <2 x double> @fmaximum_acq_rel_v2f64_global_cta(ptr addrspace(1) %addr, <2 x double> %val) {
; SM70-LABEL: fmaximum_acq_rel_v2f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<9>;
; SM70-NEXT: .reg .b64 %rd<16>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd5, [fmaximum_acq_rel_v2f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd1}, [fmaximum_acq_rel_v2f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd14, [%rd5];
; SM70-NEXT: $L__BB285_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd3, %rd14;
; SM70-NEXT: setp.eq.b64 %p1, %rd3, 0;
; SM70-NEXT: selp.f64 %rd6, %rd3, %rd2, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd3, %rd2;
; SM70-NEXT: max.f64 %rd7, %rd3, %rd2;
; SM70-NEXT: selp.f64 %rd8, 0d7FF8000000000000, %rd7, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd3, %rd2;
; SM70-NEXT: selp.f64 %rd9, %rd6, %rd8, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd14, [%rd5], %rd3, %rd9;
; SM70-NEXT: setp.ne.b64 %p4, %rd14, %rd3;
; SM70-NEXT: @%p4 bra $L__BB285_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd15, [%rd5+8];
; SM70-NEXT: $L__BB285_3: // %atomicrmw.start4
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p5, %rd15, 0;
; SM70-NEXT: selp.f64 %rd10, %rd15, %rd1, %p5;
; SM70-NEXT: setp.nan.f64 %p6, %rd15, %rd1;
; SM70-NEXT: max.f64 %rd11, %rd15, %rd1;
; SM70-NEXT: selp.f64 %rd12, 0d7FF8000000000000, %rd11, %p6;
; SM70-NEXT: setp.eq.f64 %p7, %rd15, %rd1;
; SM70-NEXT: selp.f64 %rd13, %rd10, %rd12, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd4, [%rd5+8], %rd15, %rd13;
; SM70-NEXT: setp.ne.b64 %p8, %rd4, %rd15;
; SM70-NEXT: mov.b64 %rd15, %rd4;
; SM70-NEXT: @%p8 bra $L__BB285_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end3
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd14, %rd4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <2 x double> %val syncscope("block") acq_rel
ret <2 x double> %retval
}
define <4 x double> @fmaximum_acq_rel_v4f64_global_cta(ptr addrspace(1) %addr, <4 x double> %val) {
; SM70-LABEL: fmaximum_acq_rel_v4f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<17>;
; SM70-NEXT: .reg .b64 %rd<30>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd9, [fmaximum_acq_rel_v4f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd6}, [fmaximum_acq_rel_v4f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd3, %rd2}, [fmaximum_acq_rel_v4f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd26, [%rd9];
; SM70-NEXT: $L__BB286_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd4, %rd26;
; SM70-NEXT: setp.eq.b64 %p1, %rd4, 0;
; SM70-NEXT: selp.f64 %rd10, %rd4, %rd3, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd4, %rd3;
; SM70-NEXT: max.f64 %rd11, %rd4, %rd3;
; SM70-NEXT: selp.f64 %rd12, 0d7FF8000000000000, %rd11, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd4, %rd3;
; SM70-NEXT: selp.f64 %rd13, %rd10, %rd12, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd26, [%rd9], %rd4, %rd13;
; SM70-NEXT: setp.ne.b64 %p4, %rd26, %rd4;
; SM70-NEXT: @%p4 bra $L__BB286_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd27, [%rd9+8];
; SM70-NEXT: $L__BB286_3: // %atomicrmw.start8
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd27;
; SM70-NEXT: setp.eq.b64 %p5, %rd5, 0;
; SM70-NEXT: selp.f64 %rd14, %rd5, %rd2, %p5;
; SM70-NEXT: setp.nan.f64 %p6, %rd5, %rd2;
; SM70-NEXT: max.f64 %rd15, %rd5, %rd2;
; SM70-NEXT: selp.f64 %rd16, 0d7FF8000000000000, %rd15, %p6;
; SM70-NEXT: setp.eq.f64 %p7, %rd5, %rd2;
; SM70-NEXT: selp.f64 %rd17, %rd14, %rd16, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd27, [%rd9+8], %rd5, %rd17;
; SM70-NEXT: setp.ne.b64 %p8, %rd27, %rd5;
; SM70-NEXT: @%p8 bra $L__BB286_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end7
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd28, [%rd9+16];
; SM70-NEXT: $L__BB286_5: // %atomicrmw.start19
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd7, %rd28;
; SM70-NEXT: setp.eq.b64 %p9, %rd7, 0;
; SM70-NEXT: selp.f64 %rd18, %rd7, %rd1, %p9;
; SM70-NEXT: setp.nan.f64 %p10, %rd7, %rd1;
; SM70-NEXT: max.f64 %rd19, %rd7, %rd1;
; SM70-NEXT: selp.f64 %rd20, 0d7FF8000000000000, %rd19, %p10;
; SM70-NEXT: setp.eq.f64 %p11, %rd7, %rd1;
; SM70-NEXT: selp.f64 %rd21, %rd18, %rd20, %p11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd28, [%rd9+16], %rd7, %rd21;
; SM70-NEXT: setp.ne.b64 %p12, %rd28, %rd7;
; SM70-NEXT: @%p12 bra $L__BB286_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end18
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd29, [%rd9+24];
; SM70-NEXT: $L__BB286_7: // %atomicrmw.start26
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p13, %rd29, 0;
; SM70-NEXT: selp.f64 %rd22, %rd29, %rd6, %p13;
; SM70-NEXT: setp.nan.f64 %p14, %rd29, %rd6;
; SM70-NEXT: max.f64 %rd23, %rd29, %rd6;
; SM70-NEXT: selp.f64 %rd24, 0d7FF8000000000000, %rd23, %p14;
; SM70-NEXT: setp.eq.f64 %p15, %rd29, %rd6;
; SM70-NEXT: selp.f64 %rd25, %rd22, %rd24, %p15;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd8, [%rd9+24], %rd29, %rd25;
; SM70-NEXT: setp.ne.b64 %p16, %rd8, %rd29;
; SM70-NEXT: mov.b64 %rd29, %rd8;
; SM70-NEXT: @%p16 bra $L__BB286_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end25
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd28, %rd8};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd26, %rd27};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <4 x double> %val syncscope("block") acq_rel
ret <4 x double> %retval
}
define <8 x double> @fmaximum_acq_rel_v8f64_global_cta(ptr addrspace(1) %addr, <8 x double> %val) {
; SM70-LABEL: fmaximum_acq_rel_v8f64_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<33>;
; SM70-NEXT: .reg .b64 %rd<58>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd17, [fmaximum_acq_rel_v8f64_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b64 {%rd10, %rd14}, [fmaximum_acq_rel_v8f64_global_cta_param_1+48];
; SM70-NEXT: ld.param.v2.b64 {%rd1, %rd11}, [fmaximum_acq_rel_v8f64_global_cta_param_1+32];
; SM70-NEXT: ld.param.v2.b64 {%rd2, %rd7}, [fmaximum_acq_rel_v8f64_global_cta_param_1+16];
; SM70-NEXT: ld.param.v2.b64 {%rd4, %rd3}, [fmaximum_acq_rel_v8f64_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd50, [%rd17];
; SM70-NEXT: $L__BB287_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd5, %rd50;
; SM70-NEXT: setp.eq.b64 %p1, %rd5, 0;
; SM70-NEXT: selp.f64 %rd18, %rd5, %rd4, %p1;
; SM70-NEXT: setp.nan.f64 %p2, %rd5, %rd4;
; SM70-NEXT: max.f64 %rd19, %rd5, %rd4;
; SM70-NEXT: selp.f64 %rd20, 0d7FF8000000000000, %rd19, %p2;
; SM70-NEXT: setp.eq.f64 %p3, %rd5, %rd4;
; SM70-NEXT: selp.f64 %rd21, %rd18, %rd20, %p3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd50, [%rd17], %rd5, %rd21;
; SM70-NEXT: setp.ne.b64 %p4, %rd50, %rd5;
; SM70-NEXT: @%p4 bra $L__BB287_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd51, [%rd17+8];
; SM70-NEXT: $L__BB287_3: // %atomicrmw.start12
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd6, %rd51;
; SM70-NEXT: setp.eq.b64 %p5, %rd6, 0;
; SM70-NEXT: selp.f64 %rd22, %rd6, %rd3, %p5;
; SM70-NEXT: setp.nan.f64 %p6, %rd6, %rd3;
; SM70-NEXT: max.f64 %rd23, %rd6, %rd3;
; SM70-NEXT: selp.f64 %rd24, 0d7FF8000000000000, %rd23, %p6;
; SM70-NEXT: setp.eq.f64 %p7, %rd6, %rd3;
; SM70-NEXT: selp.f64 %rd25, %rd22, %rd24, %p7;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd51, [%rd17+8], %rd6, %rd25;
; SM70-NEXT: setp.ne.b64 %p8, %rd51, %rd6;
; SM70-NEXT: @%p8 bra $L__BB287_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end11
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd52, [%rd17+16];
; SM70-NEXT: $L__BB287_5: // %atomicrmw.start23
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd8, %rd52;
; SM70-NEXT: setp.eq.b64 %p9, %rd8, 0;
; SM70-NEXT: selp.f64 %rd26, %rd8, %rd2, %p9;
; SM70-NEXT: setp.nan.f64 %p10, %rd8, %rd2;
; SM70-NEXT: max.f64 %rd27, %rd8, %rd2;
; SM70-NEXT: selp.f64 %rd28, 0d7FF8000000000000, %rd27, %p10;
; SM70-NEXT: setp.eq.f64 %p11, %rd8, %rd2;
; SM70-NEXT: selp.f64 %rd29, %rd26, %rd28, %p11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd52, [%rd17+16], %rd8, %rd29;
; SM70-NEXT: setp.ne.b64 %p12, %rd52, %rd8;
; SM70-NEXT: @%p12 bra $L__BB287_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end22
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd53, [%rd17+24];
; SM70-NEXT: $L__BB287_7: // %atomicrmw.start30
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd9, %rd53;
; SM70-NEXT: setp.eq.b64 %p13, %rd9, 0;
; SM70-NEXT: selp.f64 %rd30, %rd9, %rd7, %p13;
; SM70-NEXT: setp.nan.f64 %p14, %rd9, %rd7;
; SM70-NEXT: max.f64 %rd31, %rd9, %rd7;
; SM70-NEXT: selp.f64 %rd32, 0d7FF8000000000000, %rd31, %p14;
; SM70-NEXT: setp.eq.f64 %p15, %rd9, %rd7;
; SM70-NEXT: selp.f64 %rd33, %rd30, %rd32, %p15;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd53, [%rd17+24], %rd9, %rd33;
; SM70-NEXT: setp.ne.b64 %p16, %rd53, %rd9;
; SM70-NEXT: @%p16 bra $L__BB287_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end29
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd54, [%rd17+32];
; SM70-NEXT: $L__BB287_9: // %atomicrmw.start45
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd12, %rd54;
; SM70-NEXT: setp.eq.b64 %p17, %rd12, 0;
; SM70-NEXT: selp.f64 %rd34, %rd12, %rd1, %p17;
; SM70-NEXT: setp.nan.f64 %p18, %rd12, %rd1;
; SM70-NEXT: max.f64 %rd35, %rd12, %rd1;
; SM70-NEXT: selp.f64 %rd36, 0d7FF8000000000000, %rd35, %p18;
; SM70-NEXT: setp.eq.f64 %p19, %rd12, %rd1;
; SM70-NEXT: selp.f64 %rd37, %rd34, %rd36, %p19;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd54, [%rd17+32], %rd12, %rd37;
; SM70-NEXT: setp.ne.b64 %p20, %rd54, %rd12;
; SM70-NEXT: @%p20 bra $L__BB287_9;
; SM70-NEXT: // %bb.10: // %atomicrmw.end44
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd55, [%rd17+40];
; SM70-NEXT: $L__BB287_11: // %atomicrmw.start52
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd13, %rd55;
; SM70-NEXT: setp.eq.b64 %p21, %rd13, 0;
; SM70-NEXT: selp.f64 %rd38, %rd13, %rd11, %p21;
; SM70-NEXT: setp.nan.f64 %p22, %rd13, %rd11;
; SM70-NEXT: max.f64 %rd39, %rd13, %rd11;
; SM70-NEXT: selp.f64 %rd40, 0d7FF8000000000000, %rd39, %p22;
; SM70-NEXT: setp.eq.f64 %p23, %rd13, %rd11;
; SM70-NEXT: selp.f64 %rd41, %rd38, %rd40, %p23;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd55, [%rd17+40], %rd13, %rd41;
; SM70-NEXT: setp.ne.b64 %p24, %rd55, %rd13;
; SM70-NEXT: @%p24 bra $L__BB287_11;
; SM70-NEXT: // %bb.12: // %atomicrmw.end51
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd56, [%rd17+48];
; SM70-NEXT: $L__BB287_13: // %atomicrmw.start63
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: mov.b64 %rd15, %rd56;
; SM70-NEXT: setp.eq.b64 %p25, %rd15, 0;
; SM70-NEXT: selp.f64 %rd42, %rd15, %rd10, %p25;
; SM70-NEXT: setp.nan.f64 %p26, %rd15, %rd10;
; SM70-NEXT: max.f64 %rd43, %rd15, %rd10;
; SM70-NEXT: selp.f64 %rd44, 0d7FF8000000000000, %rd43, %p26;
; SM70-NEXT: setp.eq.f64 %p27, %rd15, %rd10;
; SM70-NEXT: selp.f64 %rd45, %rd42, %rd44, %p27;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd56, [%rd17+48], %rd15, %rd45;
; SM70-NEXT: setp.ne.b64 %p28, %rd56, %rd15;
; SM70-NEXT: @%p28 bra $L__BB287_13;
; SM70-NEXT: // %bb.14: // %atomicrmw.end62
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd57, [%rd17+56];
; SM70-NEXT: $L__BB287_15: // %atomicrmw.start70
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: setp.eq.b64 %p29, %rd57, 0;
; SM70-NEXT: selp.f64 %rd46, %rd57, %rd14, %p29;
; SM70-NEXT: setp.nan.f64 %p30, %rd57, %rd14;
; SM70-NEXT: max.f64 %rd47, %rd57, %rd14;
; SM70-NEXT: selp.f64 %rd48, 0d7FF8000000000000, %rd47, %p30;
; SM70-NEXT: setp.eq.f64 %p31, %rd57, %rd14;
; SM70-NEXT: selp.f64 %rd49, %rd46, %rd48, %p31;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd16, [%rd17+56], %rd57, %rd49;
; SM70-NEXT: setp.ne.b64 %p32, %rd16, %rd57;
; SM70-NEXT: mov.b64 %rd57, %rd16;
; SM70-NEXT: @%p32 bra $L__BB287_15;
; SM70-NEXT: // %bb.16: // %atomicrmw.end69
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b64 [func_retval0+48], {%rd56, %rd16};
; SM70-NEXT: st.param.v2.b64 [func_retval0+32], {%rd54, %rd55};
; SM70-NEXT: st.param.v2.b64 [func_retval0], {%rd50, %rd51};
; SM70-NEXT: st.param.v2.b64 [func_retval0+16], {%rd52, %rd53};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <8 x double> %val syncscope("block") acq_rel
ret <8 x double> %retval
}
define <1 x half> @fadd_acq_rel_v1f16_global_cta(ptr addrspace(1) %addr, <1 x half> %val) {
; SM70-LABEL: fadd_acq_rel_v1f16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b16 %rs<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v1f16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b16 %rs1, [fadd_acq_rel_v1f16_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs2, [%rd1], %rs1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %rs2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <1 x half> %val syncscope("block") acq_rel
ret <1 x half> %retval
}
define <2 x half> @fadd_acq_rel_v2f16_global_cta(ptr addrspace(1) %addr, <2 x half> %val) {
; SM70-LABEL: fadd_acq_rel_v2f16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b16 %rs<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2f16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b16 {%rs1, %rs2}, [fadd_acq_rel_v2f16_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs3, [%rd1], %rs1;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs4, [%rd1+2], %rs2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b16 [func_retval0], {%rs3, %rs4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <2 x half> %val syncscope("block") acq_rel
ret <2 x half> %retval
}
define <4 x half> @fadd_acq_rel_v4f16_global_cta(ptr addrspace(1) %addr, <4 x half> %val) {
; SM70-LABEL: fadd_acq_rel_v4f16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b16 %rs<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4f16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b16 {%rs1, %rs2, %rs3, %rs4}, [fadd_acq_rel_v4f16_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs5, [%rd1], %rs1;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1+2], %rs2;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs7, [%rd1+4], %rs3;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs8, [%rd1+6], %rs4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b16 [func_retval0], {%rs5, %rs6, %rs7, %rs8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <4 x half> %val syncscope("block") acq_rel
ret <4 x half> %retval
}
define <8 x half> @fadd_acq_rel_v8f16_global_cta(ptr addrspace(1) %addr, <8 x half> %val) {
; SM70-LABEL: fadd_acq_rel_v8f16_global_cta(
; SM70: {
; SM70-NEXT: .reg .b16 %rs<17>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8f16_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8f16_global_cta_param_1];
; SM70-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-NEXT: mov.b32 {%rs3, %rs4}, %r3;
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NEXT: mov.b32 {%rs7, %rs8}, %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs9, [%rd1], %rs7;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1+2], %rs8;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs11, [%rd1+4], %rs5;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+6], %rs6;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs13, [%rd1+8], %rs3;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs14, [%rd1+10], %rs4;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs15, [%rd1+12], %rs1;
; SM70-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs16, [%rd1+14], %rs2;
; SM70-NEXT: mov.b32 %r5, {%rs9, %rs10};
; SM70-NEXT: mov.b32 %r6, {%rs11, %rs12};
; SM70-NEXT: mov.b32 %r7, {%rs13, %rs14};
; SM70-NEXT: mov.b32 %r8, {%rs15, %rs16};
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <8 x half> %val syncscope("block") acq_rel
ret <8 x half> %retval
}
define <1 x half> @fsub_acq_rel_v1f16_global_cta(ptr addrspace(1) %addr, <1 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs3, [%rd1], %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs3, [%rd1], %rs2;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %rs3;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v1f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs3, [%rd1], %rs2;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %rs3;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v1f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs3, [%rd1], %rs2;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %rs3;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <1 x half> %val syncscope("block") acq_rel
ret <1 x half> %retval
}
define <2 x half> @fsub_acq_rel_v2f16_global_cta(ptr addrspace(1) %addr, <2 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b16 {%rs1, %rs2}, [fsub_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs4, [%rd1], %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1+2], %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b16 [func_retval0], {%rs4, %rs6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b16 {%rs1, %rs2}, [fsub_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs4, [%rd1], %rs3;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1+2], %rs5;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b16 [func_retval0], {%rs4, %rs6};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v2f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b16 {%rs1, %rs2}, [fsub_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs4, [%rd1], %rs3;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1+2], %rs5;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b16 [func_retval0], {%rs4, %rs6};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v2f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b16 {%rs1, %rs2}, [fsub_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs4, [%rd1], %rs3;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs5, %rs2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1+2], %rs5;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b16 [func_retval0], {%rs4, %rs6};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <2 x half> %val syncscope("block") acq_rel
ret <2 x half> %retval
}
define <4 x half> @fsub_acq_rel_v4f16_global_cta(ptr addrspace(1) %addr, <4 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b16 {%rs1, %rs2, %rs3, %rs4}, [fsub_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs5, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1], %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs7, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs8, [%rd1+2], %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1+4], %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs11, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+6], %rs11;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b16 [func_retval0], {%rs6, %rs8, %rs10, %rs12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b16 {%rs1, %rs2, %rs3, %rs4}, [fsub_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs5, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1], %rs5;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs7, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs8, [%rd1+2], %rs7;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1+4], %rs9;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs11, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+6], %rs11;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b16 [func_retval0], {%rs6, %rs8, %rs10, %rs12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v4f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b16 {%rs1, %rs2, %rs3, %rs4}, [fsub_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs5, %rs1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1], %rs5;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs7, %rs2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs8, [%rd1+2], %rs7;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1+4], %rs9;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs11, %rs4;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+6], %rs11;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b16 [func_retval0], {%rs6, %rs8, %rs10, %rs12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v4f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b16 {%rs1, %rs2, %rs3, %rs4}, [fsub_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs5, %rs1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs6, [%rd1], %rs5;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs7, %rs2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs8, [%rd1+2], %rs7;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs9, %rs3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1+4], %rs9;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs11, %rs4;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+6], %rs11;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b16 [func_retval0], {%rs6, %rs8, %rs10, %rs12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <4 x half> %val syncscope("block") acq_rel
ret <4 x half> %retval
}
define <8 x half> @fsub_acq_rel_v8f16_global_cta(ptr addrspace(1) %addr, <8 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<9>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs9, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1], %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs11, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+2], %rs11;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs13, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs14, [%rd1+4], %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs15, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs16, [%rd1+6], %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs17, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs18, [%rd1+8], %rs17;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs19, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs20, [%rd1+10], %rs19;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs21, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs22, [%rd1+12], %rs21;
; SM70-NOFTZ-DISALLOW-NEXT: neg.f16 %rs23, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs24, [%rd1+14], %rs23;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r5, {%rs10, %rs12};
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r6, {%rs14, %rs16};
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r7, {%rs18, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r8, {%rs22, %rs24};
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<9>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs9, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1], %rs9;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs11, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+2], %rs11;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs13, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs14, [%rd1+4], %rs13;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs15, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs16, [%rd1+6], %rs15;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs17, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs18, [%rd1+8], %rs17;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs19, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs20, [%rd1+10], %rs19;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs21, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs22, [%rd1+12], %rs21;
; SM70-NOFTZ-ALLOW-NEXT: neg.f16 %rs23, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs24, [%rd1+14], %rs23;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r5, {%rs10, %rs12};
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r6, {%rs14, %rs16};
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r7, {%rs18, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r8, {%rs22, %rs24};
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v8f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<9>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r1;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs9, %rs7;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1], %rs9;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs11, %rs8;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+2], %rs11;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs13, %rs5;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs14, [%rd1+4], %rs13;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs15, %rs6;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs16, [%rd1+6], %rs15;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs17, %rs3;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs18, [%rd1+8], %rs17;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs19, %rs4;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs20, [%rd1+10], %rs19;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs21, %rs1;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs22, [%rd1+12], %rs21;
; SM70-FTZ-DISALLOW-NEXT: neg.ftz.f16 %rs23, %rs2;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs24, [%rd1+14], %rs23;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r5, {%rs10, %rs12};
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r6, {%rs14, %rs16};
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r7, {%rs18, %rs20};
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r8, {%rs22, %rs24};
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v8f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<9>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r1;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs9, %rs7;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs10, [%rd1], %rs9;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs11, %rs8;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs12, [%rd1+2], %rs11;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs13, %rs5;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs14, [%rd1+4], %rs13;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs15, %rs6;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs16, [%rd1+6], %rs15;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs17, %rs3;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs18, [%rd1+8], %rs17;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs19, %rs4;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs20, [%rd1+10], %rs19;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs21, %rs1;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs22, [%rd1+12], %rs21;
; SM70-FTZ-ALLOW-NEXT: neg.ftz.f16 %rs23, %rs2;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.add.noftz.f16 %rs24, [%rd1+14], %rs23;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r5, {%rs10, %rs12};
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r6, {%rs14, %rs16};
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r7, {%rs18, %rs20};
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r8, {%rs22, %rs24};
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <8 x half> %val syncscope("block") acq_rel
ret <8 x half> %retval
}
define <1 x half> @fmin_acq_rel_v1f16_global_cta(ptr addrspace(1) %addr, <1 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB296_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r8, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r10, %r8, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB296_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB296_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r8, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r10, %r8, %r9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB296_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v1f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: $L__BB296_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs2;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r10, %r8, %r9;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB296_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v1f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: $L__BB296_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs2;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r10, %r8, %r9;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB296_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <1 x half> %val syncscope("block") acq_rel
ret <1 x half> %retval
}
define <2 x half> @fmin_acq_rel_v2f16_global_cta(ptr addrspace(1) %addr, <2 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<11>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB297_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r5, %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r8, %r7, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB297_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<11>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB297_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r5, %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r8, %r7, %r6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB297_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v2f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<11>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-DISALLOW-NEXT: $L__BB297_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB297_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v2f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<11>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-ALLOW-NEXT: $L__BB297_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB297_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <2 x half> %val syncscope("block") acq_rel
ret <2 x half> %retval
}
define <4 x half> @fmin_acq_rel_v4f16_global_cta(ptr addrspace(1) %addr, <4 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<19>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r10, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB298_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r5, %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r8, %r7, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r11, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r12, %r11, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r13, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r14, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r15, %r14, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB298_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<19>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r10, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB298_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r5, %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r8, %r7, %r6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r11, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r12, %r11, %r10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r13, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r14, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r15, %r14, %r13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB298_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v4f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<19>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r10, %rs8;
; SM70-FTZ-DISALLOW-NEXT: $L__BB298_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r11, %rs10;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r12, %r11, %r10;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r14, %rs9;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r15, %r14, %r13;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB298_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v4f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<19>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r10, %rs8;
; SM70-FTZ-ALLOW-NEXT: $L__BB298_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r11, %rs10;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r12, %r11, %r10;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r14, %rs9;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r15, %r14, %r13;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB298_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <4 x half> %val syncscope("block") acq_rel
ret <4 x half> %retval
}
define <8 x half> @fmin_acq_rel_v8f16_global_cta(ptr addrspace(1) %addr, <8 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<37>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB299_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r6, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r7, %r6, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r8, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r10, %r9, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r12, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r13, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r14, %r13, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r15, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r16, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r17, %r16, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB299_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB299_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r19, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r20, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r21, %r20, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r22, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r23, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r24, %r23, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r26, %rs20;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r27, %rs22;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r28, %r27, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r29, %rs19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r30, %rs21;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r31, %r30, %r29;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB299_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<37>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB299_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r6, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r7, %r6, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r8, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r10, %r9, %r8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r12, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r13, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r14, %r13, %r12;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r15, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r16, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r17, %r16, %r15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB299_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB299_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r19, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r20, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r21, %r20, %r19;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r22, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r23, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r24, %r23, %r22;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r26, %rs20;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r27, %rs22;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r28, %r27, %r26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r29, %rs19;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r30, %rs21;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r31, %r30, %r29;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB299_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v8f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<37>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB299_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs4;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r7, %r6, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs1;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r10, %r9, %r8;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r12, %rs8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs10;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r14, %r13, %r12;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r15, %rs7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r16, %rs9;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r17, %r16, %r15;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB299_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-FTZ-DISALLOW-NEXT: $L__BB299_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r19, %rs14;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r20, %rs16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r21, %r20, %r19;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r22, %rs13;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r23, %rs15;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r24, %r23, %r22;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r26, %rs20;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r27, %rs22;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r28, %r27, %r26;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r29, %rs19;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r30, %rs21;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r31, %r30, %r29;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB299_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v8f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<37>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB299_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs4;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r7, %r6, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs1;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs3;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r10, %r9, %r8;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r12, %rs8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs10;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r14, %r13, %r12;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r15, %rs7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r16, %rs9;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r17, %r16, %r15;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB299_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-FTZ-ALLOW-NEXT: $L__BB299_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r19, %rs14;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r20, %rs16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r21, %r20, %r19;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r22, %rs13;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r23, %rs15;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r24, %r23, %r22;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r26, %rs20;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r27, %rs22;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r28, %r27, %r26;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r29, %rs19;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r30, %rs21;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r31, %r30, %r29;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB299_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <8 x half> %val syncscope("block") acq_rel
ret <8 x half> %retval
}
define <1 x half> @fmax_acq_rel_v1f16_global_cta(ptr addrspace(1) %addr, <1 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB300_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r8, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r10, %r8, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB300_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB300_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r8, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r10, %r8, %r9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB300_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v1f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: $L__BB300_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs2;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r10, %r8, %r9;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB300_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v1f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: $L__BB300_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs2;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r10, %r8, %r9;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs3, %r10;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r3, %r16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB300_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <1 x half> %val syncscope("block") acq_rel
ret <1 x half> %retval
}
define <2 x half> @fmax_acq_rel_v2f16_global_cta(ptr addrspace(1) %addr, <2 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<11>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB301_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r5, %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r8, %r7, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB301_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<11>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB301_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r5, %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r8, %r7, %r6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB301_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v2f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<11>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-DISALLOW-NEXT: $L__BB301_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB301_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v2f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<11>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r10, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-ALLOW-NEXT: $L__BB301_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r10;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r10, %r9;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p1, %r1, %r10;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r10, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB301_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <2 x half> %val syncscope("block") acq_rel
ret <2 x half> %retval
}
define <4 x half> @fmax_acq_rel_v4f16_global_cta(ptr addrspace(1) %addr, <4 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<19>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r10, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB302_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r5, %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r8, %r7, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r11, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r12, %r11, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r13, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r14, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r15, %r14, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB302_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<19>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r10, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB302_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r4, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r5, %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r6, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r7, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r8, %r7, %r6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r11, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r12, %r11, %r10;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r13, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r14, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r15, %r14, %r13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB302_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v4f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<19>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r10, %rs8;
; SM70-FTZ-DISALLOW-NEXT: $L__BB302_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r11, %rs10;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r12, %r11, %r10;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r14, %rs9;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r15, %r14, %r13;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB302_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v4f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<19>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r10, %rs8;
; SM70-FTZ-ALLOW-NEXT: $L__BB302_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r17;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r4, %rs4;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r5, %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs1;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r7, %rs3;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r8, %r7, %r6;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r9, {%rs6, %rs5};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r18;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r11, %rs10;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r12, %r11, %r10;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r12;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r14, %rs9;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r15, %r14, %r13;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r15;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r16, {%rs12, %rs11};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r16;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r17;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r18;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r17, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB302_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r17, %r18};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <4 x half> %val syncscope("block") acq_rel
ret <4 x half> %retval
}
define <8 x half> @fmax_acq_rel_v8f16_global_cta(ptr addrspace(1) %addr, <8 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<37>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB303_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r6, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r7, %r6, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r8, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r10, %r9, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r12, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r13, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r14, %r13, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r15, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r16, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r17, %r16, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p1 bra $L__BB303_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB303_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r19, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r20, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r21, %r20, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r22, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r23, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r24, %r23, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r26, %rs20;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r27, %rs22;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r28, %r27, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r29, %rs19;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.f32.f16 %r30, %rs21;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r31, %r30, %r29;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB303_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<37>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB303_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r6, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r7, %r6, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r8, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r10, %r9, %r8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r12, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r13, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r14, %r13, %r12;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r15, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r16, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r17, %r16, %r15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p1 bra $L__BB303_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB303_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r19, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r20, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r21, %r20, %r19;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r22, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r23, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r24, %r23, %r22;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r26, %rs20;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r27, %rs22;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r28, %r27, %r26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r29, %rs19;
; SM70-NOFTZ-ALLOW-NEXT: cvt.f32.f16 %r30, %rs21;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r31, %r30, %r29;
; SM70-NOFTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB303_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v8f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<37>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB303_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs4;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r7, %r6, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs1;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r10, %r9, %r8;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r12, %rs8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs10;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r14, %r13, %r12;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r15, %rs7;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r16, %rs9;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r17, %r16, %r15;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p1 bra $L__BB303_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-FTZ-DISALLOW-NEXT: $L__BB303_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r19, %rs14;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r20, %rs16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r21, %r20, %r19;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r22, %rs13;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r23, %rs15;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r24, %r23, %r22;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r26, %rs20;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r27, %rs22;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r28, %r27, %r26;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r29, %rs19;
; SM70-FTZ-DISALLOW-NEXT: cvt.ftz.f32.f16 %r30, %rs21;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r31, %r30, %r29;
; SM70-FTZ-DISALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB303_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v8f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<37>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB303_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r33;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r6, %rs4;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r7, %r6, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs5, %r7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r8, %rs1;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r9, %rs3;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r10, %r9, %r8;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs6, %r10;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r11, {%rs6, %rs5};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r12, %rs8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r34;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r13, %rs10;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r14, %r13, %r12;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs11, %r14;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r15, %rs7;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r16, %rs9;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r17, %r16, %r15;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs12, %r17;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r18, {%rs12, %rs11};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p1 bra $L__BB303_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs19, %rs20}, %r4;
; SM70-FTZ-ALLOW-NEXT: $L__BB303_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r19, %rs14;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r35;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r20, %rs16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r21, %r20, %r19;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs17, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r22, %rs13;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r23, %rs15;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r24, %r23, %r22;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs18, %r24;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r25, {%rs18, %rs17};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r25;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r26, %rs20;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs21, %rs22}, %r36;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r27, %rs22;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r28, %r27, %r26;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs23, %r28;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r29, %rs19;
; SM70-FTZ-ALLOW-NEXT: cvt.ftz.f32.f16 %r30, %rs21;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r31, %r30, %r29;
; SM70-FTZ-ALLOW-NEXT: cvt.rn.f16.f32 %rs24, %r31;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r32, {%rs24, %rs23};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r32;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r35;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r36;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p2, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r36}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r35, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB303_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r33, %r34, %r35, %r36};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <8 x half> %val syncscope("block") acq_rel
ret <8 x half> %retval
}
define <1 x half> @fminimum_acq_rel_v1f16_global_cta(ptr addrspace(1) %addr, <1 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<14>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB304_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p2, %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB304_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<14>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: $L__BB304_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p2, %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB304_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v1f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<14>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: $L__BB304_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB304_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v1f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<14>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-FTZ-ALLOW-NEXT: $L__BB304_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB304_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <1 x half> %val syncscope("block") acq_rel
ret <1 x half> %retval
}
define <2 x half> @fminimum_acq_rel_v2f16_global_cta(ptr addrspace(1) %addr, <2 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB305_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p9 bra $L__BB305_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB305_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p9 bra $L__BB305_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v2f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB305_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p9 bra $L__BB305_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v2f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB305_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p9 bra $L__BB305_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <2 x half> %val syncscope("block") acq_rel
ret <2 x half> %retval
}
define <4 x half> @fminimum_acq_rel_v4f16_global_cta(ptr addrspace(1) %addr, <4 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB306_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB306_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB306_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB306_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v4f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB306_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB306_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v4f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB306_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB306_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <4 x half> %val syncscope("block") acq_rel
ret <4 x half> %retval
}
define <8 x half> @fminimum_acq_rel_v8f16_global_cta(ptr addrspace(1) %addr, <8 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB307_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB307_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB307_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p19, %rs28, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p20, %rs28, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p21, %rs28, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p23, %rs27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p24, %rs27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p25, %rs27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p27, %rs40, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p28, %rs40, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p29, %rs40, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f16 %p31, %rs39, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p32, %rs39, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p33, %rs39, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p34 bra $L__BB307_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB307_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB307_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB307_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p19, %rs28, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p20, %rs28, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p21, %rs28, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p23, %rs27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p24, %rs27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p25, %rs27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p27, %rs40, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p28, %rs40, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p29, %rs40, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f16 %p31, %rs39, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p32, %rs39, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p33, %rs39, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p34 bra $L__BB307_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v8f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB307_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB307_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB307_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p19, %rs28, %rs26;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p20, %rs28, %rs26;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p21, %rs28, %rs26;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p23, %rs27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p24, %rs27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p25, %rs27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p27, %rs40, %rs38;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p28, %rs40, %rs38;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p29, %rs40, %rs38;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f16 %p31, %rs39, %rs37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p32, %rs39, %rs37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p33, %rs39, %rs37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p34 bra $L__BB307_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v8f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB307_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB307_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB307_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p19, %rs28, %rs26;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p20, %rs28, %rs26;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p21, %rs28, %rs26;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p23, %rs27, %rs25;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p24, %rs27, %rs25;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p25, %rs27, %rs25;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p27, %rs40, %rs38;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p28, %rs40, %rs38;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p29, %rs40, %rs38;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f16 %p31, %rs39, %rs37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p32, %rs39, %rs37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p33, %rs39, %rs37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p34 bra $L__BB307_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <8 x half> %val syncscope("block") acq_rel
ret <8 x half> %retval
}
define <1 x half> @fmaximum_acq_rel_v1f16_global_cta(ptr addrspace(1) %addr, <1 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<14>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB308_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p2, %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs2, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB308_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v1f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<14>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: $L__BB308_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p2, %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs2, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB308_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v1f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<14>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: $L__BB308_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs2, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB308_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v1f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<14>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r13, [%rd1];
; SM70-FTZ-ALLOW-NEXT: $L__BB308_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r13, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7E00, %rs4, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs2, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r9, %r8, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r10, %r13, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r11, %r10, %r9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r13, %r11;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r13;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r13, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB308_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r12, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r12;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <1 x half> %val syncscope("block") acq_rel
ret <1 x half> %retval
}
define <2 x half> @fmaximum_acq_rel_v2f16_global_cta(ptr addrspace(1) %addr, <2 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB309_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p9 bra $L__BB309_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v2f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB309_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p9 bra $L__BB309_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v2f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB309_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p9 bra $L__BB309_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v2f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r4, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB309_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r4, %r3;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r4, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p9 bra $L__BB309_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <2 x half> %val syncscope("block") acq_rel
ret <2 x half> %retval
}
define <4 x half> @fmaximum_acq_rel_v4f16_global_cta(ptr addrspace(1) %addr, <4 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB310_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB310_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v4f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB310_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB310_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v4f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB310_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB310_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v4f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB310_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r5;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r3, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r6;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r4, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r4;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r5, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB310_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <4 x half> %val syncscope("block") acq_rel
ret <4 x half> %retval
}
define <8 x half> @fmaximum_acq_rel_v8f16_global_cta(ptr addrspace(1) %addr, <8 x half> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB311_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB311_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB311_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p19, %rs28, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p20, %rs28, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p21, %rs28, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p23, %rs27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p24, %rs27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p25, %rs27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p27, %rs40, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p28, %rs40, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p29, %rs40, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f16 %p31, %rs39, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f16 %p32, %rs39, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f16 %p33, %rs39, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p34 bra $L__BB311_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v8f16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB311_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p2, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p3, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p4, %rs4, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p6, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p7, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p8, %rs3, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p10, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p11, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p12, %rs16, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p14, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p15, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p16, %rs15, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB311_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB311_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p19, %rs28, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p20, %rs28, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p21, %rs28, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p23, %rs27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p24, %rs27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p25, %rs27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p27, %rs40, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p28, %rs40, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p29, %rs40, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f16 %p31, %rs39, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f16 %p32, %rs39, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f16 %p33, %rs39, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p34 bra $L__BB311_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v8f16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB311_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB311_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB311_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p19, %rs28, %rs26;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p20, %rs28, %rs26;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p21, %rs28, %rs26;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p23, %rs27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p24, %rs27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p25, %rs27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p27, %rs40, %rs38;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p28, %rs40, %rs38;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p29, %rs40, %rs38;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f16 %p31, %rs39, %rs37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f16 %p32, %rs39, %rs37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f16 %p33, %rs39, %rs37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p34 bra $L__BB311_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v8f16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8f16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8f16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB311_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r9;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p2, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p3, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7E00, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p4, %rs4, %rs2;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p6, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p7, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7E00, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p8, %rs3, %rs1;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r5, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r10;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p10, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p11, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7E00, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p12, %rs16, %rs14;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p14, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p15, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7E00, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p16, %rs15, %rs13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r6, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r9;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r10;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r9, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB311_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB311_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p19, %rs28, %rs26;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p20, %rs28, %rs26;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7E00, %rs30, %p20;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p21, %rs28, %rs26;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p23, %rs27, %rs25;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p24, %rs27, %rs25;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7E00, %rs34, %p24;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p25, %rs27, %rs25;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r7, {%rs36, %rs32};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r7;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p27, %rs40, %rs38;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p28, %rs40, %rs38;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7E00, %rs42, %p28;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p29, %rs40, %rs38;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f16 %p31, %rs39, %rs37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f16 %p32, %rs39, %rs37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7E00, %rs46, %p32;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f16 %p33, %rs39, %rs37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r8, {%rs48, %rs44};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r8;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r11;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r11, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p34 bra $L__BB311_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <8 x half> %val syncscope("block") acq_rel
ret <8 x half> %retval
}
define <1 x bfloat> @fadd_acq_rel_v1bf16_global_cta(ptr addrspace(1) %addr, <1 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fadd_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fadd_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB312_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r11, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB312_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fadd_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fadd_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB312_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r11, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB312_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v1bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fadd_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fadd_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB312_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB312_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v1bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fadd_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fadd_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB312_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB312_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <1 x bfloat> %val syncscope("block") acq_rel
ret <1 x bfloat> %retval
}
define <2 x bfloat> @fadd_acq_rel_v2bf16_global_cta(ptr addrspace(1) %addr, <2 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fadd_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB313_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB313_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fadd_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB313_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p3 bra $L__BB313_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v2bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fadd_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB313_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p3 bra $L__BB313_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v2bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fadd_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB313_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p3 bra $L__BB313_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <2 x bfloat> %val syncscope("block") acq_rel
ret <2 x bfloat> %retval
}
define <4 x bfloat> @fadd_acq_rel_v4bf16_global_cta(ptr addrspace(1) %addr, <4 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB314_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r30, %r29, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r41, %r40, %r38;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB314_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB314_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r30, %r29, %r27;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r41, %r40, %r38;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB314_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v4bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB314_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB314_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v4bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fadd_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB314_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB314_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <4 x bfloat> %val syncscope("block") acq_rel
ret <4 x bfloat> %retval
}
define <8 x bfloat> @fadd_acq_rel_v8bf16_global_cta(ptr addrspace(1) %addr, <8 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fadd_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB315_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r9, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r20, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r32, %r31, %r29;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r43, %r42, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB315_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB315_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r55, %r54, %r52;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r66, %r65, %r63;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r78, %r77, %r75;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-DISALLOW-NEXT: add.rn.f32 %r89, %r88, %r86;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p10 bra $L__BB315_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fadd_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB315_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r9, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r20, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r32, %r31, %r29;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r43, %r42, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB315_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB315_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r55, %r54, %r52;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r66, %r65, %r63;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r78, %r77, %r75;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-ALLOW-NEXT: add.rn.f32 %r89, %r88, %r86;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p10 bra $L__BB315_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fadd_acq_rel_v8bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB315_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB315_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-DISALLOW-NEXT: $L__BB315_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-DISALLOW-NEXT: add.rn.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p10 bra $L__BB315_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fadd_acq_rel_v8bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fadd_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fadd_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB315_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB315_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-ALLOW-NEXT: $L__BB315_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-ALLOW-NEXT: add.rn.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p10 bra $L__BB315_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fadd ptr addrspace(1) %addr, <8 x bfloat> %val syncscope("block") acq_rel
ret <8 x bfloat> %retval
}
define <1 x bfloat> @fsub_acq_rel_v1bf16_global_cta(ptr addrspace(1) %addr, <1 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fsub_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB316_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r11, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB316_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fsub_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB316_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r11, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB316_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v1bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fsub_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB316_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB316_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v1bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fsub_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fsub_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB316_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB316_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <1 x bfloat> %val syncscope("block") acq_rel
ret <1 x bfloat> %retval
}
define <2 x bfloat> @fsub_acq_rel_v2bf16_global_cta(ptr addrspace(1) %addr, <2 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fsub_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB317_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB317_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fsub_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB317_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p3 bra $L__BB317_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v2bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fsub_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB317_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p3 bra $L__BB317_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v2bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fsub_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB317_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p3 bra $L__BB317_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <2 x bfloat> %val syncscope("block") acq_rel
ret <2 x bfloat> %retval
}
define <4 x bfloat> @fsub_acq_rel_v4bf16_global_cta(ptr addrspace(1) %addr, <4 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB318_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r30, %r29, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r41, %r40, %r38;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB318_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB318_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r30, %r29, %r27;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r41, %r40, %r38;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB318_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v4bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB318_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB318_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v4bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fsub_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB318_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB318_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <4 x bfloat> %val syncscope("block") acq_rel
ret <4 x bfloat> %retval
}
define <8 x bfloat> @fsub_acq_rel_v8bf16_global_cta(ptr addrspace(1) %addr, <8 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fsub_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB319_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r9, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r20, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r32, %r31, %r29;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r43, %r42, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB319_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB319_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r55, %r54, %r52;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r66, %r65, %r63;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r78, %r77, %r75;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-DISALLOW-NEXT: sub.rn.f32 %r89, %r88, %r86;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p10 bra $L__BB319_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fsub_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB319_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r9, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r20, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r32, %r31, %r29;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r43, %r42, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB319_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB319_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r55, %r54, %r52;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r66, %r65, %r63;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r78, %r77, %r75;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-ALLOW-NEXT: sub.rn.f32 %r89, %r88, %r86;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p10 bra $L__BB319_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fsub_acq_rel_v8bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB319_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB319_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-DISALLOW-NEXT: $L__BB319_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-DISALLOW-NEXT: sub.rn.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p10 bra $L__BB319_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fsub_acq_rel_v8bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fsub_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fsub_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB319_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB319_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-ALLOW-NEXT: $L__BB319_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-ALLOW-NEXT: sub.rn.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p10 bra $L__BB319_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fsub ptr addrspace(1) %addr, <8 x bfloat> %val syncscope("block") acq_rel
ret <8 x bfloat> %retval
}
define <1 x bfloat> @fmin_acq_rel_v1bf16_global_cta(ptr addrspace(1) %addr, <1 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB320_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r11, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB320_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB320_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r11, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB320_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v1bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB320_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB320_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v1bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmin_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmin_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB320_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB320_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <1 x bfloat> %val syncscope("block") acq_rel
ret <1 x bfloat> %retval
}
define <2 x bfloat> @fmin_acq_rel_v2bf16_global_cta(ptr addrspace(1) %addr, <2 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB321_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB321_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB321_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p3 bra $L__BB321_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v2bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB321_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p3 bra $L__BB321_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v2bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmin_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB321_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p3 bra $L__BB321_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <2 x bfloat> %val syncscope("block") acq_rel
ret <2 x bfloat> %retval
}
define <4 x bfloat> @fmin_acq_rel_v4bf16_global_cta(ptr addrspace(1) %addr, <4 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB322_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r30, %r29, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r41, %r40, %r38;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB322_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB322_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r30, %r29, %r27;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r41, %r40, %r38;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB322_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v4bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB322_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB322_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v4bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmin_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB322_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB322_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <4 x bfloat> %val syncscope("block") acq_rel
ret <4 x bfloat> %retval
}
define <8 x bfloat> @fmin_acq_rel_v8bf16_global_cta(ptr addrspace(1) %addr, <8 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmin_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB323_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r9, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r20, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r32, %r31, %r29;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r43, %r42, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB323_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB323_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r55, %r54, %r52;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r66, %r65, %r63;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r78, %r77, %r75;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-DISALLOW-NEXT: min.f32 %r89, %r88, %r86;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p10 bra $L__BB323_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmin_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB323_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r9, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r20, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r32, %r31, %r29;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r43, %r42, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB323_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB323_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r55, %r54, %r52;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r66, %r65, %r63;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r78, %r77, %r75;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-ALLOW-NEXT: min.f32 %r89, %r88, %r86;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p10 bra $L__BB323_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmin_acq_rel_v8bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB323_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB323_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-DISALLOW-NEXT: $L__BB323_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-DISALLOW-NEXT: min.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p10 bra $L__BB323_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmin_acq_rel_v8bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmin_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmin_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB323_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB323_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-ALLOW-NEXT: $L__BB323_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-ALLOW-NEXT: min.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p10 bra $L__BB323_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmin ptr addrspace(1) %addr, <8 x bfloat> %val syncscope("block") acq_rel
ret <8 x bfloat> %retval
}
define <1 x bfloat> @fmax_acq_rel_v1bf16_global_cta(ptr addrspace(1) %addr, <1 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB324_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r11, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p2 bra $L__BB324_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB324_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r11, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r11, %r11;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p2 bra $L__BB324_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v1bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB324_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p2 bra $L__BB324_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v1bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<3>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<2>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<24>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmax_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmax_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r23, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB324_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r23, %r1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r11, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r12, %r11, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r12, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r14, %r13, %r11;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r15, %r14, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r11, %r11;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r16, %r11, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r17, %r16, %r15, %p1;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r18, %r17, 16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r23, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r21, %r20, %r19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r23, %r21;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p2, %r3, %r23;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r23, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p2 bra $L__BB324_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r22, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r22;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <1 x bfloat> %val syncscope("block") acq_rel
ret <1 x bfloat> %retval
}
define <2 x bfloat> @fmax_acq_rel_v2bf16_global_cta(ptr addrspace(1) %addr, <2 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB325_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p3 bra $L__BB325_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB325_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p3 bra $L__BB325_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v2bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB325_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p3 bra $L__BB325_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v2bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<4>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<5>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<27>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmax_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r26, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB325_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r26;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r26, %r25;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p3, %r1, %r26;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r26, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p3 bra $L__BB325_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <2 x bfloat> %val syncscope("block") acq_rel
ret <2 x bfloat> %retval
}
define <4 x bfloat> @fmax_acq_rel_v4bf16_global_cta(ptr addrspace(1) %addr, <4 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB326_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r7, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r18, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r30, %r29, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r41, %r40, %r38;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB326_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB326_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r7, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r7, %r7;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r18, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r18, %r18;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r30, %r29, %r27;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r30, %r30;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r41, %r40, %r38;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r41, %r41;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB326_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v4bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB326_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB326_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v4bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<9>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<51>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmax_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r26, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r27, %r26, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB326_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r7, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r9, %r8, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r10, %r9, %r7;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r11, %r10, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r7, %r7;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r12, %r7, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r13, %r12, %r11, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r18, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r20, %r19, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r21, %r20, %r18;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r22, %r21, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r18, %r18;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r23, %r18, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r24, %r23, %r22, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r25, %r24, %r13, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r50;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r30, %r29, %r27;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r32, %r31, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r33, %r32, %r30;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r34, %r33, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r30, %r30;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r35, %r30, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r36, %r35, %r34, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r37, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r38, %r37, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r41, %r40, %r38;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r43, %r42, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r44, %r43, %r41;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r45, %r44, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r41, %r41;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r46, %r41, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r47, %r46, %r45, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r48, %r47, %r36, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r48;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r49;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r50}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r49, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB326_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r49, %r50};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <4 x bfloat> %val syncscope("block") acq_rel
ret <4 x bfloat> %retval
}
define <8 x bfloat> @fmax_acq_rel_v8bf16_global_cta(ptr addrspace(1) %addr, <8 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmax_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB327_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r9, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r20, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r32, %r31, %r29;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r43, %r42, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB327_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB327_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r55, %r54, %r52;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r66, %r65, %r63;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r78, %r77, %r75;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-DISALLOW-NEXT: max.f32 %r89, %r88, %r86;
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p10 bra $L__BB327_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmax_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB327_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r9, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p1, %r9, %r9;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r20, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p2, %r20, %r20;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r32, %r31, %r29;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r32, %r32;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r43, %r42, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p4, %r43, %r43;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB327_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB327_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r55, %r54, %r52;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p6, %r55, %r55;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r66, %r65, %r63;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r66, %r66;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r78, %r77, %r75;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p8, %r78, %r78;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-NOFTZ-ALLOW-NEXT: max.f32 %r89, %r88, %r86;
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-NOFTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p9, %r89, %r89;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-NOFTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-NOFTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p10 bra $L__BB327_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmax_acq_rel_v8bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB327_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB327_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-DISALLOW-NEXT: $L__BB327_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-DISALLOW-NEXT: max.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-DISALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-DISALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-DISALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p10 bra $L__BB327_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmax_acq_rel_v8bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<11>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<101>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmax_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmax_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs5, %rs6}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB327_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r9, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r11, %r10, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r12, %r11, %r9;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r13, %r12, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p1, %r9, %r9;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r9, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r15, %r14, %r13, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r20, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r21, %r20, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r22, %r21, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r23, %r22, %r20;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r24, %r23, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p2, %r20, %r20;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r25, %r20, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r26, %r25, %r24, %p2;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r27, %r26, %r15, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r27;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r28, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r29, %r28, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs7, %rs8}, %r98;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r30, %rs8;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r31, %r30, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r32, %r31, %r29;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r33, %r32, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r34, %r33, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r35, %r34, %r32;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r36, %r35, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r32, %r32;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r37, %r32, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r38, %r37, %r36, %p3;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r39, %rs5;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r40, %r39, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r41, %rs7;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r42, %r41, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r43, %r42, %r40;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r44, %r43, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r45, %r44, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r46, %r45, %r43;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r47, %r46, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p4, %r43, %r43;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r48, %r43, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r49, %r48, %r47, %p4;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r50, %r49, %r38, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r50;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r97;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r98;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p5, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r98}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r97, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB327_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs9, %rs10}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r4;
; SM70-FTZ-ALLOW-NEXT: $L__BB327_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r51, %rs10;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r52, %r51, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs11, %rs12}, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r53, %rs12;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r54, %r53, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r55, %r54, %r52;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r56, %r55, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r57, %r56, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r58, %r57, %r55;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r59, %r58, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p6, %r55, %r55;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r60, %r55, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r61, %r60, %r59, %p6;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r62, %rs9;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r63, %r62, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r64, %rs11;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r65, %r64, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r66, %r65, %r63;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r67, %r66, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r68, %r67, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r69, %r68, %r66;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r70, %r69, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r66, %r66;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r71, %r66, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r72, %r71, %r70, %p7;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r73, %r72, %r61, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r73;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r74, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r75, %r74, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r100;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r76, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r77, %r76, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r78, %r77, %r75;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r79, %r78, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r80, %r79, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r81, %r80, %r78;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r82, %r81, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p8, %r78, %r78;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r83, %r78, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r84, %r83, %r82, %p8;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r85, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r86, %r85, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r87, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r88, %r87, 16;
; SM70-FTZ-ALLOW-NEXT: max.ftz.f32 %r89, %r88, %r86;
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r90, %r89, 16;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r91, %r90, 1;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r92, %r91, %r89;
; SM70-FTZ-ALLOW-NEXT: add.s32 %r93, %r92, 32767;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p9, %r89, %r89;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r94, %r89, 4194304;
; SM70-FTZ-ALLOW-NEXT: selp.b32 %r95, %r94, %r93, %p9;
; SM70-FTZ-ALLOW-NEXT: prmt.b32 %r96, %r95, %r84, 0x7632U;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r96;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r99;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r100;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p10, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r100}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r99, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p10 bra $L__BB327_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r97, %r98, %r99, %r100};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmax ptr addrspace(1) %addr, <8 x bfloat> %val syncscope("block") acq_rel
ret <8 x bfloat> %retval
}
define <1 x bfloat> @fminimum_acq_rel_v1bf16_global_cta(ptr addrspace(1) %addr, <1 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB328_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p2, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB328_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB328_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p2, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB328_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v1bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB328_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p2, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB328_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v1bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fminimum_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fminimum_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB328_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p2, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB328_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <1 x bfloat> %val syncscope("block") acq_rel
ret <1 x bfloat> %retval
}
define <2 x bfloat> @fminimum_acq_rel_v2bf16_global_cta(ptr addrspace(1) %addr, <2 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB329_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p9 bra $L__BB329_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB329_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p9 bra $L__BB329_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v2bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB329_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p9 bra $L__BB329_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v2bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fminimum_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB329_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p9 bra $L__BB329_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <2 x bfloat> %val syncscope("block") acq_rel
ret <2 x bfloat> %retval
}
define <4 x bfloat> @fminimum_acq_rel_v4bf16_global_cta(ptr addrspace(1) %addr, <4 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<23>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB330_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p10, %r15, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p11, %r15, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p12, %r15, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p14, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p15, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p16, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB330_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<23>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB330_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p10, %r15, %r13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p11, %r15, %r13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p12, %r15, %r13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p14, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p15, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p16, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB330_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v4bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<23>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB330_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p10, %r15, %r13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p11, %r15, %r13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p12, %r15, %r13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p14, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p15, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p16, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB330_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v4bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<23>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fminimum_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB330_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p10, %r15, %r13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p11, %r15, %r13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p12, %r15, %r13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p14, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p15, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p16, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB330_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <4 x bfloat> %val syncscope("block") acq_rel
ret <4 x bfloat> %retval
}
define <8 x bfloat> @fminimum_acq_rel_v8bf16_global_cta(ptr addrspace(1) %addr, <8 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fminimum_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<45>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB331_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p2, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p6, %r12, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r12, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p8, %r12, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p10, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p11, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p12, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p14, %r21, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p15, %r21, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p16, %r21, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB331_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB331_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p19, %r26, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p20, %r26, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p21, %r26, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p23, %r30, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p24, %r30, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p25, %r30, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p27, %r35, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p28, %r35, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p29, %r35, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.lt.f32 %p31, %r39, %r37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p32, %r39, %r37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p33, %r39, %r37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p34 bra $L__BB331_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fminimum_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<45>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB331_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p2, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p6, %r12, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r12, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p8, %r12, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p10, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p11, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p12, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p14, %r21, %r19;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p15, %r21, %r19;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p16, %r21, %r19;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB331_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB331_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p19, %r26, %r24;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p20, %r26, %r24;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p21, %r26, %r24;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p23, %r30, %r28;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p24, %r30, %r28;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p25, %r30, %r28;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p27, %r35, %r33;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p28, %r35, %r33;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p29, %r35, %r33;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.lt.f32 %p31, %r39, %r37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p32, %r39, %r37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p33, %r39, %r37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p34 bra $L__BB331_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fminimum_acq_rel_v8bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<45>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB331_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p2, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p6, %r12, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r12, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p8, %r12, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p10, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p11, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p12, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p14, %r21, %r19;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p15, %r21, %r19;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p16, %r21, %r19;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB331_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB331_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p19, %r26, %r24;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p20, %r26, %r24;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p21, %r26, %r24;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p23, %r30, %r28;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p24, %r30, %r28;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p25, %r30, %r28;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p27, %r35, %r33;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p28, %r35, %r33;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p29, %r35, %r33;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.lt.ftz.f32 %p31, %r39, %r37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p32, %r39, %r37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p33, %r39, %r37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p34 bra $L__BB331_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fminimum_acq_rel_v8bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<45>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fminimum_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fminimum_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB331_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p2, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p6, %r12, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r12, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p8, %r12, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p10, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p11, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p12, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p14, %r21, %r19;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p15, %r21, %r19;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p16, %r21, %r19;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB331_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB331_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p19, %r26, %r24;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p20, %r26, %r24;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p21, %r26, %r24;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p23, %r30, %r28;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p24, %r30, %r28;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p25, %r30, %r28;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p27, %r35, %r33;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p28, %r35, %r33;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p29, %r35, %r33;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, -32768;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-FTZ-ALLOW-NEXT: setp.lt.ftz.f32 %p31, %r39, %r37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p32, %r39, %r37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p33, %r39, %r37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p34 bra $L__BB331_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fminimum ptr addrspace(1) %addr, <8 x bfloat> %val syncscope("block") acq_rel
ret <8 x bfloat> %retval
}
define <1 x bfloat> @fmaximum_acq_rel_v1bf16_global_cta(ptr addrspace(1) %addr, <1 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB332_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p2, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r8, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: @%p5 bra $L__BB332_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v1bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-NOFTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB332_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p2, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r8, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-NOFTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-NOFTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-NOFTZ-ALLOW-NEXT: @%p5 bra $L__BB332_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v1bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-DISALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB332_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p2, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-DISALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-DISALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-DISALLOW-NEXT: @%p5 bra $L__BB332_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v1bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<6>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<7>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<17>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<3>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd2, [fmaximum_acq_rel_v1bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.b16 %rs1, [fmaximum_acq_rel_v1bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r4, %rd2;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r5, %r4, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r1, %r5, 3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, 65535, %r1;
; SM70-FTZ-ALLOW-NEXT: not.b32 %r2, %r6;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r16, [%rd1];
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB332_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r7, %r16, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u16.u32 %rs2, %r7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs2, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs3, %rs2, %rs1, %p1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p2, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs4, %rs2, %rs1, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, 0x7FC0, %rs4, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs3, %rs5, %p4;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs6;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r12, %r11, %r1;
; SM70-FTZ-ALLOW-NEXT: and.b32 %r13, %r16, %r2;
; SM70-FTZ-ALLOW-NEXT: or.b32 %r14, %r13, %r12;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r16, %r14;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p5, %r3, %r16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r16, %r3;
; SM70-FTZ-ALLOW-NEXT: @%p5 bra $L__BB332_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: shr.u32 %r15, %r3, %r1;
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b16 [func_retval0], %r15;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <1 x bfloat> %val syncscope("block") acq_rel
ret <1 x bfloat> %retval
}
define <2 x bfloat> @fmaximum_acq_rel_v2bf16_global_cta(ptr addrspace(1) %addr, <2 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB333_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: @%p9 bra $L__BB333_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v2bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB333_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-NOFTZ-ALLOW-NEXT: @%p9 bra $L__BB333_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v2bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB333_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-FTZ-DISALLOW-NEXT: @%p9 bra $L__BB333_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v2bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<10>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<13>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<2>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b32 %r2, [fmaximum_acq_rel_v2bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v2bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b32 %r12, [%rd1];
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB333_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r12, %r11;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b32 %p9, %r1, %r12;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r12, %r1;
; SM70-FTZ-ALLOW-NEXT: @%p9 bra $L__BB333_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <2 x bfloat> %val syncscope("block") acq_rel
ret <2 x bfloat> %retval
}
define <4 x bfloat> @fmaximum_acq_rel_v4bf16_global_cta(ptr addrspace(1) %addr, <4 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<23>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB334_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p10, %r15, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p11, %r15, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p12, %r15, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p14, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p15, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p16, %r19, %r17;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB334_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v4bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<23>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB334_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p2, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r6, %r4;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p6, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p8, %r10, %r8;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p10, %r15, %r13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p11, %r15, %r13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p12, %r15, %r13;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p14, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p15, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p16, %r19, %r17;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB334_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v4bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<23>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-FTZ-DISALLOW-NEXT: $L__BB334_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p10, %r15, %r13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p11, %r15, %r13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p12, %r15, %r13;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p14, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p15, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p16, %r19, %r17;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB334_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v4bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<18>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<25>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<23>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<12>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.v2.b32 {%r1, %r2}, [fmaximum_acq_rel_v4bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v4bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r3, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r4, %r3, 16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r12, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r13, %r12, 16;
; SM70-FTZ-ALLOW-NEXT: $L__BB334_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r21;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p2, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r6, %r4;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p6, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p8, %r10, %r8;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r11, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r11;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r22;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p10, %r15, %r13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p11, %r15, %r13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p12, %r15, %r13;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p14, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p15, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p16, %r19, %r17;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r20, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r20;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r21;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r21, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB334_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v2.b32 [func_retval0], {%r21, %r22};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <4 x bfloat> %val syncscope("block") acq_rel
ret <4 x bfloat> %retval
}
define <8 x bfloat> @fmaximum_acq_rel_v8bf16_global_cta(ptr addrspace(1) %addr, <8 x bfloat> %val) {
; SM70-NOFTZ-DISALLOW-LABEL: fmaximum_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-DISALLOW: {
; SM70-NOFTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b32 %r<45>;
; SM70-NOFTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-DISALLOW-EMPTY:
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB335_1: // %atomicrmw.start
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p2, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p3, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p4, %r8, %r6;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p6, %r12, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p7, %r12, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p8, %r12, %r10;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p10, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p11, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p12, %r17, %r15;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p14, %r21, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p15, %r21, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p16, %r21, %r19;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-DISALLOW-NEXT: @%p17 bra $L__BB335_1;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-DISALLOW-NEXT: $L__BB335_3: // %atomicrmw.start2
; SM70-NOFTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p19, %r26, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p20, %r26, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p21, %r26, %r24;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p23, %r30, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p24, %r30, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p25, %r30, %r28;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p27, %r35, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p28, %r35, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p29, %r35, %r33;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.gt.f32 %p31, %r39, %r37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-DISALLOW-NEXT: setp.nan.f32 %p32, %r39, %r37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-NOFTZ-DISALLOW-NEXT: setp.eq.f32 %p33, %r39, %r37;
; SM70-NOFTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-DISALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-DISALLOW-NEXT: @%p34 bra $L__BB335_3;
; SM70-NOFTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-DISALLOW-NEXT: ret;
;
; SM70-NOFTZ-ALLOW-LABEL: fmaximum_acq_rel_v8bf16_global_cta(
; SM70-NOFTZ-ALLOW: {
; SM70-NOFTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b32 %r<45>;
; SM70-NOFTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-NOFTZ-ALLOW-EMPTY:
; SM70-NOFTZ-ALLOW-NEXT: // %bb.0:
; SM70-NOFTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8bf16_global_cta_param_0];
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8bf16_global_cta_param_1];
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB335_1: // %atomicrmw.start
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p2, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p3, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p4, %r8, %r6;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p6, %r12, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p7, %r12, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p8, %r12, %r10;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p10, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p11, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p12, %r17, %r15;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p14, %r21, %r19;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p15, %r21, %r19;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p16, %r21, %r19;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-NOFTZ-ALLOW-NEXT: @%p17 bra $L__BB335_1;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NOFTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-NOFTZ-ALLOW-NEXT: $L__BB335_3: // %atomicrmw.start2
; SM70-NOFTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p19, %r26, %r24;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p20, %r26, %r24;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p21, %r26, %r24;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p23, %r30, %r28;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p24, %r30, %r28;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p25, %r30, %r28;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p27, %r35, %r33;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p28, %r35, %r33;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p29, %r35, %r33;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-NOFTZ-ALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-NOFTZ-ALLOW-NEXT: setp.gt.f32 %p31, %r39, %r37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-NOFTZ-ALLOW-NEXT: setp.nan.f32 %p32, %r39, %r37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-NOFTZ-ALLOW-NEXT: setp.eq.f32 %p33, %r39, %r37;
; SM70-NOFTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-NOFTZ-ALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-NOFTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-NOFTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-NOFTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-NOFTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-NOFTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-NOFTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-NOFTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-NOFTZ-ALLOW-NEXT: @%p34 bra $L__BB335_3;
; SM70-NOFTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NOFTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-NOFTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-NOFTZ-ALLOW-NEXT: ret;
;
; SM70-FTZ-DISALLOW-LABEL: fmaximum_acq_rel_v8bf16_global_cta(
; SM70-FTZ-DISALLOW: {
; SM70-FTZ-DISALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b32 %r<45>;
; SM70-FTZ-DISALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-DISALLOW-EMPTY:
; SM70-FTZ-DISALLOW-NEXT: // %bb.0:
; SM70-FTZ-DISALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-DISALLOW-NEXT: $L__BB335_1: // %atomicrmw.start
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p2, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r6;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p6, %r12, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p7, %r12, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p8, %r12, %r10;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p10, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p11, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p12, %r17, %r15;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p14, %r21, %r19;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p15, %r21, %r19;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p16, %r21, %r19;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-DISALLOW-NEXT: @%p17 bra $L__BB335_1;
; SM70-FTZ-DISALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-DISALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-DISALLOW-NEXT: $L__BB335_3: // %atomicrmw.start2
; SM70-FTZ-DISALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p19, %r26, %r24;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p20, %r26, %r24;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p21, %r26, %r24;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p23, %r30, %r28;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p24, %r30, %r28;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p25, %r30, %r28;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p27, %r35, %r33;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p28, %r35, %r33;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p29, %r35, %r33;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-FTZ-DISALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-FTZ-DISALLOW-NEXT: setp.gt.ftz.f32 %p31, %r39, %r37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-DISALLOW-NEXT: setp.nan.ftz.f32 %p32, %r39, %r37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-FTZ-DISALLOW-NEXT: setp.eq.ftz.f32 %p33, %r39, %r37;
; SM70-FTZ-DISALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-DISALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-DISALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-DISALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-DISALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-DISALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-DISALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-DISALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-DISALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-DISALLOW-NEXT: @%p34 bra $L__BB335_3;
; SM70-FTZ-DISALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-DISALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-DISALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-DISALLOW-NEXT: ret;
;
; SM70-FTZ-ALLOW-LABEL: fmaximum_acq_rel_v8bf16_global_cta(
; SM70-FTZ-ALLOW: {
; SM70-FTZ-ALLOW-NEXT: .reg .pred %p<35>;
; SM70-FTZ-ALLOW-NEXT: .reg .b16 %rs<49>;
; SM70-FTZ-ALLOW-NEXT: .reg .b32 %r<45>;
; SM70-FTZ-ALLOW-NEXT: .reg .b64 %rd<22>;
; SM70-FTZ-ALLOW-EMPTY:
; SM70-FTZ-ALLOW-NEXT: // %bb.0:
; SM70-FTZ-ALLOW-NEXT: ld.param.b64 %rd1, [fmaximum_acq_rel_v8bf16_global_cta_param_0];
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [fmaximum_acq_rel_v8bf16_global_cta_param_1];
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd2; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd2;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs1, %rs2}, %r1;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs13, %rs14}, %r2;
; SM70-FTZ-ALLOW-NEXT: $L__BB335_1: // %atomicrmw.start
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs3, %rs4}, %r41;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p1, %rs4, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs5, %rs4, %rs2, %p1;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r5, %rs2;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r6, %r5, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r7, %rs4;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r8, %r7, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p2, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs6, %rs4, %rs2, %p2;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p3, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs7, 0x7FC0, %rs6, %p3;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p4, %r8, %r6;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs8, %rs5, %rs7, %p4;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p5, %rs3, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs9, %rs3, %rs1, %p5;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r9, %rs1;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r10, %r9, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r11, %rs3;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r12, %r11, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p6, %r12, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs10, %rs3, %rs1, %p6;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p7, %r12, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs11, 0x7FC0, %rs10, %p7;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p8, %r12, %r10;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs12, %rs9, %rs11, %p8;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r13, {%rs12, %rs8};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd3, %r13;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs15, %rs16}, %r42;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p9, %rs16, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs17, %rs16, %rs14, %p9;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r14, %rs14;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r15, %r14, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r16, %rs16;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r17, %r16, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p10, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs18, %rs16, %rs14, %p10;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p11, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs19, 0x7FC0, %rs18, %p11;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p12, %r17, %r15;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs20, %rs17, %rs19, %p12;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p13, %rs15, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs21, %rs15, %rs13, %p13;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r18, %rs13;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r19, %r18, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r21, %r20, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p14, %r21, %r19;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs22, %rs15, %rs13, %p14;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p15, %r21, %r19;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs23, 0x7FC0, %rs22, %p15;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p16, %r21, %r19;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs24, %rs21, %rs23, %p16;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r22, {%rs24, %rs20};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd4, %r22;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd7, %r41;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd8, %r42;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p17, %rd11, %rd10;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r42}, %rd11; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r41, %rd11;
; SM70-FTZ-ALLOW-NEXT: @%p17 bra $L__BB335_1;
; SM70-FTZ-ALLOW-NEXT: // %bb.2: // %atomicrmw.end
; SM70-FTZ-ALLOW-NEXT: ld.relaxed.cta.global.b64 %rd12, [%rd1+8];
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd12; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd12;
; SM70-FTZ-ALLOW-NEXT: $L__BB335_3: // %atomicrmw.start2
; SM70-FTZ-ALLOW-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs25, %rs26}, %r3;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs27, %rs28}, %r43;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p18, %rs28, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs29, %rs28, %rs26, %p18;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r23, %rs26;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r24, %r23, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r25, %rs28;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r26, %r25, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p19, %r26, %r24;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs30, %rs28, %rs26, %p19;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p20, %r26, %r24;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs31, 0x7FC0, %rs30, %p20;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p21, %r26, %r24;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs32, %rs29, %rs31, %p21;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p22, %rs27, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs33, %rs27, %rs25, %p22;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r27, %rs25;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r28, %r27, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r29, %rs27;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r30, %r29, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p23, %r30, %r28;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs34, %rs27, %rs25, %p23;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p24, %r30, %r28;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs35, 0x7FC0, %rs34, %p24;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p25, %r30, %r28;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs36, %rs33, %rs35, %p25;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r31, {%rs36, %rs32};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd13, %r31;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs37, %rs38}, %r4;
; SM70-FTZ-ALLOW-NEXT: mov.b32 {%rs39, %rs40}, %r44;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p26, %rs40, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs41, %rs40, %rs38, %p26;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r32, %rs38;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r33, %r32, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r34, %rs40;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r35, %r34, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p27, %r35, %r33;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs42, %rs40, %rs38, %p27;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p28, %r35, %r33;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs43, 0x7FC0, %rs42, %p28;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p29, %r35, %r33;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs44, %rs41, %rs43, %p29;
; SM70-FTZ-ALLOW-NEXT: setp.eq.b16 %p30, %rs39, 0;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs45, %rs39, %rs37, %p30;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r36, %rs37;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r37, %r36, 16;
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u16 %r38, %rs39;
; SM70-FTZ-ALLOW-NEXT: shl.b32 %r39, %r38, 16;
; SM70-FTZ-ALLOW-NEXT: setp.gt.ftz.f32 %p31, %r39, %r37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs46, %rs39, %rs37, %p31;
; SM70-FTZ-ALLOW-NEXT: setp.nan.ftz.f32 %p32, %r39, %r37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs47, 0x7FC0, %rs46, %p32;
; SM70-FTZ-ALLOW-NEXT: setp.eq.ftz.f32 %p33, %r39, %r37;
; SM70-FTZ-ALLOW-NEXT: selp.b16 %rs48, %rs45, %rs47, %p33;
; SM70-FTZ-ALLOW-NEXT: mov.b32 %r40, {%rs48, %rs44};
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd14, %r40;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd15, %rd14, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd16, %rd13, %rd15;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd17, %r43;
; SM70-FTZ-ALLOW-NEXT: cvt.u64.u32 %rd18, %r44;
; SM70-FTZ-ALLOW-NEXT: shl.b64 %rd19, %rd18, 32;
; SM70-FTZ-ALLOW-NEXT: or.b64 %rd20, %rd17, %rd19;
; SM70-FTZ-ALLOW-NEXT: atom.relaxed.cta.global.cas.b64 %rd21, [%rd1+8], %rd20, %rd16;
; SM70-FTZ-ALLOW-NEXT: setp.ne.b64 %p34, %rd21, %rd20;
; SM70-FTZ-ALLOW-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r44}, %rd21; }
; SM70-FTZ-ALLOW-NEXT: cvt.u32.u64 %r43, %rd21;
; SM70-FTZ-ALLOW-NEXT: @%p34 bra $L__BB335_3;
; SM70-FTZ-ALLOW-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-FTZ-ALLOW-NEXT: fence.acq_rel.cta;
; SM70-FTZ-ALLOW-NEXT: st.param.v4.b32 [func_retval0], {%r41, %r42, %r43, %r44};
; SM70-FTZ-ALLOW-NEXT: ret;
%retval = atomicrmw elementwise fmaximum ptr addrspace(1) %addr, <8 x bfloat> %val syncscope("block") acq_rel
ret <8 x bfloat> %retval
}
define <1 x i8> @add_monotonic_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: add_monotonic_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [add_monotonic_v1i8_global_cta_param_0];
; SM70-NEXT: ld.param.b8 %r6, [add_monotonic_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB336_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB336_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") monotonic
ret <1 x i8> %retval
}
define <2 x i8> @add_monotonic_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: add_monotonic_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<12>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [add_monotonic_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [add_monotonic_v2i8_global_cta_param_0];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: $L__BB337_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: add.s16 %rs7, %rs4, %rs6;
; SM70-NEXT: add.s16 %rs8, %rs3, %rs5;
; SM70-NEXT: and.b16 %rs9, %rs8, 255;
; SM70-NEXT: shl.b16 %rs10, %rs7, 8;
; SM70-NEXT: or.b16 %rs11, %rs9, %rs10;
; SM70-NEXT: cvt.u32.u16 %r9, %rs11;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB337_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") monotonic
ret <2 x i8> %retval
}
define <4 x i8> @add_monotonic_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: add_monotonic_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [add_monotonic_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_monotonic_v4i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r6, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: $L__BB338_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r7, %r18, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r11, %r18, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r14, %r18, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p1 bra $L__BB338_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") monotonic
ret <4 x i8> %retval
}
define <8 x i8> @add_monotonic_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: add_monotonic_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_monotonic_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_monotonic_v8i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB339_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r4, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r6, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r10, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r11, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: prmt.b32 %r18, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r18;
; SM70-NEXT: prmt.b32 %r19, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r19;
; SM70-NEXT: add.s16 %rs15, %rs14, %rs13;
; SM70-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r21;
; SM70-NEXT: prmt.b32 %r22, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs17, %r22;
; SM70-NEXT: add.s16 %rs18, %rs17, %rs16;
; SM70-NEXT: cvt.u32.u16 %r23, %rs18;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs19, %r25;
; SM70-NEXT: prmt.b32 %r26, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs20, %r26;
; SM70-NEXT: add.s16 %rs21, %rs20, %rs19;
; SM70-NEXT: cvt.u32.u16 %r27, %rs21;
; SM70-NEXT: prmt.b32 %r28, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs22, %r28;
; SM70-NEXT: prmt.b32 %r29, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs23, %r29;
; SM70-NEXT: add.s16 %rs24, %rs23, %rs22;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r27, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r24, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd4, %r32;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p1 bra $L__BB339_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") monotonic
ret <8 x i8> %retval
}
define <1 x i8> @add_acquire_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: add_acquire_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [add_acquire_v1i8_global_cta_param_0];
; SM70-NEXT: ld.param.b8 %r6, [add_acquire_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB340_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB340_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acquire
ret <1 x i8> %retval
}
define <2 x i8> @add_acquire_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: add_acquire_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<12>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [add_acquire_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [add_acquire_v2i8_global_cta_param_0];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: $L__BB341_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: add.s16 %rs7, %rs4, %rs6;
; SM70-NEXT: add.s16 %rs8, %rs3, %rs5;
; SM70-NEXT: and.b16 %rs9, %rs8, 255;
; SM70-NEXT: shl.b16 %rs10, %rs7, 8;
; SM70-NEXT: or.b16 %rs11, %rs9, %rs10;
; SM70-NEXT: cvt.u32.u16 %r9, %rs11;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB341_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acquire
ret <2 x i8> %retval
}
define <4 x i8> @add_acquire_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: add_acquire_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [add_acquire_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_acquire_v4i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r6, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: $L__BB342_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r7, %r18, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r11, %r18, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r14, %r18, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p1 bra $L__BB342_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acquire
ret <4 x i8> %retval
}
define <8 x i8> @add_acquire_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: add_acquire_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_acquire_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_acquire_v8i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB343_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r4, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r6, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r10, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r11, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: prmt.b32 %r18, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r18;
; SM70-NEXT: prmt.b32 %r19, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r19;
; SM70-NEXT: add.s16 %rs15, %rs14, %rs13;
; SM70-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r21;
; SM70-NEXT: prmt.b32 %r22, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs17, %r22;
; SM70-NEXT: add.s16 %rs18, %rs17, %rs16;
; SM70-NEXT: cvt.u32.u16 %r23, %rs18;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs19, %r25;
; SM70-NEXT: prmt.b32 %r26, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs20, %r26;
; SM70-NEXT: add.s16 %rs21, %rs20, %rs19;
; SM70-NEXT: cvt.u32.u16 %r27, %rs21;
; SM70-NEXT: prmt.b32 %r28, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs22, %r28;
; SM70-NEXT: prmt.b32 %r29, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs23, %r29;
; SM70-NEXT: add.s16 %rs24, %rs23, %rs22;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r27, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r24, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd4, %r32;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p1 bra $L__BB343_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acquire
ret <8 x i8> %retval
}
define <1 x i8> @add_release_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: add_release_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [add_release_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r6, [add_release_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: $L__BB344_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: add.s32 %r9, %r14, %r4;
; SM70-NEXT: and.b32 %r10, %r9, %r2;
; SM70-NEXT: and.b32 %r11, %r14, %r3;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r14;
; SM70-NEXT: mov.b32 %r14, %r5;
; SM70-NEXT: @%p1 bra $L__BB344_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r5, %r1;
; SM70-NEXT: st.param.b8 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") release
ret <1 x i8> %retval
}
define <2 x i8> @add_release_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: add_release_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<12>;
; SM70-NEXT: .reg .b32 %r<15>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b8 {%rs1, %rs2}, [add_release_v2i8_global_cta_param_1];
; SM70-NEXT: mov.b32 %r4, {%rs1, %rs2};
; SM70-NEXT: ld.param.b64 %rd2, [add_release_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: and.b32 %r6, %r5, 3;
; SM70-NEXT: shl.b32 %r1, %r6, 3;
; SM70-NEXT: shl.b32 %r7, 65535, %r1;
; SM70-NEXT: not.b32 %r2, %r7;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r14, [%rd1];
; SM70-NEXT: mov.b32 {%rs5, %rs6}, %r4;
; SM70-NEXT: $L__BB345_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: shr.u32 %r8, %r14, %r1;
; SM70-NEXT: cvt.u16.u32 %rs3, %r8;
; SM70-NEXT: shr.u16 %rs4, %rs3, 8;
; SM70-NEXT: add.s16 %rs7, %rs4, %rs6;
; SM70-NEXT: add.s16 %rs8, %rs3, %rs5;
; SM70-NEXT: and.b16 %rs9, %rs8, 255;
; SM70-NEXT: shl.b16 %rs10, %rs7, 8;
; SM70-NEXT: or.b16 %rs11, %rs9, %rs10;
; SM70-NEXT: cvt.u32.u16 %r9, %rs11;
; SM70-NEXT: shl.b32 %r10, %r9, %r1;
; SM70-NEXT: and.b32 %r11, %r14, %r2;
; SM70-NEXT: or.b32 %r12, %r11, %r10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r3, [%rd1], %r14, %r12;
; SM70-NEXT: setp.ne.b32 %p1, %r3, %r14;
; SM70-NEXT: mov.b32 %r14, %r3;
; SM70-NEXT: @%p1 bra $L__BB345_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r13, %r3, %r1;
; SM70-NEXT: st.param.b16 [func_retval0], %r13;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") release
ret <2 x i8> %retval
}
define <4 x i8> @add_release_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: add_release_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<13>;
; SM70-NEXT: .reg .b32 %r<19>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [add_release_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_release_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r18, [%rd1];
; SM70-NEXT: prmt.b32 %r3, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r6, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r10, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r13, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: $L__BB346_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r4, %r18, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r7, %r18, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r11, %r18, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r14, %r18, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r18, %r17;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r18;
; SM70-NEXT: mov.b32 %r18, %r1;
; SM70-NEXT: @%p1 bra $L__BB346_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") release
ret <4 x i8> %retval
}
define <8 x i8> @add_release_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: add_release_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b16 %rs<25>;
; SM70-NEXT: .reg .b32 %r<35>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_release_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [add_release_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd2;
; SM70-NEXT: $L__BB347_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: prmt.b32 %r3, %r1, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs1, %r3;
; SM70-NEXT: prmt.b32 %r4, %r33, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs2, %r4;
; SM70-NEXT: add.s16 %rs3, %rs2, %rs1;
; SM70-NEXT: cvt.u32.u16 %r5, %rs3;
; SM70-NEXT: prmt.b32 %r6, %r1, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs4, %r6;
; SM70-NEXT: prmt.b32 %r7, %r33, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs5, %r7;
; SM70-NEXT: add.s16 %rs6, %rs5, %rs4;
; SM70-NEXT: cvt.u32.u16 %r8, %rs6;
; SM70-NEXT: prmt.b32 %r9, %r8, %r5, 0x3340U;
; SM70-NEXT: prmt.b32 %r10, %r1, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs7, %r10;
; SM70-NEXT: prmt.b32 %r11, %r33, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs8, %r11;
; SM70-NEXT: add.s16 %rs9, %rs8, %rs7;
; SM70-NEXT: cvt.u32.u16 %r12, %rs9;
; SM70-NEXT: prmt.b32 %r13, %r1, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs10, %r13;
; SM70-NEXT: prmt.b32 %r14, %r33, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs11, %r14;
; SM70-NEXT: add.s16 %rs12, %rs11, %rs10;
; SM70-NEXT: cvt.u32.u16 %r15, %rs12;
; SM70-NEXT: prmt.b32 %r16, %r15, %r12, 0x3340U;
; SM70-NEXT: prmt.b32 %r17, %r16, %r9, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: prmt.b32 %r18, %r2, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs13, %r18;
; SM70-NEXT: prmt.b32 %r19, %r34, 0, 0x7773U;
; SM70-NEXT: cvt.u16.u32 %rs14, %r19;
; SM70-NEXT: add.s16 %rs15, %rs14, %rs13;
; SM70-NEXT: cvt.u32.u16 %r20, %rs15;
; SM70-NEXT: prmt.b32 %r21, %r2, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs16, %r21;
; SM70-NEXT: prmt.b32 %r22, %r34, 0, 0x7772U;
; SM70-NEXT: cvt.u16.u32 %rs17, %r22;
; SM70-NEXT: add.s16 %rs18, %rs17, %rs16;
; SM70-NEXT: cvt.u32.u16 %r23, %rs18;
; SM70-NEXT: prmt.b32 %r24, %r23, %r20, 0x3340U;
; SM70-NEXT: prmt.b32 %r25, %r2, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs19, %r25;
; SM70-NEXT: prmt.b32 %r26, %r34, 0, 0x7771U;
; SM70-NEXT: cvt.u16.u32 %rs20, %r26;
; SM70-NEXT: add.s16 %rs21, %rs20, %rs19;
; SM70-NEXT: cvt.u32.u16 %r27, %rs21;
; SM70-NEXT: prmt.b32 %r28, %r2, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs22, %r28;
; SM70-NEXT: prmt.b32 %r29, %r34, 0, 0x7770U;
; SM70-NEXT: cvt.u16.u32 %rs23, %r29;
; SM70-NEXT: add.s16 %rs24, %rs23, %rs22;
; SM70-NEXT: cvt.u32.u16 %r30, %rs24;
; SM70-NEXT: prmt.b32 %r31, %r30, %r27, 0x3340U;
; SM70-NEXT: prmt.b32 %r32, %r31, %r24, 0x5410U;
; SM70-NEXT: cvt.u64.u32 %rd4, %r32;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r33;
; SM70-NEXT: cvt.u64.u32 %rd8, %r34;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd10, %rd6;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd10;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r34}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r33, %rd11;
; SM70-NEXT: @%p1 bra $L__BB347_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r33, %r34};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") release
ret <8 x i8> %retval
}
define <1 x i32> @add_monotonic_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: add_monotonic_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_monotonic_v1i32_global_cta_param_0];
; SM70-NEXT: ld.param.b32 %r1, [add_monotonic_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r2, [%rd1], %r1;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") monotonic
ret <1 x i32> %retval
}
define <2 x i32> @add_monotonic_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: add_monotonic_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_monotonic_v2i32_global_cta_param_0];
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_monotonic_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") monotonic
ret <2 x i32> %retval
}
define <4 x i32> @add_monotonic_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: add_monotonic_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_monotonic_v4i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_monotonic_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") monotonic
ret <4 x i32> %retval
}
define <8 x i32> @add_monotonic_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: add_monotonic_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_monotonic_v8i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_monotonic_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [add_monotonic_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") monotonic
ret <8 x i32> %retval
}
define <1 x i32> @add_acquire_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: add_acquire_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acquire_v1i32_global_cta_param_0];
; SM70-NEXT: ld.param.b32 %r1, [add_acquire_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r2, [%rd1], %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acquire
ret <1 x i32> %retval
}
define <2 x i32> @add_acquire_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: add_acquire_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acquire_v2i32_global_cta_param_0];
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_acquire_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acquire
ret <2 x i32> %retval
}
define <4 x i32> @add_acquire_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: add_acquire_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acquire_v4i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_acquire_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acquire
ret <4 x i32> %retval
}
define <8 x i32> @add_acquire_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: add_acquire_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_acquire_v8i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_acquire_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [add_acquire_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acquire
ret <8 x i32> %retval
}
define <1 x i32> @add_release_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: add_release_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<3>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_release_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [add_release_v1i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r2, [%rd1], %r1;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") release
ret <1 x i32> %retval
}
define <2 x i32> @add_release_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: add_release_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<5>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_release_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [add_release_v2i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r3, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r4, [%rd1+4], %r2;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r3, %r4};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") release
ret <2 x i32> %retval
}
define <4 x i32> @add_release_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: add_release_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_release_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_release_v4i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r5, [%rd1], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r6, [%rd1+4], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r7, [%rd1+8], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r8, [%rd1+12], %r4;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r5, %r6, %r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") release
ret <4 x i32> %retval
}
define <8 x i32> @add_release_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: add_release_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .b32 %r<17>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [add_release_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [add_release_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [add_release_v8i32_global_cta_param_1];
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r9, [%rd1], %r5;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r10, [%rd1+4], %r6;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r11, [%rd1+8], %r7;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r12, [%rd1+12], %r8;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r13, [%rd1+16], %r1;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r14, [%rd1+20], %r2;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r15, [%rd1+24], %r3;
; SM70-NEXT: atom.relaxed.cta.global.add.u32 %r16, [%rd1+28], %r4;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r13, %r14, %r15, %r16};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise add ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") release
ret <8 x i32> %retval
}
define <1 x i8> @nand_monotonic_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: nand_monotonic_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_monotonic_v1i8_global_cta_param_0];
; SM70-NEXT: ld.param.b8 %r6, [nand_monotonic_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB360_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB360_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: st.param.b8 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") monotonic
ret <1 x i8> %retval
}
define <2 x i8> @nand_monotonic_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: nand_monotonic_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_monotonic_v2i8_global_cta_param_0];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: ld.param.b16 %r8, [nand_monotonic_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r4, %r8, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB361_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB361_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") monotonic
ret <2 x i8> %retval
}
define <4 x i8> @nand_monotonic_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: nand_monotonic_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [nand_monotonic_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_monotonic_v4i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB362_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r2;
; SM70-NEXT: xor.b32 %r4, %r3, -1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r5;
; SM70-NEXT: mov.b32 %r5, %r1;
; SM70-NEXT: @%p1 bra $L__BB362_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") monotonic
ret <4 x i8> %retval
}
define <8 x i8> @nand_monotonic_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: nand_monotonic_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_monotonic_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_monotonic_v8i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB363_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r7;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r8, %r2;
; SM70-NEXT: and.b32 %r4, %r7, %r1;
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: xor.b32 %r6, %r3, -1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p1 bra $L__BB363_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") monotonic
ret <8 x i8> %retval
}
define <1 x i8> @nand_acquire_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: nand_acquire_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_acquire_v1i8_global_cta_param_0];
; SM70-NEXT: ld.param.b8 %r6, [nand_acquire_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB364_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB364_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b8 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") acquire
ret <1 x i8> %retval
}
define <2 x i8> @nand_acquire_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: nand_acquire_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_acquire_v2i8_global_cta_param_0];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: ld.param.b16 %r8, [nand_acquire_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r4, %r8, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB365_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB365_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") acquire
ret <2 x i8> %retval
}
define <4 x i8> @nand_acquire_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: nand_acquire_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [nand_acquire_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acquire_v4i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB366_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r2;
; SM70-NEXT: xor.b32 %r4, %r3, -1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r5;
; SM70-NEXT: mov.b32 %r5, %r1;
; SM70-NEXT: @%p1 bra $L__BB366_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") acquire
ret <4 x i8> %retval
}
define <8 x i8> @nand_acquire_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: nand_acquire_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_acquire_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acquire_v8i8_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB367_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r7;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r8, %r2;
; SM70-NEXT: and.b32 %r4, %r7, %r1;
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: xor.b32 %r6, %r3, -1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p1 bra $L__BB367_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") acquire
ret <8 x i8> %retval
}
define <1 x i8> @nand_release_v1i8_global_cta(ptr addrspace(1) %addr, <1 x i8> %val) {
; SM70-LABEL: nand_release_v1i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_release_v1i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b8 %r6, [nand_release_v1i8_global_cta_param_1];
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: and.b32 %r8, %r7, 3;
; SM70-NEXT: shl.b32 %r1, %r8, 3;
; SM70-NEXT: shl.b32 %r2, 255, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: shl.b32 %r4, %r6, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB368_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB368_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: st.param.b8 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i8> %val syncscope("block") release
ret <1 x i8> %retval
}
define <2 x i8> @nand_release_v2i8_global_cta(ptr addrspace(1) %addr, <2 x i8> %val) {
; SM70-LABEL: nand_release_v2i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<16>;
; SM70-NEXT: .reg .b64 %rd<3>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd2, [nand_release_v2i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: and.b64 %rd1, %rd2, -4;
; SM70-NEXT: cvt.u32.u64 %r6, %rd2;
; SM70-NEXT: and.b32 %r7, %r6, 3;
; SM70-NEXT: shl.b32 %r1, %r7, 3;
; SM70-NEXT: shl.b32 %r2, 65535, %r1;
; SM70-NEXT: not.b32 %r3, %r2;
; SM70-NEXT: ld.param.b16 %r8, [nand_release_v2i8_global_cta_param_1];
; SM70-NEXT: shl.b32 %r4, %r8, %r1;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r15, [%rd1];
; SM70-NEXT: $L__BB369_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r9, %r15, %r4;
; SM70-NEXT: not.b32 %r10, %r9;
; SM70-NEXT: and.b32 %r11, %r10, %r2;
; SM70-NEXT: and.b32 %r12, %r15, %r3;
; SM70-NEXT: or.b32 %r13, %r12, %r11;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r5, [%rd1], %r15, %r13;
; SM70-NEXT: setp.ne.b32 %p1, %r5, %r15;
; SM70-NEXT: mov.b32 %r15, %r5;
; SM70-NEXT: @%p1 bra $L__BB369_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: shr.u32 %r14, %r5, %r1;
; SM70-NEXT: st.param.b16 [func_retval0], %r14;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i8> %val syncscope("block") release
ret <2 x i8> %retval
}
define <4 x i8> @nand_release_v4i8_global_cta(ptr addrspace(1) %addr, <4 x i8> %val) {
; SM70-LABEL: nand_release_v4i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b32 %r2, [nand_release_v4i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_release_v4i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB370_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r2;
; SM70-NEXT: xor.b32 %r4, %r3, -1;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r1, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r1, %r5;
; SM70-NEXT: mov.b32 %r5, %r1;
; SM70-NEXT: @%p1 bra $L__BB370_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.b32 [func_retval0], %r1;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i8> %val syncscope("block") release
ret <4 x i8> %retval
}
define <8 x i8> @nand_release_v8i8_global_cta(ptr addrspace(1) %addr, <8 x i8> %val) {
; SM70-LABEL: nand_release_v8i8_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<9>;
; SM70-NEXT: .reg .b64 %rd<12>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_release_v8i8_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_release_v8i8_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd2;
; SM70-NEXT: $L__BB371_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r7;
; SM70-NEXT: cvt.u64.u32 %rd4, %r8;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r8, %r2;
; SM70-NEXT: and.b32 %r4, %r7, %r1;
; SM70-NEXT: xor.b32 %r5, %r4, -1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r5;
; SM70-NEXT: xor.b32 %r6, %r3, -1;
; SM70-NEXT: cvt.u64.u32 %rd8, %r6;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd11, [%rd1], %rd6, %rd10;
; SM70-NEXT: setp.ne.b64 %p1, %rd11, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r8}, %rd11; }
; SM70-NEXT: cvt.u32.u64 %r7, %rd11;
; SM70-NEXT: @%p1 bra $L__BB371_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r7, %r8};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i8> %val syncscope("block") release
ret <8 x i8> %retval
}
define <1 x i32> @nand_monotonic_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: nand_monotonic_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_monotonic_v1i32_global_cta_param_0];
; SM70-NEXT: ld.param.b32 %r1, [nand_monotonic_v1i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB372_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r1;
; SM70-NEXT: not.b32 %r4, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r2, %r5;
; SM70-NEXT: mov.b32 %r5, %r2;
; SM70-NEXT: @%p1 bra $L__BB372_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") monotonic
ret <1 x i32> %retval
}
define <2 x i32> @nand_monotonic_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: nand_monotonic_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<13>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_monotonic_v2i32_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_monotonic_v2i32_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB373_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r6, %r2;
; SM70-NEXT: and.b32 %r4, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r4;
; SM70-NEXT: cvt.u64.u32 %rd8, %r3;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd12;
; SM70-NEXT: @%p1 bra $L__BB373_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") monotonic
ret <2 x i32> %retval
}
define <4 x i32> @nand_monotonic_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: nand_monotonic_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<24>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_monotonic_v4i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_monotonic_v4i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB374_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r5, %r10, %r2;
; SM70-NEXT: and.b32 %r6, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r6;
; SM70-NEXT: cvt.u64.u32 %rd8, %r5;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd12;
; SM70-NEXT: @%p1 bra $L__BB374_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd13;
; SM70-NEXT: $L__BB374_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r11;
; SM70-NEXT: cvt.u64.u32 %rd15, %r12;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r7, %r12, %r4;
; SM70-NEXT: and.b32 %r8, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: cvt.u64.u32 %rd19, %r7;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd23;
; SM70-NEXT: @%p2 bra $L__BB374_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") monotonic
ret <4 x i32> %retval
}
define <8 x i32> @nand_monotonic_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: nand_monotonic_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b32 %r<25>;
; SM70-NEXT: .reg .b64 %rd<46>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_monotonic_v8i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_monotonic_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [nand_monotonic_v8i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NEXT: $L__BB375_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r9, %r18, %r6;
; SM70-NEXT: and.b32 %r10, %r17, %r5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r10;
; SM70-NEXT: cvt.u64.u32 %rd8, %r9;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd12;
; SM70-NEXT: @%p1 bra $L__BB375_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd13;
; SM70-NEXT: $L__BB375_3: // %atomicrmw.start6
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r19;
; SM70-NEXT: cvt.u64.u32 %rd15, %r20;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r11, %r20, %r8;
; SM70-NEXT: and.b32 %r12, %r19, %r7;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: cvt.u64.u32 %rd19, %r11;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd23;
; SM70-NEXT: @%p2 bra $L__BB375_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd24, [%rd1+16];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd24; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd24;
; SM70-NEXT: $L__BB375_5: // %atomicrmw.start16
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd25, %r21;
; SM70-NEXT: cvt.u64.u32 %rd26, %r22;
; SM70-NEXT: shl.b64 %rd27, %rd26, 32;
; SM70-NEXT: or.b64 %rd28, %rd25, %rd27;
; SM70-NEXT: and.b32 %r13, %r22, %r2;
; SM70-NEXT: and.b32 %r14, %r21, %r1;
; SM70-NEXT: cvt.u64.u32 %rd29, %r14;
; SM70-NEXT: cvt.u64.u32 %rd30, %r13;
; SM70-NEXT: shl.b64 %rd31, %rd30, 32;
; SM70-NEXT: or.b64 %rd32, %rd29, %rd31;
; SM70-NEXT: not.b64 %rd33, %rd32;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd1+16], %rd28, %rd33;
; SM70-NEXT: setp.ne.b64 %p3, %rd34, %rd28;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd34; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd34;
; SM70-NEXT: @%p3 bra $L__BB375_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd1+24];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd35; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd35;
; SM70-NEXT: $L__BB375_7: // %atomicrmw.start22
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd36, %r23;
; SM70-NEXT: cvt.u64.u32 %rd37, %r24;
; SM70-NEXT: shl.b64 %rd38, %rd37, 32;
; SM70-NEXT: or.b64 %rd39, %rd36, %rd38;
; SM70-NEXT: and.b32 %r15, %r24, %r4;
; SM70-NEXT: and.b32 %r16, %r23, %r3;
; SM70-NEXT: cvt.u64.u32 %rd40, %r16;
; SM70-NEXT: cvt.u64.u32 %rd41, %r15;
; SM70-NEXT: shl.b64 %rd42, %rd41, 32;
; SM70-NEXT: or.b64 %rd43, %rd40, %rd42;
; SM70-NEXT: not.b64 %rd44, %rd43;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd45, [%rd1+24], %rd39, %rd44;
; SM70-NEXT: setp.ne.b64 %p4, %rd45, %rd39;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd45; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd45;
; SM70-NEXT: @%p4 bra $L__BB375_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") monotonic
ret <8 x i32> %retval
}
define <1 x i32> @nand_acquire_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: nand_acquire_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acquire_v1i32_global_cta_param_0];
; SM70-NEXT: ld.param.b32 %r1, [nand_acquire_v1i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB376_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r1;
; SM70-NEXT: not.b32 %r4, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r2, %r5;
; SM70-NEXT: mov.b32 %r5, %r2;
; SM70-NEXT: @%p1 bra $L__BB376_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") acquire
ret <1 x i32> %retval
}
define <2 x i32> @nand_acquire_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: nand_acquire_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<13>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_acquire_v2i32_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_acquire_v2i32_global_cta_param_0];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB377_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r6, %r2;
; SM70-NEXT: and.b32 %r4, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r4;
; SM70-NEXT: cvt.u64.u32 %rd8, %r3;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd12;
; SM70-NEXT: @%p1 bra $L__BB377_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") acquire
ret <2 x i32> %retval
}
define <4 x i32> @nand_acquire_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: nand_acquire_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<24>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acquire_v4i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_acquire_v4i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB378_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r5, %r10, %r2;
; SM70-NEXT: and.b32 %r6, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r6;
; SM70-NEXT: cvt.u64.u32 %rd8, %r5;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd12;
; SM70-NEXT: @%p1 bra $L__BB378_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd13;
; SM70-NEXT: $L__BB378_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r11;
; SM70-NEXT: cvt.u64.u32 %rd15, %r12;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r7, %r12, %r4;
; SM70-NEXT: and.b32 %r8, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: cvt.u64.u32 %rd19, %r7;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd23;
; SM70-NEXT: @%p2 bra $L__BB378_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") acquire
ret <4 x i32> %retval
}
define <8 x i32> @nand_acquire_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: nand_acquire_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b32 %r<25>;
; SM70-NEXT: .reg .b64 %rd<46>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_acquire_v8i32_global_cta_param_0];
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_acquire_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [nand_acquire_v8i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NEXT: $L__BB379_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r9, %r18, %r6;
; SM70-NEXT: and.b32 %r10, %r17, %r5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r10;
; SM70-NEXT: cvt.u64.u32 %rd8, %r9;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd12;
; SM70-NEXT: @%p1 bra $L__BB379_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd13;
; SM70-NEXT: $L__BB379_3: // %atomicrmw.start6
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r19;
; SM70-NEXT: cvt.u64.u32 %rd15, %r20;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r11, %r20, %r8;
; SM70-NEXT: and.b32 %r12, %r19, %r7;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: cvt.u64.u32 %rd19, %r11;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd23;
; SM70-NEXT: @%p2 bra $L__BB379_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd24, [%rd1+16];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd24; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd24;
; SM70-NEXT: $L__BB379_5: // %atomicrmw.start16
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd25, %r21;
; SM70-NEXT: cvt.u64.u32 %rd26, %r22;
; SM70-NEXT: shl.b64 %rd27, %rd26, 32;
; SM70-NEXT: or.b64 %rd28, %rd25, %rd27;
; SM70-NEXT: and.b32 %r13, %r22, %r2;
; SM70-NEXT: and.b32 %r14, %r21, %r1;
; SM70-NEXT: cvt.u64.u32 %rd29, %r14;
; SM70-NEXT: cvt.u64.u32 %rd30, %r13;
; SM70-NEXT: shl.b64 %rd31, %rd30, 32;
; SM70-NEXT: or.b64 %rd32, %rd29, %rd31;
; SM70-NEXT: not.b64 %rd33, %rd32;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd1+16], %rd28, %rd33;
; SM70-NEXT: setp.ne.b64 %p3, %rd34, %rd28;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd34; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd34;
; SM70-NEXT: @%p3 bra $L__BB379_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd1+24];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd35; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd35;
; SM70-NEXT: $L__BB379_7: // %atomicrmw.start22
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd36, %r23;
; SM70-NEXT: cvt.u64.u32 %rd37, %r24;
; SM70-NEXT: shl.b64 %rd38, %rd37, 32;
; SM70-NEXT: or.b64 %rd39, %rd36, %rd38;
; SM70-NEXT: and.b32 %r15, %r24, %r4;
; SM70-NEXT: and.b32 %r16, %r23, %r3;
; SM70-NEXT: cvt.u64.u32 %rd40, %r16;
; SM70-NEXT: cvt.u64.u32 %rd41, %r15;
; SM70-NEXT: shl.b64 %rd42, %rd41, 32;
; SM70-NEXT: or.b64 %rd43, %rd40, %rd42;
; SM70-NEXT: not.b64 %rd44, %rd43;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd45, [%rd1+24], %rd39, %rd44;
; SM70-NEXT: setp.ne.b64 %p4, %rd45, %rd39;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd45; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd45;
; SM70-NEXT: @%p4 bra $L__BB379_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") acquire
ret <8 x i32> %retval
}
define <1 x i32> @nand_release_v1i32_global_cta(ptr addrspace(1) %addr, <1 x i32> %val) {
; SM70-LABEL: nand_release_v1i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<6>;
; SM70-NEXT: .reg .b64 %rd<2>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_release_v1i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.b32 %r1, [nand_release_v1i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b32 %r5, [%rd1];
; SM70-NEXT: $L__BB380_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: and.b32 %r3, %r5, %r1;
; SM70-NEXT: not.b32 %r4, %r3;
; SM70-NEXT: atom.relaxed.cta.global.cas.b32 %r2, [%rd1], %r5, %r4;
; SM70-NEXT: setp.ne.b32 %p1, %r2, %r5;
; SM70-NEXT: mov.b32 %r5, %r2;
; SM70-NEXT: @%p1 bra $L__BB380_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.b32 [func_retval0], %r2;
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <1 x i32> %val syncscope("block") release
ret <1 x i32> %retval
}
define <2 x i32> @nand_release_v2i32_global_cta(ptr addrspace(1) %addr, <2 x i32> %val) {
; SM70-LABEL: nand_release_v2i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<2>;
; SM70-NEXT: .reg .b32 %r<7>;
; SM70-NEXT: .reg .b64 %rd<13>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.v2.b32 {%r1, %r2}, [nand_release_v2i32_global_cta_param_1];
; SM70-NEXT: ld.param.b64 %rd1, [nand_release_v2i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd2;
; SM70-NEXT: $L__BB381_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r5;
; SM70-NEXT: cvt.u64.u32 %rd4, %r6;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r3, %r6, %r2;
; SM70-NEXT: and.b32 %r4, %r5, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r4;
; SM70-NEXT: cvt.u64.u32 %rd8, %r3;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r6}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r5, %rd12;
; SM70-NEXT: @%p1 bra $L__BB381_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: st.param.v2.b32 [func_retval0], {%r5, %r6};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <2 x i32> %val syncscope("block") release
ret <2 x i32> %retval
}
define <4 x i32> @nand_release_v4i32_global_cta(ptr addrspace(1) %addr, <4 x i32> %val) {
; SM70-LABEL: nand_release_v4i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<3>;
; SM70-NEXT: .reg .b32 %r<13>;
; SM70-NEXT: .reg .b64 %rd<24>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_release_v4i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_release_v4i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd2;
; SM70-NEXT: $L__BB382_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r9;
; SM70-NEXT: cvt.u64.u32 %rd4, %r10;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r5, %r10, %r2;
; SM70-NEXT: and.b32 %r6, %r9, %r1;
; SM70-NEXT: cvt.u64.u32 %rd7, %r6;
; SM70-NEXT: cvt.u64.u32 %rd8, %r5;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r10}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r9, %rd12;
; SM70-NEXT: @%p1 bra $L__BB382_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd13;
; SM70-NEXT: $L__BB382_3: // %atomicrmw.start2
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r11;
; SM70-NEXT: cvt.u64.u32 %rd15, %r12;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r7, %r12, %r4;
; SM70-NEXT: and.b32 %r8, %r11, %r3;
; SM70-NEXT: cvt.u64.u32 %rd18, %r8;
; SM70-NEXT: cvt.u64.u32 %rd19, %r7;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r12}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r11, %rd23;
; SM70-NEXT: @%p2 bra $L__BB382_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end1
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r10, %r11, %r12};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <4 x i32> %val syncscope("block") release
ret <4 x i32> %retval
}
define <8 x i32> @nand_release_v8i32_global_cta(ptr addrspace(1) %addr, <8 x i32> %val) {
; SM70-LABEL: nand_release_v8i32_global_cta(
; SM70: {
; SM70-NEXT: .reg .pred %p<5>;
; SM70-NEXT: .reg .b32 %r<25>;
; SM70-NEXT: .reg .b64 %rd<46>;
; SM70-EMPTY:
; SM70-NEXT: // %bb.0:
; SM70-NEXT: ld.param.b64 %rd1, [nand_release_v8i32_global_cta_param_0];
; SM70-NEXT: fence.acq_rel.cta;
; SM70-NEXT: ld.param.v4.b32 {%r1, %r2, %r3, %r4}, [nand_release_v8i32_global_cta_param_1+16];
; SM70-NEXT: ld.param.v4.b32 {%r5, %r6, %r7, %r8}, [nand_release_v8i32_global_cta_param_1];
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd2, [%rd1];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd2; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd2;
; SM70-NEXT: $L__BB383_1: // %atomicrmw.start
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd3, %r17;
; SM70-NEXT: cvt.u64.u32 %rd4, %r18;
; SM70-NEXT: shl.b64 %rd5, %rd4, 32;
; SM70-NEXT: or.b64 %rd6, %rd3, %rd5;
; SM70-NEXT: and.b32 %r9, %r18, %r6;
; SM70-NEXT: and.b32 %r10, %r17, %r5;
; SM70-NEXT: cvt.u64.u32 %rd7, %r10;
; SM70-NEXT: cvt.u64.u32 %rd8, %r9;
; SM70-NEXT: shl.b64 %rd9, %rd8, 32;
; SM70-NEXT: or.b64 %rd10, %rd7, %rd9;
; SM70-NEXT: not.b64 %rd11, %rd10;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd12, [%rd1], %rd6, %rd11;
; SM70-NEXT: setp.ne.b64 %p1, %rd12, %rd6;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r18}, %rd12; }
; SM70-NEXT: cvt.u32.u64 %r17, %rd12;
; SM70-NEXT: @%p1 bra $L__BB383_1;
; SM70-NEXT: // %bb.2: // %atomicrmw.end
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd13, [%rd1+8];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd13; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd13;
; SM70-NEXT: $L__BB383_3: // %atomicrmw.start6
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd14, %r19;
; SM70-NEXT: cvt.u64.u32 %rd15, %r20;
; SM70-NEXT: shl.b64 %rd16, %rd15, 32;
; SM70-NEXT: or.b64 %rd17, %rd14, %rd16;
; SM70-NEXT: and.b32 %r11, %r20, %r8;
; SM70-NEXT: and.b32 %r12, %r19, %r7;
; SM70-NEXT: cvt.u64.u32 %rd18, %r12;
; SM70-NEXT: cvt.u64.u32 %rd19, %r11;
; SM70-NEXT: shl.b64 %rd20, %rd19, 32;
; SM70-NEXT: or.b64 %rd21, %rd18, %rd20;
; SM70-NEXT: not.b64 %rd22, %rd21;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd23, [%rd1+8], %rd17, %rd22;
; SM70-NEXT: setp.ne.b64 %p2, %rd23, %rd17;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r20}, %rd23; }
; SM70-NEXT: cvt.u32.u64 %r19, %rd23;
; SM70-NEXT: @%p2 bra $L__BB383_3;
; SM70-NEXT: // %bb.4: // %atomicrmw.end5
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd24, [%rd1+16];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd24; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd24;
; SM70-NEXT: $L__BB383_5: // %atomicrmw.start16
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd25, %r21;
; SM70-NEXT: cvt.u64.u32 %rd26, %r22;
; SM70-NEXT: shl.b64 %rd27, %rd26, 32;
; SM70-NEXT: or.b64 %rd28, %rd25, %rd27;
; SM70-NEXT: and.b32 %r13, %r22, %r2;
; SM70-NEXT: and.b32 %r14, %r21, %r1;
; SM70-NEXT: cvt.u64.u32 %rd29, %r14;
; SM70-NEXT: cvt.u64.u32 %rd30, %r13;
; SM70-NEXT: shl.b64 %rd31, %rd30, 32;
; SM70-NEXT: or.b64 %rd32, %rd29, %rd31;
; SM70-NEXT: not.b64 %rd33, %rd32;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd34, [%rd1+16], %rd28, %rd33;
; SM70-NEXT: setp.ne.b64 %p3, %rd34, %rd28;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r22}, %rd34; }
; SM70-NEXT: cvt.u32.u64 %r21, %rd34;
; SM70-NEXT: @%p3 bra $L__BB383_5;
; SM70-NEXT: // %bb.6: // %atomicrmw.end15
; SM70-NEXT: ld.relaxed.cta.global.b64 %rd35, [%rd1+24];
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd35; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd35;
; SM70-NEXT: $L__BB383_7: // %atomicrmw.start22
; SM70-NEXT: // =>This Inner Loop Header: Depth=1
; SM70-NEXT: cvt.u64.u32 %rd36, %r23;
; SM70-NEXT: cvt.u64.u32 %rd37, %r24;
; SM70-NEXT: shl.b64 %rd38, %rd37, 32;
; SM70-NEXT: or.b64 %rd39, %rd36, %rd38;
; SM70-NEXT: and.b32 %r15, %r24, %r4;
; SM70-NEXT: and.b32 %r16, %r23, %r3;
; SM70-NEXT: cvt.u64.u32 %rd40, %r16;
; SM70-NEXT: cvt.u64.u32 %rd41, %r15;
; SM70-NEXT: shl.b64 %rd42, %rd41, 32;
; SM70-NEXT: or.b64 %rd43, %rd40, %rd42;
; SM70-NEXT: not.b64 %rd44, %rd43;
; SM70-NEXT: atom.relaxed.cta.global.cas.b64 %rd45, [%rd1+24], %rd39, %rd44;
; SM70-NEXT: setp.ne.b64 %p4, %rd45, %rd39;
; SM70-NEXT: { .reg .b32 tmp; mov.b64 {tmp, %r24}, %rd45; }
; SM70-NEXT: cvt.u32.u64 %r23, %rd45;
; SM70-NEXT: @%p4 bra $L__BB383_7;
; SM70-NEXT: // %bb.8: // %atomicrmw.end21
; SM70-NEXT: st.param.v4.b32 [func_retval0+16], {%r21, %r22, %r23, %r24};
; SM70-NEXT: st.param.v4.b32 [func_retval0], {%r17, %r18, %r19, %r20};
; SM70-NEXT: ret;
%retval = atomicrmw elementwise nand ptr addrspace(1) %addr, <8 x i32> %val syncscope("block") release
ret <8 x i32> %retval
}