| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc < %s -mtriple=nvptx64-nvidia-cuda -mcpu=sm_80 -mattr=+ptx76 | FileCheck %s |
| ; RUN: %if ptxas-sm_80 && ptxas-isa-7.6 %{ llc < %s -mtriple=nvptx64-nvidia-cuda -mcpu=sm_80 -mattr=+ptx76 | %ptxas-verify -arch=sm_80 %} |
| |
| declare i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_begin() |
| declare i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_end() |
| declare i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_cap() |
| declare i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_0() |
| declare i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_1() |
| |
| define i32 @test() { |
| ; CHECK-LABEL: test( |
| ; CHECK: { |
| ; CHECK-NEXT: .reg .b32 %r<10>; |
| ; CHECK-EMPTY: |
| ; CHECK-NEXT: // %bb.0: |
| ; CHECK-NEXT: mov.u32 %r1, %reserved_smem_offset_begin; |
| ; CHECK-NEXT: mov.u32 %r2, %reserved_smem_offset_end; |
| ; CHECK-NEXT: mov.u32 %r3, %reserved_smem_offset_cap; |
| ; CHECK-NEXT: mov.u32 %r4, %reserved_smem_offset_0; |
| ; CHECK-NEXT: mov.u32 %r5, %reserved_smem_offset_1; |
| ; CHECK-NEXT: add.s32 %r6, %r1, %r2; |
| ; CHECK-NEXT: add.s32 %r7, %r6, %r3; |
| ; CHECK-NEXT: add.s32 %r8, %r7, %r4; |
| ; CHECK-NEXT: add.s32 %r9, %r8, %r5; |
| ; CHECK-NEXT: st.param.b32 [func_retval0], %r9; |
| ; CHECK-NEXT: ret; |
| %begin = call i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_begin() |
| %end = call i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_end() |
| %cap = call i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_cap() |
| %offset0 = call i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_0() |
| %offset1 = call i32 @llvm.nvvm.read.ptx.sreg.reserved_smem_offset_1() |
| |
| %ret0 = add i32 %begin, %end |
| %ret1 = add i32 %ret0, %cap |
| %ret2 = add i32 %ret1, %offset0 |
| %ret3 = add i32 %ret2, %offset1 |
| |
| ret i32 %ret3 |
| } |