[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] gimple-simulate: sauvegarde

Mikael Morin mikael@gcc.gnu.org
Fri Sep 19 19:13:01 GMT 2025


https://gcc.gnu.org/g:6e7727b9834e9b172417adffebd20ee8f749506e

commit 6e7727b9834e9b172417adffebd20ee8f749506e
Author: Mikael Morin <mikael@gcc.gnu.org>
Date:   Fri Aug 29 20:52:19 2025 +0200

    gimple-simulate: sauvegarde

Diff:
---
 gcc/gimple-simulate.cc | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/gcc/gimple-simulate.cc b/gcc/gimple-simulate.cc
index 9333c64aa77d..3bdfd2bf6f7d 100644
--- a/gcc/gimple-simulate.cc
+++ b/gcc/gimple-simulate.cc
@@ -807,6 +807,8 @@ static tree
 pick_subref_at (tree var_ref, unsigned offset, int * ignored_bits,
 		unsigned min_size)
 {
+  if (ignored_bits != nullptr)
+    *ignored_bits = 0;
   tree ref = var_ref;
   unsigned remaining_offset = offset;
   while (true)
@@ -953,8 +955,20 @@ find_mem_ref_replacement (tree * repl, unsigned * offset, simul_scope & context,
 	  remaining_offset += wi_idx * CHAR_BIT;
 	}
 
-      *repl = var_ref;
-      *offset = remaining_offset.to_shwi ();
+      int ignored_bits;
+      tree t = pick_subref_at (var_ref, remaining_offset.to_shwi (),
+			       &ignored_bits,
+			       get_constant_type_size (access_type));
+      if (t == NULL_TREE)
+	{
+	  *repl = var_ref;
+	  *offset = remaining_offset.to_shwi ();
+	}
+      else
+	{
+	  *repl = t;
+	  *offset = ignored_bits;
+	}
       return true;
     }
 }


More information about the Gcc-cvs mailing list