1# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX10 %s 2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN %s 3 4# GCN-LABEL: name: flat_atomic_fcmpswap_to_s_denorm_mode 5# GCN: FLAT_ATOMIC_FCMPSWAP 6# GFX10-NEXT: S_NOP 2 7# GCN-NEXT: S_DENORM_MODE 8--- 9name: flat_atomic_fcmpswap_to_s_denorm_mode 10body: | 11 bb.0: 12 FLAT_ATOMIC_FCMPSWAP undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 13 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 14... 15 16# GCN-LABEL: name: flat_atomic_fcmpswap_x2_to_s_denorm_mode 17# GCN: FLAT_ATOMIC_FCMPSWAP_X2 18# GFX10-NEXT: S_NOP 2 19# GCN-NEXT: S_DENORM_MODE 20--- 21name: flat_atomic_fcmpswap_x2_to_s_denorm_mode 22body: | 23 bb.0: 24 FLAT_ATOMIC_FCMPSWAP_X2 undef %0:vreg_64, undef %1:vreg_128, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 25 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 26... 27 28# GCN-LABEL: name: flat_atomic_fmax_to_s_denorm_mode 29# GCN: FLAT_ATOMIC_FMAX 30# GFX10-NEXT: S_NOP 2 31# GCN-NEXT: S_DENORM_MODE 32--- 33name: flat_atomic_fmax_to_s_denorm_mode 34body: | 35 bb.0: 36 FLAT_ATOMIC_FMAX undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 37 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 38... 39 40# GCN-LABEL: name: flat_atomic_fmax_x2_to_s_denorm_mode 41# GCN: FLAT_ATOMIC_MAX_F64 42# GFX10-NEXT: S_NOP 2 43# GCN-NEXT: S_DENORM_MODE 44--- 45name: flat_atomic_fmax_x2_to_s_denorm_mode 46body: | 47 bb.0: 48 FLAT_ATOMIC_MAX_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 49 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 50... 51 52# GCN-LABEL: name: flat_atomic_fmin_to_s_denorm_mode 53# GCN: FLAT_ATOMIC_FMIN 54# GFX10-NEXT: S_NOP 2 55# GCN-NEXT: S_DENORM_MODE 56--- 57name: flat_atomic_fmin_to_s_denorm_mode 58body: | 59 bb.0: 60 FLAT_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 61 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 62... 63 64# GCN-LABEL: name: flat_atomic_fmin_x2_to_s_denorm_mode 65# GCN: FLAT_ATOMIC_MIN_F64 66# GFX10-NEXT: S_NOP 2 67# GCN-NEXT: S_DENORM_MODE 68--- 69name: flat_atomic_fmin_x2_to_s_denorm_mode 70body: | 71 bb.0: 72 FLAT_ATOMIC_MIN_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 73 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 74... 75 76# GCN-LABEL: name: flat_atomic_fcmpswap_x2_rtn_to_s_denorm_mode 77# GCN: FLAT_ATOMIC_FCMPSWAP_X2_RTN 78# GFX10-NEXT: S_NOP 2 79# GCN-NEXT: S_DENORM_MODE 80--- 81name: flat_atomic_fcmpswap_x2_rtn_to_s_denorm_mode 82body: | 83 bb.0: 84 %2:vreg_64 = FLAT_ATOMIC_FCMPSWAP_X2_RTN undef %0:vreg_64, undef %1:vreg_128, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 85 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 86... 87 88# GCN-LABEL: name: flat_atomic_fmax_rtn_to_s_denorm_mode 89# GCN: FLAT_ATOMIC_FMAX_RTN 90# GFX10-NEXT: S_NOP 2 91# GCN-NEXT: S_DENORM_MODE 92--- 93name: flat_atomic_fmax_rtn_to_s_denorm_mode 94body: | 95 bb.0: 96 %2:vgpr_32 = FLAT_ATOMIC_FMAX_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 97 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 98... 99 100# GCN-LABEL: name: flat_atomic_fmax_x2_rtn_to_s_denorm_mode 101# GCN: FLAT_ATOMIC_MAX_F64_RTN 102# GFX10-NEXT: S_NOP 2 103# GCN-NEXT: S_DENORM_MODE 104--- 105name: flat_atomic_fmax_x2_rtn_to_s_denorm_mode 106body: | 107 bb.0: 108 %2:vreg_64 = FLAT_ATOMIC_MAX_F64_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 109 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 110... 111 112# GCN-LABEL: name: flat_atomic_fmin_rtn_to_s_denorm_mode 113# GCN: FLAT_ATOMIC_FMIN_RTN 114# GFX10-NEXT: S_NOP 2 115# GCN-NEXT: S_DENORM_MODE 116--- 117name: flat_atomic_fmin_rtn_to_s_denorm_mode 118body: | 119 bb.0: 120 %2:vgpr_32 = FLAT_ATOMIC_FMIN_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 121 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 122... 123 124# GCN-LABEL: name: flat_atomic_fmin_x2_rtn_to_s_denorm_mode 125# GCN: FLAT_ATOMIC_MIN_F64_RTN 126# GFX10-NEXT: S_NOP 2 127# GCN-NEXT: S_DENORM_MODE 128--- 129name: flat_atomic_fmin_x2_rtn_to_s_denorm_mode 130body: | 131 bb.0: 132 %2:vreg_64 = FLAT_ATOMIC_MIN_F64_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 133 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 134... 135 136# GCN-LABEL: name: flat_atomic_fcmpswap_rtn_to_s_denorm_mode 137# GCN: FLAT_ATOMIC_FCMPSWAP_RTN 138# GFX10-NEXT: S_NOP 2 139# GCN-NEXT: S_DENORM_MODE 140--- 141name: flat_atomic_fcmpswap_rtn_to_s_denorm_mode 142body: | 143 bb.0: 144 %2:vgpr_32 = FLAT_ATOMIC_FCMPSWAP_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 145 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 146... 147 148# GCN-LABEL: name: global_atomic_fcmpswap_to_s_denorm_mode 149# GCN: GLOBAL_ATOMIC_FCMPSWAP 150# GFX10-NEXT: S_NOP 2 151# GCN-NEXT: S_DENORM_MODE 152--- 153name: global_atomic_fcmpswap_to_s_denorm_mode 154body: | 155 bb.0: 156 GLOBAL_ATOMIC_FCMPSWAP undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 157 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 158... 159 160# GCN-LABEL: name: global_atomic_fcmpswap_x2_to_s_denorm_mode 161# GCN: GLOBAL_ATOMIC_FCMPSWAP_X2 162# GFX10-NEXT: S_NOP 2 163# GCN-NEXT: S_DENORM_MODE 164--- 165name: global_atomic_fcmpswap_x2_to_s_denorm_mode 166body: | 167 bb.0: 168 GLOBAL_ATOMIC_FCMPSWAP_X2 undef %0:vreg_64, undef %1:vreg_128, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 169 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 170... 171 172# GCN-LABEL: name: global_atomic_fmax_to_s_denorm_mode 173# GCN: GLOBAL_ATOMIC_FMAX 174# GFX10-NEXT: S_NOP 2 175# GCN-NEXT: S_DENORM_MODE 176--- 177name: global_atomic_fmax_to_s_denorm_mode 178body: | 179 bb.0: 180 GLOBAL_ATOMIC_FMAX undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 181 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 182... 183 184# GCN-LABEL: name: global_atomic_fmax_x2_to_s_denorm_mode 185# GCN: GLOBAL_ATOMIC_MAX_F64 186# GFX10-NEXT: S_NOP 2 187# GCN-NEXT: S_DENORM_MODE 188--- 189name: global_atomic_fmax_x2_to_s_denorm_mode 190body: | 191 bb.0: 192 GLOBAL_ATOMIC_MAX_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 193 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 194... 195 196# GCN-LABEL: name: global_atomic_fmin_to_s_denorm_mode 197# GCN: GLOBAL_ATOMIC_FMIN 198# GFX10-NEXT: S_NOP 2 199# GCN-NEXT: S_DENORM_MODE 200--- 201name: global_atomic_fmin_to_s_denorm_mode 202body: | 203 bb.0: 204 GLOBAL_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 205 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 206... 207 208# GCN-LABEL: name: global_atomic_fmin_x2_to_s_denorm_mode 209# GCN: GLOBAL_ATOMIC_MIN_F64 210# GFX10-NEXT: S_NOP 2 211# GCN-NEXT: S_DENORM_MODE 212--- 213name: global_atomic_fmin_x2_to_s_denorm_mode 214body: | 215 bb.0: 216 GLOBAL_ATOMIC_MIN_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 217 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 218... 219 220# GCN-LABEL: name: global_atomic_fcmpswap_rtn_to_s_denorm_mode 221# GCN: GLOBAL_ATOMIC_FCMPSWAP_RTN 222# GFX10-NEXT: S_NOP 2 223# GCN-NEXT: S_DENORM_MODE 224--- 225name: global_atomic_fcmpswap_rtn_to_s_denorm_mode 226body: | 227 bb.0: 228 %2:vgpr_32 = GLOBAL_ATOMIC_FCMPSWAP_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 229 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 230... 231 232# GCN-LABEL: name: global_atomic_fcmpswap_x2_rtn_to_s_denorm_mode 233# GCN: GLOBAL_ATOMIC_FCMPSWAP_X2_RTN 234# GFX10-NEXT: S_NOP 2 235# GCN-NEXT: S_DENORM_MODE 236--- 237name: global_atomic_fcmpswap_x2_rtn_to_s_denorm_mode 238body: | 239 bb.0: 240 %2:vreg_64 = GLOBAL_ATOMIC_FCMPSWAP_X2_RTN undef %0:vreg_64, undef %1:vreg_128, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 241 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 242... 243 244# GCN-LABEL: name: global_atomic_fmax_rtn_to_s_denorm_mode 245# GCN: GLOBAL_ATOMIC_FMAX_RTN 246# GFX10-NEXT: S_NOP 2 247# GCN-NEXT: S_DENORM_MODE 248--- 249name: global_atomic_fmax_rtn_to_s_denorm_mode 250body: | 251 bb.0: 252 %2:vgpr_32 = GLOBAL_ATOMIC_FMAX_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 253 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 254... 255 256# GCN-LABEL: name: global_atomic_fmax_x2_rtn_to_s_denorm_mode 257# GCN: GLOBAL_ATOMIC_MAX_F64_RTN 258# GFX10-NEXT: S_NOP 2 259# GCN-NEXT: S_DENORM_MODE 260--- 261name: global_atomic_fmax_x2_rtn_to_s_denorm_mode 262body: | 263 bb.0: 264 %2:vreg_64 = GLOBAL_ATOMIC_MAX_F64_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 265 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 266... 267 268# GCN-LABEL: name: global_atomic_fmin_rtn_to_s_denorm_mode 269# GCN: GLOBAL_ATOMIC_FMIN_RTN 270# GFX10-NEXT: S_NOP 2 271# GCN-NEXT: S_DENORM_MODE 272--- 273name: global_atomic_fmin_rtn_to_s_denorm_mode 274body: | 275 bb.0: 276 %2:vgpr_32 = GLOBAL_ATOMIC_FMIN_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 277 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 278... 279 280# GCN-LABEL: name: global_atomic_fmin_x2_rtn_to_s_denorm_mode 281# GCN: GLOBAL_ATOMIC_MIN_F64_RTN 282# GFX10-NEXT: S_NOP 2 283# GCN-NEXT: S_DENORM_MODE 284--- 285name: global_atomic_fmin_x2_rtn_to_s_denorm_mode 286body: | 287 bb.0: 288 %2:vreg_64 = GLOBAL_ATOMIC_MIN_F64_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 289 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 290... 291 292# GCN-LABEL: name: global_atomic_fcmpswap_saddr_to_s_denorm_mode 293# GCN: GLOBAL_ATOMIC_FCMPSWAP_SADDR 294# GFX10-NEXT: S_NOP 2 295# GCN-NEXT: S_DENORM_MODE 296--- 297name: global_atomic_fcmpswap_saddr_to_s_denorm_mode 298body: | 299 bb.0: 300 GLOBAL_ATOMIC_FCMPSWAP_SADDR undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 301 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 302... 303 304# GCN-LABEL: name: global_atomic_fcmpswap_x2_saddr_rtn_to_s_denorm_mode 305# GCN: GLOBAL_ATOMIC_FCMPSWAP_X2_SADDR_RTN 306# GFX10-NEXT: S_NOP 2 307# GCN-NEXT: S_DENORM_MODE 308--- 309name: global_atomic_fcmpswap_x2_saddr_rtn_to_s_denorm_mode 310body: | 311 bb.0: 312 %2:vreg_64 = GLOBAL_ATOMIC_FCMPSWAP_X2_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_128, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 313 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 314... 315 316# GCN-LABEL: name: global_atomic_fmax_saddr_rtn_to_s_denorm_mode 317# GCN: GLOBAL_ATOMIC_FMAX_SADDR_RTN 318# GFX10-NEXT: S_NOP 2 319# GCN-NEXT: S_DENORM_MODE 320--- 321name: global_atomic_fmax_saddr_rtn_to_s_denorm_mode 322body: | 323 bb.0: 324 %2:vgpr_32 = GLOBAL_ATOMIC_FMAX_SADDR_RTN undef %0:vgpr_32, undef %1:vgpr_32, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 325 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 326... 327 328# GCN-LABEL: name: global_atomic_fmax_x2_saddr_rtn_to_s_denorm_mode 329# GCN: GLOBAL_ATOMIC_MAX_F64_SADDR_RTN 330# GFX10-NEXT: S_NOP 2 331# GCN-NEXT: S_DENORM_MODE 332--- 333name: global_atomic_fmax_x2_saddr_rtn_to_s_denorm_mode 334body: | 335 bb.0: 336 %2:vreg_64 = GLOBAL_ATOMIC_MAX_F64_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 337 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 338... 339 340# GCN-LABEL: name: global_atomic_fmin_saddr_rtn_to_s_denorm_mode 341# GCN: GLOBAL_ATOMIC_FMIN_SADDR_RTN 342# GFX10-NEXT: S_NOP 2 343# GCN-NEXT: S_DENORM_MODE 344--- 345name: global_atomic_fmin_saddr_rtn_to_s_denorm_mode 346body: | 347 bb.0: 348 %2:vgpr_32 = GLOBAL_ATOMIC_FMIN_SADDR_RTN undef %0:vgpr_32, undef %1:vgpr_32, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 349 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 350... 351 352# GCN-LABEL: name: global_atomic_fmin_x2_saddr_rtn_to_s_denorm_mode 353# GCN: GLOBAL_ATOMIC_MIN_F64_SADDR_RTN 354# GFX10-NEXT: S_NOP 2 355# GCN-NEXT: S_DENORM_MODE 356--- 357name: global_atomic_fmin_x2_saddr_rtn_to_s_denorm_mode 358body: | 359 bb.0: 360 %2:vreg_64 = GLOBAL_ATOMIC_MIN_F64_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 361 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 362... 363 364# GCN-LABEL: name: flat_fp_atomic_to_s_denorm_mode_waitcnt 365# GCN: FLAT_ATOMIC_FMIN 366# GCN-NEXT: S_WAITCNT 367# GCN-NEXT: S_DENORM_MODE 368--- 369name: flat_fp_atomic_to_s_denorm_mode_waitcnt 370body: | 371 bb.0: 372 FLAT_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 373 S_WAITCNT 0 374 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 375... 376 377# GCN-LABEL: name: flat_fp_atomic_to_s_denorm_mode_valu 378# GCN: FLAT_ATOMIC_FMIN 379# GCN-NEXT: V_ADD_F32_e32 380# GCN-NEXT: S_DENORM_MODE 381--- 382name: flat_fp_atomic_to_s_denorm_mode_valu 383body: | 384 bb.0: 385 FLAT_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`) 386 %2:vgpr_32 = V_ADD_F32_e32 undef %1:vgpr_32, undef %1:vgpr_32, implicit $mode, implicit $exec 387 S_DENORM_MODE 0, implicit-def $mode, implicit $mode 388... 389