321 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX10 %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN %s3 4# GCN-LABEL: name: hazard_smem_war5# GCN: S_LOAD_DWORD_IMM6# GFX10-NEXT: $sgpr_null = S_MOV_B32 07# GCN-NEXT: V_CMP_EQ_F328---9name: hazard_smem_war10body: |11 bb.0:12 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr113 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 014 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec15 S_ENDPGM 016...17 18# GCN-LABEL: name: hazard_smem_war_no_hazard19# GCN: S_LOAD_DWORD_IMM20# GCN-NEXT: S_ADD_U3221# GCN-NEXT: V_CMP_EQ_F3222---23name: hazard_smem_war_no_hazard24body: |25 bb.0:26 liveins: $sgpr0, $sgpr1, $sgpr4, $sgpr5, $vgpr0, $vgpr127 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 028 $sgpr3 = S_ADD_U32 $sgpr4, $sgpr5, implicit-def $scc29 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec30 S_ENDPGM 031...32 33# GCN-LABEL: name: hazard_smem_war_dependent_salu34# GCN: S_LOAD_DWORD_IMM35# GCN-NEXT: S_WAITCNT36# GCN-NEXT: S_ADD_U3237# GCN-NEXT: V_CMP_EQ_F3238---39name: hazard_smem_war_dependent_salu40body: |41 bb.0:42 liveins: $sgpr0, $sgpr1, $sgpr4, $vgpr0, $vgpr143 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 044 S_WAITCNT 045 $sgpr3 = S_ADD_U32 $sgpr2, $sgpr4, implicit-def $scc46 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec47 S_ENDPGM 048...49 50# GCN-LABEL: name: hazard_smem_war_independent_salu51# GCN: S_LOAD_DWORD_IMM52# GCN-NEXT: S_WAITCNT53# GCN-NEXT: S_ADD_U3254# GCN-NEXT: V_CMP_EQ_F3255---56name: hazard_smem_war_independent_salu57body: |58 bb.0:59 liveins: $sgpr0, $sgpr1, $sgpr4, $sgpr5, $vgpr0, $vgpr160 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 061 S_WAITCNT 062 $sgpr3 = S_ADD_U32 $sgpr5, $sgpr4, implicit-def $scc63 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec64 S_ENDPGM 065...66 67# GCN-LABEL: name: hazard_smem_war_only_smem68# GCN: S_LOAD_DWORD_IMM69# GCN-NEXT: S_LOAD_DWORD_IMM70# GFX10-NEXT: $sgpr_null = S_MOV_B32 071# GCN-NEXT: V_CMP_EQ_F3272---73name: hazard_smem_war_only_smem74body: |75 bb.0:76 liveins: $sgpr0, $sgpr1, $sgpr6, $sgpr7, $vgpr0, $vgpr177 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 078 $sgpr5 = S_LOAD_DWORD_IMM $sgpr6_sgpr7, 0, 079 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec80 S_ENDPGM 081...82 83# GCN-LABEL: name: hazard_smem_war_only_waitcnt_084# GCN: S_LOAD_DWORD_IMM85# GCN-NEXT: S_WAITCNT86# GCN-NEXT: V_CMP_EQ_F3287---88name: hazard_smem_war_only_waitcnt_089body: |90 bb.0:91 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr192 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 093 S_WAITCNT 094 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec95 S_ENDPGM 096...97 98# GCN-LABEL: name: hazard_smem_war_only_vmcnt_099# GCN: S_LOAD_DWORD_IMM100# GCN-NEXT: S_WAITCNT 3952{{$}}101# GFX10-NEXT: $sgpr_null = S_MOV_B32 0102# GCN-NEXT: V_CMP_EQ_F32103---104name: hazard_smem_war_only_vmcnt_0105body: |106 bb.0:107 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1108 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0109 S_WAITCNT 3952110 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec111 S_ENDPGM 0112...113 114# GCN-LABEL: name: hazard_smem_war_only_expcnt_0115# GCN: S_LOAD_DWORD_IMM116# GCN-NEXT: S_WAITCNT 53007{{$}}117# GFX10-NEXT: $sgpr_null = S_MOV_B32 0118# GCN-NEXT: V_CMP_EQ_F32119---120name: hazard_smem_war_only_expcnt_0121body: |122 bb.0:123 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1124 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0125 S_WAITCNT 53007126 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec127 S_ENDPGM 0128...129 130# GCN-LABEL: name: hazard_smem_war_only_lgkmcnt_0131# GCN: S_LOAD_DWORD_IMM132# GCN-NEXT: S_WAITCNT 49279{{$}}133# GCN-NEXT: V_CMP_EQ_F32134---135name: hazard_smem_war_only_lgkmcnt_0136body: |137 bb.0:138 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1139 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0140 S_WAITCNT 49279141 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec142 S_ENDPGM 0143...144 145# GCN-LABEL: name: hazard_smem_war_only_waitcnt_lgkmcnt_0146# GCN: S_LOAD_DWORD_IMM147# GCN-NEXT: S_WAITCNT_LGKMCNT148# GCN-NEXT: V_CMP_EQ_F32149---150name: hazard_smem_war_only_waitcnt_lgkmcnt_0151body: |152 bb.0:153 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1154 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0155 S_WAITCNT_LGKMCNT $sgpr_null, 0156 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec157 S_ENDPGM 0158...159 160# GCN-LABEL: name: hazard_smem_war_only_waitcnt_lgkmcnt_1161# GCN: S_LOAD_DWORD_IMM162# GCN-NEXT: S_WAITCNT_LGKMCNT163# GFX10-NEXT: $sgpr_null = S_MOV_B32 0164# GCN-NEXT: V_CMP_EQ_F32165---166name: hazard_smem_war_only_waitcnt_lgkmcnt_1167body: |168 bb.0:169 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1170 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0171 S_WAITCNT_LGKMCNT $sgpr_null, 1172 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec173 S_ENDPGM 0174...175 176# GCN-LABEL: name: hazard_smem_war_branch177# GCN: S_LOAD_DWORD_IMM178# GFX10: $sgpr_null = S_MOV_B32 0179# GCN: V_CMP_EQ_F32180---181name: hazard_smem_war_branch182body: |183 bb.0:184 liveins: $sgpr0, $sgpr1, $sgpr4, $vgpr0, $vgpr1185 successors: %bb.1186 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0187 S_BRANCH %bb.1188 189 bb.1:190 liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1191 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec192 S_ENDPGM 0193...194 195# GCN-LABEL: name: hazard_smem_war_cbranch196# GCN: S_AND_B64197# GCN: S_LOAD_DWORD_IMM198# GCN: S_CBRANCH_VCCZ199# GFX10-NOT: $sgpr_null = S_MOV_B32 0200# GCN: V_CMP_EQ_F32201# GCN: S_ENDPGM 0202# GFX10: $sgpr_null = S_MOV_B32 0203# GCN: V_CMP_EQ_F32204---205name: hazard_smem_war_cbranch206body: |207 bb.0:208 liveins: $sgpr0, $sgpr1, $sgpr4, $sgpr5, $vgpr0, $vgpr1209 successors: %bb.1, %bb.2210 $vcc = S_AND_B64 $sgpr4_sgpr5, $sgpr4_sgpr5, implicit-def $scc211 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0212 S_CBRANCH_VCCZ %bb.2, implicit killed $vcc213 214 bb.1:215 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr4, $sgpr5, $vgpr0, $vgpr1216 $sgpr4_sgpr5 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec217 S_ENDPGM 0218 219 bb.2:220 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr4, $sgpr5, $vgpr0, $vgpr1221 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec222 S_ENDPGM 0223...224 225# GCN-LABEL: name: hazard_smem_war_cbranch_carry226# GCN: S_AND_B64227# GCN: S_LOAD_DWORD_IMM228# GCN: S_CBRANCH_VCCZ229# GFX10-NOT: $sgpr_null = S_MOV_B32 0230# GCN: V_CMP_EQ_F32231# GCN-NEXT: S_ENDPGM 0232# GFX10-NOT: $sgpr_null = S_MOV_B32 0233# GCN: V_CMP_EQ_F32234# GFX10: $sgpr_null = S_MOV_B32 0235# GCN: V_CMP_EQ_F32236---237name: hazard_smem_war_cbranch_carry238body: |239 bb.0:240 liveins: $sgpr0, $sgpr1, $sgpr4, $sgpr5, $vgpr0, $vgpr1241 successors: %bb.1, %bb.2242 $vcc = S_AND_B64 $sgpr4_sgpr5, $sgpr4_sgpr5, implicit-def $scc243 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0244 S_CBRANCH_VCCZ %bb.2, implicit killed $vcc245 246 bb.1:247 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr4, $sgpr5, $vgpr0, $vgpr1248 $sgpr4_sgpr5 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec249 S_ENDPGM 0250 251 bb.2:252 successors: %bb.3253 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr4, $sgpr5, $vgpr0, $vgpr1254 $sgpr4_sgpr5 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec255 256 bb.3:257 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr4, $sgpr5, $vgpr0, $vgpr1258 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec259 S_ENDPGM 0260...261 262# GCN-LABEL: name: hazard_smem_war_backedge263# GFX10: $sgpr_null = S_MOV_B32 0264# GCN: V_CMP_EQ_F32265# GCN: S_LOAD_DWORD_IMM266---267name: hazard_smem_war_backedge268body: |269 bb.0:270 liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1271 successors: %bb.1272 $sgpr0_sgpr1 = V_CMP_EQ_F32_e64 0, $vgpr0, 0, $vgpr1, 1, implicit $mode, implicit $exec273 274 bb.1:275 liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1276 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0277 S_BRANCH %bb.0278...279 280# GCN-LABEL: name: hazard_smem_war_impdef281# GCN: S_LOAD_DWORD_IMM282# GFX10: $sgpr_null = S_MOV_B32 0283# GCN-NEXT: V_CMP_EQ_F32284---285name: hazard_smem_war_impdef286body: |287 bb.0:288 liveins: $vcc, $vgpr0289 $sgpr0 = S_LOAD_DWORD_IMM $vcc, 0, 0290 V_CMP_EQ_F32_e32 $vgpr0, $vgpr0, implicit-def $vcc, implicit $mode, implicit $exec291 S_ENDPGM 0292...293 294# GCN-LABEL: name: hazard_smem_war_readlane295# GCN: S_LOAD_DWORD_IMM296# GFX10: $sgpr_null = S_MOV_B32 0297# GCN-NEXT: V_READLANE_B32298---299name: hazard_smem_war_readlane300body: |301 bb.0:302 liveins: $sgpr0, $sgpr1, $sgpr3, $vgpr0303 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0304 $sgpr0 = V_READLANE_B32 $vgpr0, $sgpr3305 S_ENDPGM 0306...307 308# GCN-LABEL: name: hazard_smem_war_readfirstlane309# GCN: S_LOAD_DWORD_IMM310# GFX10: $sgpr_null = S_MOV_B32 0311# GCN-NEXT: V_READFIRSTLANE_B32312---313name: hazard_smem_war_readfirstlane314body: |315 bb.0:316 liveins: $sgpr0, $sgpr1, $vgpr0317 $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0318 $sgpr0 = V_READFIRSTLANE_B32 $vgpr0, implicit $exec319 S_ENDPGM 0320...321