https://github.com/phoebewang created https://github.com/llvm/llvm-project/pull/219868
Ref.: https://cdrdv2.intel.com/v1/dl/getContent/671368 Assisted-by: Claude Opus 4.8 >From 65bf0983dfce442723173542123204a3922e3012 Mon Sep 17 00:00:00 2001 From: Phoebe Wang <[email protected]> Date: Sun, 30 Aug 2026 20:00:10 -0700 Subject: [PATCH] [X86][AMX-AVX512] Update intrinsic Operation to match with ISE062, NFCI Ref.: https://cdrdv2.intel.com/v1/dl/getContent/671368 Assisted-by: Claude Opus 4.8 --- clang/lib/Headers/amxavx512intrin.h | 274 +++++++++++++++------------- 1 file changed, 150 insertions(+), 124 deletions(-) diff --git a/clang/lib/Headers/amxavx512intrin.h b/clang/lib/Headers/amxavx512intrin.h index 18ef721cd1601..ff41ba08eaaed 100644 --- a/clang/lib/Headers/amxavx512intrin.h +++ b/clang/lib/Headers/amxavx512intrin.h @@ -31,16 +31,18 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := row & 0xffff -/// row_chunk := ((row >> 16) & 0xffff) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.f32[i] := CONVERT_INT32_TO_FP32(tsrc.row[row_index].dword[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := row & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.f32[i] := CONVERT_INT32_TO_FP32(tsrc.row[row_index].dword[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -65,16 +67,18 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := imm8 & 0x3f -/// row_chunk := (imm8 >> 6) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.f32[i] := CONVERT_INT32_TO_FP32(tsrc.row[row_index].dword[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := imm8 & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.f32[i] := CONVERT_INT32_TO_FP32(tsrc.row[row_index].dword[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -100,17 +104,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := row & 0xffff -/// row_chunk := ((row >> 16) & 0xffff) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+0] := 0 -/// dst.bf16[2*i+1] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := row & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+0] := 0 +/// dst.bf16[2*i+1] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -137,17 +143,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := imm8 & 0x3f -/// row_chunk := (imm8 >> 6) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+0] := 0 -/// dst.bf16[2*i+1] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := imm8 & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+0] := 0 +/// dst.bf16[2*i+1] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -174,17 +182,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := row & 0xffff -/// row_chunk := ((row >> 16) & 0xffff) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+1] := 0 -/// dst.bf16[2*i+0] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := row & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+1] := 0 +/// dst.bf16[2*i+0] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -211,17 +221,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := imm8 & 0x3f -/// row_chunk := (imm8 >> 6) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+1] := 0 -/// dst.bf16[2*i+0] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := imm8 & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+1] := 0 +/// dst.bf16[2*i+0] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -248,17 +260,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := row & 0xffff -/// row_chunk := ((row >> 16) & 0xffff) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+0] := 0 -/// dst.fp16[2*i+1] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := row & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+0] := 0 +/// dst.fp16[2*i+1] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -284,17 +298,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := imm8 & 0x3f -/// row_chunk := (imm8 >> 6) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+0] := 0 -/// dst.fp16[2*i+1] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := imm8 & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+0] := 0 +/// dst.fp16[2*i+1] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -321,17 +337,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := row & 0xffff -/// row_chunk := ((row >> 16) & 0xffff) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+1] := 0 -/// dst.fp16[2*i+0] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := row & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+1] := 0 +/// dst.fp16[2*i+0] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -357,17 +375,19 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL >> 3 -/// row_index := imm8 & 0x3f -/// row_chunk := (imm8 >> 6) * VL_bytes -/// FOR i := 0 TO (VL_bytes / 4) - 1 -/// IF i + row_chunk / 4 >= tsrc.colsb / 4 -/// dst.dword[i] := 0 -/// ELSE -/// dst.word[2*i+1] := 0 -/// dst.fp16[2*i+0] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[row_chunk/4+i], RNE) -/// FI -/// ENDFOR -/// dst[MAX_VL-1:VL] := 0 +/// row_index := imm8 & 0xf +/// IF row_index > tsrc.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes / 4) - 1 +/// IF i >= tsrc.colsb / 4 +/// dst.dword[i] := 0 +/// ELSE +/// dst.word[2*i+1] := 0 +/// dst.fp16[2*i+0] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE) +/// FI +/// ENDFOR +/// FI /// zero_tileconfig_start() /// \endcode /// @@ -401,14 +421,17 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL>>3 -/// row_index := b&0xffff -/// row_chunk := ((b>>16)&0xffff) * VL_bytes -/// FOR i := 0 TO (VL_bytes-1) -/// IF (row_chunk + i >= a.colsb) -/// dst.byte[i] := 0 -/// ELSE -/// dst.byte[i] := a.row[row_index].byte[row_chunk+i] -/// ENDFOR +/// row_index := b&0xf +/// IF row_index > a.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes-1) +/// IF (i >= a.colsb) +/// dst.byte[i] := 0 +/// ELSE +/// dst.byte[i] := a.row[row_index].byte[i] +/// ENDFOR +/// FI /// \endcode #define _tile_movrow(a, b) ((__m512i)__builtin_ia32_tilemovrow(a, b)) @@ -433,14 +456,17 @@ /// \code{.operation} /// VL := 512 /// VL_bytes := VL>>3 -/// row_index := b&0x3f -/// row_chunk := (b>>6) * VL_bytes -/// FOR i := 0 TO (VL_bytes-1) -/// IF (row_chunk + i >= a.colsb) -/// dst.byte[i] := 0 -/// ELSE -/// dst.byte[i] := a.row[row_index].byte[row_chunk+i] -/// ENDFOR +/// row_index := b&0xf +/// IF row_index > a.rows +/// dst[VL-1:0] := 0 +/// ELSE +/// FOR i := 0 TO (VL_bytes-1) +/// IF (i >= a.colsb) +/// dst.byte[i] := 0 +/// ELSE +/// dst.byte[i] := a.row[row_index].byte[i] +/// ENDFOR +/// FI /// \endcode #define _tile_movrowi(a, b) ((__m512i)__builtin_ia32_tilemovrowi(a, b)) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
