diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -270,6 +270,9 @@ def FeatureAMXCOMPLEX : SubtargetFeature<"amx-complex", "HasAMXCOMPLEX", "true", "Support AMX-COMPLEX instructions", [FeatureAMXTILE]>; +def FeatureAMXCOMPLEX2 : SubtargetFeature<"amx-complex", "HasAMXCOMPLEX2", "true", + "Support AMX-COMPLEX instructions", + [FeatureAMXTILE]>; def FeatureCMPCCXADD : SubtargetFeature<"cmpccxadd", "HasCMPCCXADD", "true", "Support CMPCCXADD instructions">; def FeatureRAOINT : SubtargetFeature<"raoint", "HasRAOINT", "true", @@ -1055,7 +1058,8 @@ // Graniterapids list GNRAdditionalFeatures = [FeatureAMXFP16, FeaturePREFETCHI, - FeatureAMXCOMPLEX]; + FeatureAMXCOMPLEX, + FeatureAMXCOMPLEX2]; list GNRFeatures = !listconcat(SPRFeatures, GNRAdditionalFeatures); diff --git a/llvm/lib/Target/X86/X86InstrAMX.td b/llvm/lib/Target/X86/X86InstrAMX.td --- a/llvm/lib/Target/X86/X86InstrAMX.td +++ b/llvm/lib/Target/X86/X86InstrAMX.td @@ -216,6 +216,16 @@ } } // HasAMXTILE, HasAMXFP16 +let Predicates = [HasAMXCOMPLEX2, In64BitMode] in { + let SchedRW = [WriteSystem] in { + let Constraints = "$src1 = $dst" in { + def TCMMIMFP16PS2 : I<0x6d, MRMSrcReg4VOp3, (outs TILE:$dst), + (ins TILE:$src1, TILE:$src2, TILE:$src3), + "tcmmimfp16ps\t{$src3, $src2, $src1|$src1, $src2, $src3}", + []>, T8PD, VEX_4V; + } + } + } let Predicates = [HasAMXCOMPLEX, In64BitMode] in { let SchedRW = [WriteSystem] in { let Constraints = "$src1 = $dst" in { diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td --- a/llvm/lib/Target/X86/X86InstrInfo.td +++ b/llvm/lib/Target/X86/X86InstrInfo.td @@ -1011,6 +1011,7 @@ def HasAMXBF16 : Predicate<"Subtarget->hasAMXBF16()">; def HasAMXINT8 : Predicate<"Subtarget->hasAMXINT8()">; def HasAMXCOMPLEX : Predicate<"Subtarget->hasAMXCOMPLEX()">; +def HasAMXCOMPLEX2 : Predicate<"Subtarget->hasAMXCOMPLEX2()">; def HasUINTR : Predicate<"Subtarget->hasUINTR()">; def HasCRC32 : Predicate<"Subtarget->hasCRC32()">;