54 lines · plain
1; RUN: llc -O3 -mtriple=amdgcn < %s | FileCheck --check-prefix=CHECK %s2 3; SIInsertWaitcnts should preserve waitcnt instructions coming from the user4 5; CHECK-LABEL: test_waitcnt_asm6; CHECK: s_waitcnt vmcnt(0)7; CHECK: s_waitcnt vmcnt(0)8; CHECK: s_waitcnt vmcnt(0)9; CHECK-NOT: s_waitcnt10; CHECK: s_endpgm11define amdgpu_kernel void @test_waitcnt_asm() {12 call void asm sideeffect "s_waitcnt vmcnt(0)", ""()13 call void asm sideeffect "s_waitcnt vmcnt(0)", ""()14 call void asm sideeffect "s_waitcnt vmcnt(0)", ""()15 ret void16}17 18; CHECK-LABEL: test_waitcnt_vscnt_asm19; CHECK: s_waitcnt_vscnt null, 0x020; CHECK: s_waitcnt_vscnt null, 0x021; CHECK: s_waitcnt_vscnt null, 0x022; CHECK-NOT: s_waitcnt23; CHECK: s_endpgm24define amdgpu_kernel void @test_waitcnt_vscnt_asm() {25 call void asm sideeffect "s_waitcnt_vscnt null, 0x0", ""()26 call void asm sideeffect "s_waitcnt_vscnt null, 0x0", ""()27 call void asm sideeffect "s_waitcnt_vscnt null, 0x0", ""()28 ret void29}30 31; CHECK-LABEL: test_waitcnt_builtin32; CHECK: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; CHECK-NOT: s_waitcnt34; CHECK: s_endpgm35define amdgpu_kernel void @test_waitcnt_builtin() {36 call void @llvm.amdgcn.s.waitcnt(i32 0)37 call void @llvm.amdgcn.s.waitcnt(i32 0)38 call void @llvm.amdgcn.s.waitcnt(i32 0)39 ret void40}41 42; CHECK-LABEL: test_waitcnt_builtin_non_kernel43; CHECK: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; CHECK-NOT: s_waitcnt45; CHECK: s_setpc46define void @test_waitcnt_builtin_non_kernel() {47 call void @llvm.amdgcn.s.waitcnt(i32 0)48 call void @llvm.amdgcn.s.waitcnt(i32 0)49 call void @llvm.amdgcn.s.waitcnt(i32 0)50 ret void51}52 53declare void @llvm.amdgcn.s.waitcnt(i32)54