@@ -684,7 +684,14 @@ class AMDGPUDimAtomicProfile<string opmod,
684
684
let IsAtomic = true;
685
685
}
686
686
687
- class AMDGPUDimGetResInfoProfile<AMDGPUDimProps dim> : AMDGPUDimProfile<"GET_RESINFO", dim> {
687
+ class AMDGPUDimAtomicFloatProfile<string opmod, AMDGPUDimProps dim,
688
+ list<AMDGPUArg> dataargs>
689
+ : AMDGPUDimAtomicProfile<opmod, dim, dataargs> {
690
+ let RetTypes = [llvm_anyfloat_ty];
691
+ }
692
+
693
+ class AMDGPUDimGetResInfoProfile<AMDGPUDimProps dim>
694
+ : AMDGPUDimProfile<"GET_RESINFO", dim> {
688
695
let RetTypes = [llvm_anyfloat_ty];
689
696
let DataArgs = [];
690
697
let AddrArgs = [AMDGPUArg<llvm_anyint_ty, "mip">];
@@ -860,26 +867,35 @@ defset list<AMDGPUImageDimIntrinsic> AMDGPUImageDimIntrinsics = {
860
867
// atomic intrinsics
861
868
//////////////////////////////////////////////////////////////////////////
862
869
defset list<AMDGPUImageDimIntrinsic> AMDGPUImageDimAtomicIntrinsics = {
863
- multiclass AMDGPUImageDimAtomicX<string opmod, list<AMDGPUArg> dataargs> {
864
- foreach dim = AMDGPUDims.All in {
865
- def !strconcat(NAME, "_", dim.Name)
866
- : AMDGPUImageDimIntrinsic<
867
- AMDGPUDimAtomicProfile<opmod, dim, dataargs>,
868
- [], [SDNPMemOperand]>;
869
- }
870
+ multiclass AMDGPUImageDimAtomicX<string opmod, list<AMDGPUArg> dataargs,
871
+ int isFloat = 0> {
872
+ foreach dim = AMDGPUDims.All in {
873
+ def !strconcat(NAME, "_", dim.Name): AMDGPUImageDimIntrinsic<
874
+ !if (isFloat, AMDGPUDimAtomicFloatProfile<opmod, dim, dataargs>,
875
+ AMDGPUDimAtomicProfile<opmod, dim, dataargs>),
876
+ [], [SDNPMemOperand]>;
877
+ }
870
878
}
871
879
872
- multiclass AMDGPUImageDimAtomic<string opmod> {
873
- defm "" : AMDGPUImageDimAtomicX<opmod, [AMDGPUArg<LLVMMatchType<0>, "vdata">]>;
880
+ multiclass AMDGPUImageDimAtomic<string opmod, int isFloat = 0> {
881
+ defm ""
882
+ : AMDGPUImageDimAtomicX<opmod, [AMDGPUArg<LLVMMatchType<0>, "vdata">],
883
+ isFloat>;
884
+ }
885
+
886
+ multiclass AMDGPUImageDimFloatAtomic<string opmod> {
887
+ defm "" : AMDGPUImageDimAtomic<opmod, 1 /*isFloat*/>;
874
888
}
875
889
876
890
defm int_amdgcn_image_atomic_swap : AMDGPUImageDimAtomic<"ATOMIC_SWAP">;
877
891
defm int_amdgcn_image_atomic_add : AMDGPUImageDimAtomic<"ATOMIC_ADD">;
878
892
defm int_amdgcn_image_atomic_sub : AMDGPUImageDimAtomic<"ATOMIC_SUB">;
879
893
defm int_amdgcn_image_atomic_smin : AMDGPUImageDimAtomic<"ATOMIC_SMIN">;
880
894
defm int_amdgcn_image_atomic_umin : AMDGPUImageDimAtomic<"ATOMIC_UMIN">;
895
+ defm int_amdgcn_image_atomic_fmin : AMDGPUImageDimFloatAtomic<"ATOMIC_FMIN">;
881
896
defm int_amdgcn_image_atomic_smax : AMDGPUImageDimAtomic<"ATOMIC_SMAX">;
882
897
defm int_amdgcn_image_atomic_umax : AMDGPUImageDimAtomic<"ATOMIC_UMAX">;
898
+ defm int_amdgcn_image_atomic_fmax : AMDGPUImageDimFloatAtomic<"ATOMIC_FMAX">;
883
899
defm int_amdgcn_image_atomic_and : AMDGPUImageDimAtomic<"ATOMIC_AND">;
884
900
defm int_amdgcn_image_atomic_or : AMDGPUImageDimAtomic<"ATOMIC_OR">;
885
901
defm int_amdgcn_image_atomic_xor : AMDGPUImageDimAtomic<"ATOMIC_XOR">;
@@ -1015,8 +1031,10 @@ def int_amdgcn_raw_buffer_atomic_add : AMDGPURawBufferAtomic;
1015
1031
def int_amdgcn_raw_buffer_atomic_sub : AMDGPURawBufferAtomic;
1016
1032
def int_amdgcn_raw_buffer_atomic_smin : AMDGPURawBufferAtomic;
1017
1033
def int_amdgcn_raw_buffer_atomic_umin : AMDGPURawBufferAtomic;
1034
+ def int_amdgcn_raw_buffer_atomic_fmin : AMDGPURawBufferAtomic<llvm_anyfloat_ty>;
1018
1035
def int_amdgcn_raw_buffer_atomic_smax : AMDGPURawBufferAtomic;
1019
1036
def int_amdgcn_raw_buffer_atomic_umax : AMDGPURawBufferAtomic;
1037
+ def int_amdgcn_raw_buffer_atomic_fmax : AMDGPURawBufferAtomic<llvm_anyfloat_ty>;
1020
1038
def int_amdgcn_raw_buffer_atomic_and : AMDGPURawBufferAtomic;
1021
1039
def int_amdgcn_raw_buffer_atomic_or : AMDGPURawBufferAtomic;
1022
1040
def int_amdgcn_raw_buffer_atomic_xor : AMDGPURawBufferAtomic;
@@ -1036,10 +1054,6 @@ def int_amdgcn_raw_buffer_atomic_cmpswap : Intrinsic<
1036
1054
// gfx908 intrinsic
1037
1055
def int_amdgcn_raw_buffer_atomic_fadd : AMDGPURawBufferAtomic<llvm_anyfloat_ty>;
1038
1056
1039
- // gfx90a intrinsics
1040
- def int_amdgcn_raw_buffer_atomic_fmin : AMDGPURawBufferAtomic<llvm_anyfloat_ty>;
1041
- def int_amdgcn_raw_buffer_atomic_fmax : AMDGPURawBufferAtomic<llvm_anyfloat_ty>;
1042
-
1043
1057
class AMDGPUStructBufferAtomic<LLVMType data_ty = llvm_any_ty, bit NoRtn = false> : Intrinsic <
1044
1058
!if(NoRtn, [], [data_ty]),
1045
1059
[!if(NoRtn, data_ty, LLVMMatchType<0>), // vdata(VGPR)
0 commit comments