Index: llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp =================================================================== --- llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp +++ llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp @@ -855,7 +855,7 @@ setForceEmitWaitcnt(); bool IsForceEmitWaitcnt = isForceEmitWaitcnt(); - if (MI.isDebugInstr()) + if (MI.isMetaInstruction()) return false; AMDGPU::Waitcnt Wait; Index: llvm/test/CodeGen/AMDGPU/waitcnt-meta-instructions.mir =================================================================== --- /dev/null +++ llvm/test/CodeGen/AMDGPU/waitcnt-meta-instructions.mir @@ -0,0 +1,66 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=si-insert-waitcnts -o - %s | FileCheck -check-prefix=GCN %s + +# Make sure no waitcnt is inserted for meta instruction uses. + +--- + +name: waitcnt_kill + +body: | + bb.0: + liveins: $vgpr0_vgpr1 + ; GCN-LABEL: name: waitcnt_kill + ; GCN: S_WAITCNT 0 + ; GCN: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + ; GCN: KILL $vgpr0 + $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + KILL $vgpr0 +... + +--- + +name: waitcnt_implicit_def + +body: | + bb.0: + liveins: $vgpr0_vgpr1 + ; GCN-LABEL: name: waitcnt_implicit_def + ; GCN: S_WAITCNT 0 + ; GCN: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + ; GCN: $vgpr0 = IMPLICIT_DEF + $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + $vgpr0 = IMPLICIT_DEF +... + +--- + +name: waitcnt_eh_label + +body: | + bb.0: + liveins: $vgpr0_vgpr1, $vgpr2 + ; GCN-LABEL: name: waitcnt_eh_label + ; GCN: S_WAITCNT 0 + ; GCN: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + ; GCN: EH_LABEL , implicit $vgpr0 + $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + EH_LABEL , implicit $vgpr0 + +... + +--- + +name: waitcnt_cfi + +body: | + bb.0: + liveins: $vgpr0_vgpr1, $vgpr2 + ; GCN-LABEL: name: waitcnt_cfi + ; GCN: S_WAITCNT 0 + ; GCN: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + ; GCN: CFI_INSTRUCTION offset $vgpr0_lo16, 16 + $vgpr0 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec + CFI_INSTRUCTION offset $vgpr0, 16 + +...