Matt Arsenault | 8728c5f | 2017-08-07 14:58:04 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=amdgcn---amdgiz -mcpu=kaveri -verify-machineinstrs < %s | FileCheck %s |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 2 | ; |
| 3 | ; The original OpenCL kernel: |
| 4 | ; kernel void f(global int *a, int i, int j) { |
| 5 | ; int x[100]; |
| 6 | ; x[i] = 7; |
| 7 | ; a[0] = x[j]; |
| 8 | ; } |
Matt Arsenault | 8728c5f | 2017-08-07 14:58:04 +0000 | [diff] [blame] | 9 | ; clang -cc1 -triple amdgcn---amdgizcl -emit-llvm -o - |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 10 | |
| 11 | target datalayout = "e-p:64:64-p1:64:64-p2:64:64-p3:32:32-p4:32:32-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-A5" |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 12 | |
| 13 | define amdgpu_kernel void @f(i32 addrspace(1)* nocapture %a, i32 %i, i32 %j) local_unnamed_addr #0 { |
| 14 | entry: |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 15 | ; CHECK: s_load_dwordx2 s[4:5], s[0:1], 0x9 |
Stanislav Mekhanoshin | d4ae470 | 2017-09-19 20:54:38 +0000 | [diff] [blame^] | 16 | ; CHECK: s_load_dword s2, s[0:1], 0xb |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 17 | ; CHECK: s_load_dword s0, s[0:1], 0xc |
| 18 | ; CHECK: s_mov_b32 s8, SCRATCH_RSRC_DWORD0 |
| 19 | ; CHECK: s_mov_b32 s9, SCRATCH_RSRC_DWORD1 |
| 20 | ; CHECK: s_mov_b32 s10, -1 |
| 21 | ; CHECK: s_waitcnt lgkmcnt(0) |
| 22 | ; CHECK: s_lshl_b32 s1, s2, 2 |
| 23 | ; CHECK: v_mov_b32_e32 v0, 4 |
| 24 | ; CHECK: s_mov_b32 s11, 0xe8f000 |
| 25 | ; CHECK: v_add_i32_e32 v1, vcc, s1, v0 |
| 26 | ; CHECK: v_mov_b32_e32 v2, 7 |
| 27 | ; CHECK: s_lshl_b32 s0, s0, 2 |
| 28 | ; CHECK: buffer_store_dword v2, v1, s[8:11], s3 offen |
| 29 | ; CHECK: v_add_i32_e32 v0, vcc, s0, v0 |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 30 | ; CHECK: s_mov_b32 s7, 0xf000 |
| 31 | ; CHECK: s_mov_b32 s6, -1 |
Stanislav Mekhanoshin | d4ae470 | 2017-09-19 20:54:38 +0000 | [diff] [blame^] | 32 | ; CHECK: buffer_load_dword v0, v0, s[8:11], s3 offen |
Yaxun Liu | 5d977f8 | 2017-04-20 18:15:34 +0000 | [diff] [blame] | 33 | ; CHECK: s_waitcnt vmcnt(0) |
| 34 | ; CHECK: buffer_store_dword v0, off, s[4:7], 0 |
| 35 | ; CHECK: s_endpgm |
| 36 | |
| 37 | %x = alloca [100 x i32], align 4, addrspace(5) |
| 38 | %0 = bitcast [100 x i32] addrspace(5)* %x to i8 addrspace(5)* |
| 39 | call void @llvm.lifetime.start.p5i8(i64 400, i8 addrspace(5)* nonnull %0) #0 |
| 40 | %arrayidx = getelementptr inbounds [100 x i32], [100 x i32] addrspace(5)* %x, i32 0, i32 %i |
| 41 | store i32 7, i32 addrspace(5)* %arrayidx, align 4 |
| 42 | %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32] addrspace(5)* %x, i32 0, i32 %j |
| 43 | %1 = load i32, i32 addrspace(5)* %arrayidx2, align 4 |
| 44 | store i32 %1, i32 addrspace(1)* %a, align 4 |
| 45 | call void @llvm.lifetime.end.p5i8(i64 400, i8 addrspace(5)* nonnull %0) #0 |
| 46 | ret void |
| 47 | } |
| 48 | |
| 49 | declare void @llvm.lifetime.start.p5i8(i64, i8 addrspace(5)* nocapture) #1 |
| 50 | |
| 51 | declare void @llvm.lifetime.end.p5i8(i64, i8 addrspace(5)* nocapture) #1 |
| 52 | |
| 53 | attributes #0 = { nounwind } |
| 54 | attributes #1 = { argmemonly nounwind } |