commit:     0524bc303ca3c2207a9b100719e21ab4a51c7e2e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 10 00:50:14 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jul 10 00:50:14 2025 +0000
URL:        https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=0524bc30

16.0.0: add fix for Blender

Bug: https://gcc.gnu.org/PR121015
Signed-off-by: Sam James <sam <AT> gentoo.org>

 16.0.0/gentoo/85_all_PR121015-blender.patch | 229 ++++++++++++++++++++++++++++
 16.0.0/gentoo/README.history                |   1 +
 2 files changed, 230 insertions(+)

diff --git a/16.0.0/gentoo/85_all_PR121015-blender.patch 
b/16.0.0/gentoo/85_all_PR121015-blender.patch
new file mode 100644
index 0000000..3adc1a7
--- /dev/null
+++ b/16.0.0/gentoo/85_all_PR121015-blender.patch
@@ -0,0 +1,229 @@
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121015#c4
+
+From 0ded000129390b21ec7dbab8db4cf64f85915ba6 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <[email protected]>
+Date: Thu, 10 Jul 2025 06:21:58 +0800
+Subject: [PATCH] x86: Handle broadcast all 1s to V8QI
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 77473a27bae04da99d6979d43e7bd0a8106f4557
+Author: H.J. Lu <[email protected]>
+Date:   Thu Jun 26 06:08:51 2025 +0800
+
+    x86: Also handle all 1s float vector constant
+
+replaces
+
+(insn 29 28 30 5 (set (reg:V2SF 107)
+        (mem/u/c:V2SF (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [0  S8 A64])) 
2031 {*movv2sf_internal}
+     (expr_list:REG_EQUAL (const_vector:V2SF [
+                (const_double:SF -QNaN [-QNaN]) repeated x2
+            ])
+        (nil)))
+
+with
+
+(insn 98 13 14 3 (set (reg:V8QI 112)
+        (const_vector:V8QI [
+                (const_int -1 [0xffffffffffffffff]) repeated x8
+            ])) -1
+     (nil))
+...
+(insn 29 28 30 5 (set (reg:V2SF 107)
+        (subreg:V2SF (reg:V8QI 112) 0)) 2031 {*movv2sf_internal}
+     (expr_list:REG_EQUAL (const_vector:V2SF [
+                (const_double:SF -QNaN [-QNaN]) repeated x2
+            ])
+        (nil)))
+
+which leads to
+
+pr121015.c: In function ‘render_result_from_bake_h’:
+pr121015.c:34:1: error: unrecognizable insn:
+   34 | }
+      | ^
+(insn 98 13 14 3 (set (reg:V8QI 112)
+        (const_vector:V8QI [
+                (const_int -1 [0xffffffffffffffff]) repeated x8
+            ])) -1
+     (expr_list:REG_EQUIV (const_vector:V8QI [
+                (const_int -1 [0xffffffffffffffff]) repeated x8
+            ])
+        (nil)))
+during RTL pass: ira
+
+Generate
+
+(insn 99 13 98 3 (set (reg:V16QI 113)
+        (const_vector:V16QI [
+                (const_int -1 [0xffffffffffffffff]) repeated x16
+            ])) -1
+     (nil))
+(insn 98 99 14 3 (set (reg:V8QI 112)
+        (subreg:V8QI (reg:V16QI 113) 0)) -1
+     (nil))
+
+instead of
+
+(insn 98 13 14 3 (set (reg:V8QI 112)
+        (const_vector:V8QI [
+                (const_int -1 [0xffffffffffffffff]) repeated x8
+            ])) -1
+     (nil))
+
+gcc/
+
+       PR target/121015
+       * config/i386/i386-features.cc (ix86_place_single_vector_set):
+       Handle broadcast all 1s to V8QI.
+
+gcc/testsuite/
+
+       PR target/121015
+       * gcc.target/i386/pr121015.c: New test.
+
+Signed-off-by: H.J. Lu <[email protected]>
+---
+ gcc/config/i386/i386-features.cc         | 60 +++++++++++++++++-------
+ gcc/testsuite/gcc.target/i386/pr121015.c | 34 ++++++++++++++
+ 2 files changed, 78 insertions(+), 16 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.target/i386/pr121015.c
+
+diff --git a/gcc/config/i386/i386-features.cc 
b/gcc/config/i386/i386-features.cc
+index 054f8d5ddc8..f7629644380 100644
+--- a/gcc/config/i386/i386-features.cc
++++ b/gcc/config/i386/i386-features.cc
+@@ -3085,6 +3085,9 @@ ix86_rpad_gate ()
+         && optimize_function_for_speed_p (cfun));
+ }
+ 
++static machine_mode ix86_get_vector_cse_mode (unsigned int,
++                                            machine_mode smode);
++
+ /* Generate a vector set, DEST = SRC, at entry of the nearest dominator
+    for basic block map BBS, which is in the fake loop that contains the
+    whole function, so that there is only a single vector set in the
+@@ -3101,6 +3104,26 @@ ix86_place_single_vector_set (rtx dest, rtx src, bitmap 
bbs,
+     bb = get_immediate_dominator (CDI_DOMINATORS,
+                                 bb->loop_father->header);
+ 
++  machine_mode mode = GET_MODE (dest);
++  rtx set_xmm = nullptr;
++  rtx_insn *set_xmm_insn = nullptr;
++  if (GET_MODE_SIZE (mode) < 16)
++    {
++      /* Handle
++
++       (const_vector:V8QI
++         [(const_int -1 [0xffffffffffffffff]) repeated x8 ])
++
++       */
++      if (src != CONSTM1_RTX (mode))
++      gcc_unreachable ();
++      machine_mode xmm_mode
++      = ix86_get_vector_cse_mode (16, GET_MODE_INNER (mode));
++      rtx xmm_src = gen_reg_rtx (xmm_mode);
++      set_xmm = gen_rtx_SET (xmm_src, CONSTM1_RTX (xmm_mode));
++      src = gen_rtx_SUBREG (mode, xmm_src, 0);
++    }
++
+   rtx set = gen_rtx_SET (dest, src);
+ 
+   rtx_insn *insn = BB_HEAD (bb);
+@@ -3114,31 +3137,36 @@ ix86_place_single_vector_set (rtx dest, rtx src, 
bitmap bbs,
+       insn = NEXT_INSN (insn);
+     }
+ 
++  rtx_insn *after = nullptr;
+   rtx_insn *set_insn;
+   if (insn == BB_HEAD (bb))
+-    {
+-      set_insn = emit_insn_before (set, insn);
+-      if (dump_file)
+-      {
+-        fprintf (dump_file, "\nPlace:\n\n");
+-        print_rtl_single (dump_file, set_insn);
+-        fprintf (dump_file, "\nbefore:\n\n");
+-        print_rtl_single (dump_file, insn);
+-        fprintf (dump_file, "\n");
+-      }
+-    }
++    set_insn = emit_insn_before (set, insn);
+   else
+     {
+-      rtx_insn *after = insn ? PREV_INSN (insn) : BB_END (bb);
++      after = insn ? PREV_INSN (insn) : BB_END (bb);
+       set_insn = emit_insn_after (set, after);
+-      if (dump_file)
++    }
++
++  if (set_xmm)
++    set_xmm_insn = emit_insn_before (set_xmm, set_insn);
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "\nPlace:\n\n");
++      if (set_xmm_insn)
++      print_rtl_single (dump_file, set_xmm_insn);
++      print_rtl_single (dump_file, set_insn);
++      if (after)
+       {
+-        fprintf (dump_file, "\nPlace:\n\n");
+-        print_rtl_single (dump_file, set_insn);
+         fprintf (dump_file, "\nafter:\n\n");
+         print_rtl_single (dump_file, after);
+-        fprintf (dump_file, "\n");
+       }
++      else
++      {
++        fprintf (dump_file, "\nbefore:\n\n");
++        print_rtl_single (dump_file, insn);
++      }
++      fprintf (dump_file, "\n");
+     }
+ 
+   if (inner_scalar)
+diff --git a/gcc/testsuite/gcc.target/i386/pr121015.c 
b/gcc/testsuite/gcc.target/i386/pr121015.c
+new file mode 100644
+index 00000000000..ad1fdccf50c
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/i386/pr121015.c
+@@ -0,0 +1,34 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=x86-64-v3" } */
++/* { dg-final { scan-assembler-times "vpcmpeq" 1 { target { ! ia32 } } } } */
++/* { dg-final { scan-assembler-not "\.long\[ \t\]+-1\n" { target { ! ia32 } } 
} } */
++
++extern union {
++  int i;
++  float f;
++} int_as_float_u;
++
++extern int render_result_from_bake_w;
++extern int render_result_from_bake_h_seed_pass;
++extern float *render_result_from_bake_h_primitive;
++extern float *render_result_from_bake_h_seed;
++
++float
++int_as_float(int i)
++{
++  int_as_float_u.i = i;
++  return int_as_float_u.f;
++}
++
++void
++render_result_from_bake_h(int tx)
++{
++  while (render_result_from_bake_w) {
++    for (; tx < render_result_from_bake_w; tx++)
++      render_result_from_bake_h_primitive[1] =
++          render_result_from_bake_h_primitive[2] = int_as_float(-1);
++    if (render_result_from_bake_h_seed_pass) {
++      *render_result_from_bake_h_seed = 0;
++    }
++  }
++}
+-- 
+2.50.0

diff --git a/16.0.0/gentoo/README.history b/16.0.0/gentoo/README.history
index 48846cc..caee4e9 100644
--- a/16.0.0/gentoo/README.history
+++ b/16.0.0/gentoo/README.history
@@ -2,6 +2,7 @@
 
        - 
85_all_PR120929-Revert-Use-the-counted_by-attribute-of-pointers-in-a.patch
        - 
86_all_PR120929-Revert-Use-the-counted_by-attribute-of-pointers-in-b.patch
+       + 85_all_PR121015-blender.patch
 
 5      6 July 2025
 

Reply via email to