; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc < %s -verify-machineinstrs -mcpu=sm_50 | FileCheck %s ; RUN: %if ptxas %{ llc < %s -verify-machineinstrs -mcpu=sm_50 | %ptxas-verify %} target triple = "nvptx64-nvidia-cuda" @g = global i32 0 define void @test_prmt_f4e() { ; CHECK-LABEL: test_prmt_f4e( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 50462976; ; CHECK-NEXT: st.volatile.global.b32 [g], 67305985; ; CHECK-NEXT: st.volatile.global.b32 [g], 84148994; ; CHECK-NEXT: st.volatile.global.b32 [g], 100992003; ; CHECK-NEXT: st.volatile.global.b32 [g], 50462976; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt.f4e(i32 u0x03020100, i32 u0x07060504, i32 u0x0) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt.f4e(i32 u0x03020100, i32 u0x07060504, i32 u0x1) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt.f4e(i32 u0x03020100, i32 u0x07060504, i32 u0x2) store volatile i32 %v3, ptr @g %v4 = call i32 @llvm.nvvm.prmt.f4e(i32 u0x03020100, i32 u0x07060504, i32 u0x3) store volatile i32 %v4, ptr @g %v5 = call i32 @llvm.nvvm.prmt.f4e(i32 u0x03020100, i32 u0x07060504, i32 u0x4) store volatile i32 %v5, ptr @g ret void } define void @test_prmt_b4e() { ; CHECK-LABEL: test_prmt_b4e( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 84281088; ; CHECK-NEXT: st.volatile.global.b32 [g], 101122049; ; CHECK-NEXT: st.volatile.global.b32 [g], 117440770; ; CHECK-NEXT: st.volatile.global.b32 [g], 66051; ; CHECK-NEXT: st.volatile.global.b32 [g], 84281088; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt.b4e(i32 u0x03020100, i32 u0x07060504, i32 u0x0) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt.b4e(i32 u0x03020100, i32 u0x07060504, i32 u0x1) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt.b4e(i32 u0x03020100, i32 u0x07060504, i32 u0x2) store volatile i32 %v3, ptr @g %v4 = call i32 @llvm.nvvm.prmt.b4e(i32 u0x03020100, i32 u0x07060504, i32 u0x3) store volatile i32 %v4, ptr @g %v5 = call i32 @llvm.nvvm.prmt.b4e(i32 u0x03020100, i32 u0x07060504, i32 u0x4) store volatile i32 %v5, ptr @g ret void } define void @test_prmt_ecl() { ; CHECK-LABEL: test_prmt_ecl( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 50462976; ; CHECK-NEXT: st.volatile.global.b32 [g], 50462977; ; CHECK-NEXT: st.volatile.global.b32 [g], 50463234; ; CHECK-NEXT: st.volatile.global.b32 [g], 50529027; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt.ecl(i32 u0x03020100, i32 u0x0) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt.ecl(i32 u0x03020100, i32 u0x1) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt.ecl(i32 u0x03020100, i32 u0x2) store volatile i32 %v3, ptr @g %v4 = call i32 @llvm.nvvm.prmt.ecl(i32 u0x03020100, i32 u0x3) store volatile i32 %v4, ptr @g ret void } define void @test_prmt_ecr() { ; CHECK-LABEL: test_prmt_ecr( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 0; ; CHECK-NEXT: st.volatile.global.b32 [g], 16843008; ; CHECK-NEXT: st.volatile.global.b32 [g], 33685760; ; CHECK-NEXT: st.volatile.global.b32 [g], 50462976; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt.ecr(i32 u0x03020100, i32 u0x0) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt.ecr(i32 u0x03020100, i32 u0x1) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt.ecr(i32 u0x03020100, i32 u0x2) store volatile i32 %v3, ptr @g %v4 = call i32 @llvm.nvvm.prmt.ecr(i32 u0x03020100, i32 u0x3) store volatile i32 %v4, ptr @g ret void } define void @test_prmt_rc8() { ; CHECK-LABEL: test_prmt_rc8( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 0; ; CHECK-NEXT: st.volatile.global.b32 [g], 16843009; ; CHECK-NEXT: st.volatile.global.b32 [g], 33686018; ; CHECK-NEXT: st.volatile.global.b32 [g], 50529027; ; CHECK-NEXT: st.volatile.global.b32 [g], 0; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt.rc8(i32 u0x03020100, i32 u0x0) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt.rc8(i32 u0x03020100, i32 u0x1) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt.rc8(i32 u0x03020100, i32 u0x2) store volatile i32 %v3, ptr @g %v4 = call i32 @llvm.nvvm.prmt.rc8(i32 u0x03020100, i32 u0x3) store volatile i32 %v4, ptr @g %v5 = call i32 @llvm.nvvm.prmt.rc8(i32 u0x03020100, i32 u0x4) store volatile i32 %v5, ptr @g ret void } define void @test_prmt_rc16() { ; CHECK-LABEL: test_prmt_rc16( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 16777472; ; CHECK-NEXT: st.volatile.global.b32 [g], 50463490; ; CHECK-NEXT: st.volatile.global.b32 [g], 16777472; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt.rc16(i32 u0x03020100, i32 u0x0) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt.rc16(i32 u0x03020100, i32 u0x1) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt.rc16(i32 u0x03020100, i32 u0x2) store volatile i32 %v3, ptr @g ret void } define void @test_prmt_basic() { ; CHECK-LABEL: test_prmt_basic( ; CHECK: { ; CHECK-EMPTY: ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: st.volatile.global.b32 [g], 66051; ; CHECK-NEXT: st.volatile.global.b32 [g], 117507841; ; CHECK-NEXT: st.volatile.global.b32 [g], 1146447479; ; CHECK-NEXT: st.volatile.global.b32 [g], 0; ; CHECK-NEXT: st.volatile.global.b32 [g], -16711936; ; CHECK-NEXT: ret; %v1 = call i32 @llvm.nvvm.prmt(i32 u0x03020100, i32 u0x07060504, i32 u0x0123) store volatile i32 %v1, ptr @g %v2 = call i32 @llvm.nvvm.prmt(i32 u0x03020100, i32 u0x07060504, i32 u0x7171) store volatile i32 %v2, ptr @g %v3 = call i32 @llvm.nvvm.prmt(i32 u0x33221100, i32 u0x77665544, i32 u0x4567) store volatile i32 %v3, ptr @g %v4 = call i32 @llvm.nvvm.prmt(i32 u0x33221100, i32 u0x77665544, i32 u0xBA98) store volatile i32 %v4, ptr @g %v5 = call i32 @llvm.nvvm.prmt(i32 u0xF322F100, i32 u0x77665544, i32 u0xBA98) store volatile i32 %v5, ptr @g ret void }