]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp: Avoid calling clear_type_padding_in_mask in the common case where there can...
authorJakub Jelinek <jakub@redhat.com>
Tue, 12 Oct 2021 07:55:41 +0000 (09:55 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Tue, 12 Oct 2021 07:55:41 +0000 (09:55 +0200)
We can use the clear_padding_type_may_have_padding_p function, which
is conservative for e.g. RECORD_TYPE/UNION_TYPE, but for the floating and
complex floating types is accurate.  clear_type_padding_in_mask is
more expensive because we need to allocate memory, fill it, call the function
which itself is more expensive and then analyze the memory, so for the
common case of float/double atomics or even long double on most targets
we can avoid that.

2021-10-12  Jakub Jelinek  <jakub@redhat.com>

gcc/
* gimple-fold.h (clear_padding_type_may_have_padding_p): Declare.
* gimple-fold.c (clear_padding_type_may_have_padding_p): No longer
static.
gcc/c-family/
* c-omp.c (c_finish_omp_atomic): Use
clear_padding_type_may_have_padding_p.

(cherry picked from commit 8e1fe3f779185cc678493ceda42c2e620a5c1387)

gcc/ChangeLog.omp
gcc/c-family/ChangeLog.omp
gcc/c-family/c-omp.c
gcc/gimple-fold.c
gcc/gimple-fold.h

index 34c16660513aea0418ca579ed9d493fc38ad2275..8875462612186e9544201d5e161fbb8892fa07a6 100644 (file)
@@ -1,3 +1,12 @@
+2021-10-12  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backported from master:
+       2021-10-12  Jakub Jelinek  <jakub@redhat.com>
+
+       * gimple-fold.h (clear_padding_type_may_have_padding_p): Declare.
+       * gimple-fold.c (clear_padding_type_may_have_padding_p): No longer
+       static.
+
 2021-10-11  Marcel Vollweiler  <marcel@codesourcery.com>
 
        Backported from master:
index 4d19a6e56c7c0ae53c7dadc873b511eda01a05d5..48ca80ae153862d63cbe0c0da36ac33685b6a1cd 100644 (file)
@@ -1,3 +1,11 @@
+2021-10-12  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backported from master:
+       2021-10-12  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-omp.c (c_finish_omp_atomic): Use
+       clear_padding_type_may_have_padding_p.
+
 2021-10-06  Tobias Burnus  <tobias@codesourcery.com>
 
        Backported from master:
index 72552a6062d206f7d46c266b73462bac27000080..e77aa4620286b7f59346a0dc597e86f6872c8cdc 100644 (file)
@@ -382,7 +382,9 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
          bool clear_padding = false;
          HOST_WIDE_INT non_padding_start = 0;
          HOST_WIDE_INT non_padding_end = 0;
-         if (BITS_PER_UNIT == 8 && CHAR_BIT == 8)
+         if (BITS_PER_UNIT == 8
+             && CHAR_BIT == 8
+             && clear_padding_type_may_have_padding_p (cmptype))
            {
              HOST_WIDE_INT sz = int_size_in_bytes (cmptype), i;
              gcc_assert (sz > 0);
index 0581338ea5fc11845d9ea0ae143d47c599e1be88..999a3c961b75e78c4ea8c6c0ffc0fcc9ac5c79d7 100644 (file)
@@ -4429,7 +4429,7 @@ clear_padding_real_needs_padding_p (tree type)
 
 /* Return true if TYPE might contain any padding bits.  */
 
-static bool
+bool
 clear_padding_type_may_have_padding_p (tree type)
 {
   switch (TREE_CODE (type))
index f495dac9e7144ef1bf68f718e3bcb65e8bd9ffc7..33f4ab09f31a60420f04a5fb495a5c1caab12c09 100644 (file)
@@ -35,6 +35,7 @@ extern tree maybe_fold_and_comparisons (tree, enum tree_code, tree, tree,
                                        enum tree_code, tree, tree);
 extern tree maybe_fold_or_comparisons (tree, enum tree_code, tree, tree,
                                       enum tree_code, tree, tree);
+extern bool clear_padding_type_may_have_padding_p (tree);
 extern void clear_type_padding_in_mask (tree, unsigned char *);
 extern bool optimize_atomic_compare_exchange_p (gimple *);
 extern void fold_builtin_atomic_compare_exchange (gimple_stmt_iterator *);