Author: Phoebe Wang
Date: 2025-12-25T09:11:15Z
New Revision: 8e335e9468bdaea73212754c6a71f5a3e6bc2fbc

URL: 
https://github.com/llvm/llvm-project/commit/8e335e9468bdaea73212754c6a71f5a3e6bc2fbc
DIFF: 
https://github.com/llvm/llvm-project/commit/8e335e9468bdaea73212754c6a71f5a3e6bc2fbc.diff

LOG: [X86][AMX-AVX512] Add required/min vector width 512 constraint (#173532)

We use ZMM registers in AMX-AVX512 instructions.

Fixes: https://godbolt.org/z/GsY167Yzn

Added: 
    

Modified: 
    clang/include/clang/Basic/BuiltinsX86_64.td
    clang/lib/Headers/amxavx512intrin.h

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/BuiltinsX86_64.td 
b/clang/include/clang/Basic/BuiltinsX86_64.td
index 062060e6afbbe..2e68a5a016ef0 100644
--- a/clang/include/clang/Basic/BuiltinsX86_64.td
+++ b/clang/include/clang/Basic/BuiltinsX86_64.td
@@ -239,7 +239,7 @@ let Features = "amx-complex", Attributes = [NoThrow] in {
   def tcmmrlfp16ps_internal : X86Builtin<"_Vector<256, int>(unsigned short, 
unsigned short, unsigned short, _Vector<256, int>, _Vector<256, int>, 
_Vector<256, int>)">;
 }
 
-let Features = "amx-avx512,avx10.2", Attributes = [NoThrow] in {
+let Features = "amx-avx512,avx10.2", Attributes = [NoThrow, 
RequiredVectorWidth<512>] in {
   def tcvtrowd2ps_internal : X86Builtin<"_Vector<16, float>(unsigned short, 
unsigned short, _Vector<256, int>, unsigned int)">;
   def tcvtrowps2bf16h_internal : X86Builtin<"_Vector<32, __bf16>(unsigned 
short, unsigned short, _Vector<256, int>, unsigned int)">;
   def tcvtrowps2bf16l_internal : X86Builtin<"_Vector<32, __bf16>(unsigned 
short, unsigned short, _Vector<256, int>, unsigned int)">;
@@ -297,7 +297,7 @@ let Features = "amx-complex", Attributes = [NoThrow] in {
   def tcmmrlfp16ps : X86Builtin<"void(_Constant unsigned char, _Constant 
unsigned char, _Constant unsigned char)">;
 }
 
-let Features = "amx-avx512,avx10.2", Attributes = [NoThrow] in {
+let Features = "amx-avx512,avx10.2", Attributes = [NoThrow, 
RequiredVectorWidth<512>] in {
   def tcvtrowd2ps : X86Builtin<"_Vector<16, float>(_Constant unsigned char, 
unsigned int)">;
   def tcvtrowps2bf16h : X86Builtin<"_Vector<32, __bf16>(_Constant unsigned 
char, unsigned int)">;
   def tcvtrowps2bf16l : X86Builtin<"_Vector<32, __bf16>(_Constant unsigned 
char, unsigned int)">;

diff  --git a/clang/lib/Headers/amxavx512intrin.h 
b/clang/lib/Headers/amxavx512intrin.h
index 373a54f46290f..5f21c25b05ad1 100644
--- a/clang/lib/Headers/amxavx512intrin.h
+++ b/clang/lib/Headers/amxavx512intrin.h
@@ -16,7 +16,7 @@
 
 #define __DEFAULT_FN_ATTRS_AVX512                                              
\
   __attribute__((__always_inline__, __nodebug__,                               
\
-                 __target__("amx-avx512,avx10.2")))
+                 __target__("amx-avx512,avx10.2"), __min_vector_width__(512)))
 
 /// Moves a row from a tile register to a zmm destination register, converting
 ///    the int32 source elements to fp32. The row of the tile is selected by a


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to