# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN %s # WAVE_BARRIER and SI_MASKED_UNREACHABLE ect. are not really instructions. To # fix the hazard (m0 def followed by V_INTERP), the compiler should insert a # S_NOP. --- name: hazard_wave_barrier tracksRegLiveness: true body: | bb.0: liveins: $sgpr0 ; GCN-LABEL: name: hazard_wave_barrier ; GCN: liveins: $sgpr0 ; GCN-NEXT: {{ $}} ; GCN-NEXT: $m0 = S_MOV_B32 killed renamable $sgpr0 ; GCN-NEXT: WAVE_BARRIER ; GCN-NEXT: S_NOP 0 ; GCN-NEXT: renamable $vgpr0 = V_INTERP_MOV_F32 2, 0, 0, implicit $mode, implicit $m0, implicit $exec ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 0 ; GCN-NEXT: S_ENDPGM 0 $m0 = S_MOV_B32 killed renamable $sgpr0 WAVE_BARRIER renamable $vgpr0 = V_INTERP_MOV_F32 2, 0, 0, implicit $mode, implicit $m0, implicit $exec renamable $sgpr1 = S_MOV_B32 0 S_ENDPGM 0 ... --- name: hazard-masked-unreachable tracksRegLiveness: true body: | ; GCN-LABEL: name: hazard-masked-unreachable ; GCN: bb.0: ; GCN-NEXT: successors: %bb.1(0x80000000) ; GCN-NEXT: liveins: $sgpr0 ; GCN-NEXT: {{ $}} ; GCN-NEXT: $m0 = S_MOV_B32 killed renamable $sgpr0 ; GCN-NEXT: SI_MASKED_UNREACHABLE ; GCN-NEXT: S_NOP 0 ; GCN-NEXT: renamable $vgpr0 = V_INTERP_MOV_F32 2, 0, 0, implicit $mode, implicit $m0, implicit $exec ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 0 ; GCN-NEXT: {{ $}} ; GCN-NEXT: bb.1: ; GCN-NEXT: S_ENDPGM 0 bb.0: liveins: $sgpr0 $m0 = S_MOV_B32 killed renamable $sgpr0 SI_MASKED_UNREACHABLE renamable $vgpr0 = V_INTERP_MOV_F32 2, 0, 0, implicit $mode, implicit $m0, implicit $exec renamable $sgpr1 = S_MOV_B32 0 bb.1: S_ENDPGM 0 ... --- name: hazard_sched_barrier tracksRegLiveness: true body: | bb.0: liveins: $sgpr0 ; GCN-LABEL: name: hazard_sched_barrier ; GCN: liveins: $sgpr0 ; GCN-NEXT: {{ $}} ; GCN-NEXT: $m0 = S_MOV_B32 killed renamable $sgpr0 ; GCN-NEXT: SCHED_BARRIER 0 ; GCN-NEXT: S_NOP 0 ; GCN-NEXT: renamable $vgpr0 = V_INTERP_MOV_F32 2, 0, 0, implicit $mode, implicit $m0, implicit $exec ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 0 ; GCN-NEXT: S_ENDPGM 0 $m0 = S_MOV_B32 killed renamable $sgpr0 SCHED_BARRIER 0 renamable $vgpr0 = V_INTERP_MOV_F32 2, 0, 0, implicit $mode, implicit $m0, implicit $exec renamable $sgpr1 = S_MOV_B32 0 S_ENDPGM 0 ...