diff --git a/llvm/lib/Target/AMDGPU/FLATInstructions.td b/llvm/lib/Target/AMDGPU/FLATInstructions.td index 88b694862d376..5f575fc9fd588 100644 --- a/llvm/lib/Target/AMDGPU/FLATInstructions.td +++ b/llvm/lib/Target/AMDGPU/FLATInstructions.td @@ -1036,9 +1036,11 @@ defm GLOBAL_LOAD_LDS_DWORDX3 : FLAT_Global_Load_LDS_Pseudo <"global_load_lds_dwo defm GLOBAL_LOAD_LDS_DWORDX4 : FLAT_Global_Load_LDS_Pseudo <"global_load_lds_dwordx4">; } +let SubtargetPredicate = isGFX12PlusNot12_50 in + defm GLOBAL_ATOMIC_ORDERED_ADD_B64 : FLAT_Global_Atomic_Pseudo <"global_atomic_ordered_add_b64", VReg_64, i64>; + let SubtargetPredicate = isGFX12Plus in { defm GLOBAL_ATOMIC_COND_SUB_U32 : FLAT_Global_Atomic_Pseudo <"global_atomic_cond_sub_u32", VGPR_32, i32>; - defm GLOBAL_ATOMIC_ORDERED_ADD_B64 : FLAT_Global_Atomic_Pseudo <"global_atomic_ordered_add_b64", VReg_64, i64>; def GLOBAL_INV : FLAT_Global_Invalidate_Writeback<"global_inv">; def GLOBAL_WB : FLAT_Global_Invalidate_Writeback<"global_wb">; @@ -1827,19 +1829,19 @@ let SubtargetPredicate = isGFX12Plus in { defm : GlobalFLATAtomicPatsNoRtnWithAddrSpace <"GLOBAL_ATOMIC_COND_SUB_U32", "int_amdgcn_atomic_cond_sub_u32", "global_addrspace", i32>; } -let OtherPredicates = [isGFX12Plus] in { +let OtherPredicates = [isGFX12PlusNot12_50] in defm : GlobalFLATAtomicPatsRtn <"GLOBAL_ATOMIC_ORDERED_ADD_B64", "int_amdgcn_global_atomic_ordered_add_b64", i64, i64, /* isIntr */ 1>; - let WaveSizePredicate = isWave32 in { - defm : GlobalFLATLoadPats ; - foreach vt = [v8i16, v8f16, v8bf16] in - defm : GlobalFLATLoadPats ; - } - let WaveSizePredicate = isWave64 in { - defm : GlobalFLATLoadPats ; - foreach vt = [v4i16, v4f16, v4bf16] in - defm : GlobalFLATLoadPats ; - } +let WaveSizePredicate = isWave32, OtherPredicates = [isGFX12Plus] in { + defm : GlobalFLATLoadPats ; + foreach vt = [v8i16, v8f16, v8bf16] in + defm : GlobalFLATLoadPats ; +} + +let WaveSizePredicate = isWave64, OtherPredicates = [isGFX12PlusNot12_50] in { + defm : GlobalFLATLoadPats ; + foreach vt = [v4i16, v4f16, v4bf16] in + defm : GlobalFLATLoadPats ; } let SubtargetPredicate = HasAtomicFMinFMaxF32GlobalInsts, OtherPredicates = [HasFlatGlobalInsts] in { diff --git a/llvm/test/MC/AMDGPU/gfx1250_asm_unsupported.s b/llvm/test/MC/AMDGPU/gfx1250_asm_unsupported.s index 2111e91cd5ef2..89bd507942a22 100644 --- a/llvm/test/MC/AMDGPU/gfx1250_asm_unsupported.s +++ b/llvm/test/MC/AMDGPU/gfx1250_asm_unsupported.s @@ -1,5 +1,8 @@ ; RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1250 -show-encoding %s 2>&1 | FileCheck --check-prefix=GFX1250-ERR --implicit-check-not=error: --strict-whitespace %s +global_atomic_ordered_add_b64 v0, v[2:3], s[0:1] offset:-64 +// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU + ;; DOT4_F32_*, DOT2_F32_*, DOT2_F16 and DOT2_BF16 v_dot4_f32_fp8_fp8 v0, v1, v2, v3