| ; 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 |
| } |