* GCC 11 backports @ 2021-08-16 11:13 Martin Liška 2021-08-23 8:54 ` Martin Liška 0 siblings, 1 reply; 6+ messages in thread From: Martin Liška @ 2021-08-16 11:13 UTC (permalink / raw) To: GCC Patches [-- Attachment #1: Type: text/plain, Size: 59 bytes --] I'm going to apply the following 3 tested patches. Martin [-- Attachment #2: 0001-ipa-make-target_clone-default-decl-local-PR101726.patch --] [-- Type: text/x-patch, Size: 1618 bytes --] From 85b78f6c38bb357abb749fed81a1e7a589050461 Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Thu, 12 Aug 2021 16:01:01 +0200 Subject: [PATCH 1/3] ipa: make target_clone default decl local [PR101726] PR ipa/101726 gcc/ChangeLog: * multiple_target.c (create_dispatcher_calls): Make default function local only if it is a definition. --- gcc/multiple_target.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/gcc/multiple_target.c b/gcc/multiple_target.c index e4192657cef..6c0565880c5 100644 --- a/gcc/multiple_target.c +++ b/gcc/multiple_target.c @@ -170,17 +170,20 @@ create_dispatcher_calls (struct cgraph_node *node) clone_function_name_numbered ( node->decl, "default")); - /* FIXME: copy of cgraph_node::make_local that should be cleaned up - in next stage1. */ - node->make_decl_local (); - node->set_section (NULL); - node->set_comdat_group (NULL); - node->externally_visible = false; - node->forced_by_abi = false; - node->set_section (NULL); - - DECL_ARTIFICIAL (node->decl) = 1; - node->force_output = true; + if (node->definition) + { + /* FIXME: copy of cgraph_node::make_local that should be cleaned up + in next stage1. */ + node->make_decl_local (); + node->set_section (NULL); + node->set_comdat_group (NULL); + node->externally_visible = false; + node->forced_by_abi = false; + node->set_section (NULL); + + DECL_ARTIFICIAL (node->decl) = 1; + node->force_output = true; + } } /* Return length of attribute names string, -- 2.32.0 [-- Attachment #3: 0002-ipa-do-not-make-localaliases-for-target_clones-PR101.patch --] [-- Type: text/x-patch, Size: 1697 bytes --] From fbe246620e2fa5b5968718837ae4c12fdb85ba39 Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Fri, 13 Aug 2021 11:10:56 +0200 Subject: [PATCH 2/3] ipa: do not make localaliases for target_clones [PR101261] PR ipa/101261 gcc/ChangeLog: * symtab.c (symtab_node::noninterposable_alias): Do not create local aliases for target_clone functions as the clonning pass rejects aliases. gcc/testsuite/ChangeLog: * gcc.target/i386/pr101261.c: New test. --- gcc/symtab.c | 2 ++ gcc/testsuite/gcc.target/i386/pr101261.c | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr101261.c diff --git a/gcc/symtab.c b/gcc/symtab.c index 2135b34ce27..5530a124a9d 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -1959,6 +1959,8 @@ symtab_node::noninterposable_alias (void) /* If aliases aren't supported by the assembler, fail. */ if (!TARGET_SUPPORTS_ALIASES) return NULL; + else if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (node->decl))) + return NULL; /* Otherwise create a new one. */ new_decl = copy_node (node->decl); diff --git a/gcc/testsuite/gcc.target/i386/pr101261.c b/gcc/testsuite/gcc.target/i386/pr101261.c new file mode 100644 index 00000000000..d25d1a202c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr101261.c @@ -0,0 +1,11 @@ +/* PR middle-end/101261 */ +/* { dg-do compile { target fpic } } */ +/* { dg-options "-fno-semantic-interposition -fPIC" } */ +/* { dg-require-ifunc "" } */ + +void +__attribute__((target_clones("default", "avx2"))) +dt_ioppr_transform_image_colorspace() +{ + dt_ioppr_transform_image_colorspace(); +} -- 2.32.0 [-- Attachment #4: 0003-ipa-ICF-should-check-SSA_NAME_IS_DEFAULT_DEF.patch --] [-- Type: text/x-patch, Size: 1760 bytes --] From 5b1bcb10b2cc6c93b06d22da0a044a6a6f362f0b Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Fri, 13 Aug 2021 12:35:47 +0200 Subject: [PATCH 3/3] ipa: ICF should check SSA_NAME_IS_DEFAULT_DEF PR ipa/100600 gcc/ChangeLog: * ipa-icf-gimple.c (func_checker::compare_ssa_name): Do not consider equal SSA_NAMEs when one is a param. gcc/testsuite/ChangeLog: * gcc.dg/ipa/pr100600.c: New test. --- gcc/ipa-icf-gimple.c | 3 +++ gcc/testsuite/gcc.dg/ipa/pr100600.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/ipa/pr100600.c diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c index edf5f025627..cf0262621be 100644 --- a/gcc/ipa-icf-gimple.c +++ b/gcc/ipa-icf-gimple.c @@ -96,6 +96,9 @@ func_checker::compare_ssa_name (const_tree t1, const_tree t2) unsigned i1 = SSA_NAME_VERSION (t1); unsigned i2 = SSA_NAME_VERSION (t2); + if (SSA_NAME_IS_DEFAULT_DEF (t1) != SSA_NAME_IS_DEFAULT_DEF (t2)) + return false; + if (m_source_ssa_names[i1] == -1) m_source_ssa_names[i1] = i2; else if (m_source_ssa_names[i1] != (int) i2) diff --git a/gcc/testsuite/gcc.dg/ipa/pr100600.c b/gcc/testsuite/gcc.dg/ipa/pr100600.c new file mode 100644 index 00000000000..8a3d0e16e7e --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr100600.c @@ -0,0 +1,22 @@ +/* PR ipa/100600 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int a, b, c; +long d(long x, long e, long f, long g) { + long h, i; + for (; h < e; h++) { + i = f; + for (; i < g; i++) + c = b + a; + } + return h + i; +} + +long j(long x, long e, long y, long g) { + long h, i; + for (; h < e; h++) + for (; i < g; i++) + c = b + a; + return h + i; +} -- 2.32.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: GCC 11 backports 2021-08-16 11:13 GCC 11 backports Martin Liška @ 2021-08-23 8:54 ` Martin Liška 2021-11-05 16:08 ` Martin Liška 0 siblings, 1 reply; 6+ messages in thread From: Martin Liška @ 2021-08-23 8:54 UTC (permalink / raw) To: GCC Patches [-- Attachment #1: Type: text/plain, Size: 145 bytes --] On 8/16/21 13:13, Martin Liška wrote: > I'm going to apply the following 3 tested patches. > > Martin One more patch I've just tested. Martin [-- Attachment #2: 0001-gcov-fix-output-location-for-JSON-mode.patch --] [-- Type: text/x-patch, Size: 8146 bytes --] From 9310e5f599b68d311e987b77cd0b7c8d3e46c5f8 Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Tue, 17 Aug 2021 16:24:26 +0200 Subject: [PATCH] gcov: fix output location for JSON mode. PR gcov-profile/89961 gcc/ChangeLog: * gcov.c (make_gcov_file_name): Rewrite using std::string. (mangle_name): Simplify, do not used the second argument. (strip_extention): New function. (get_md5sum): Likewise. (get_gcov_intermediate_filename): Handle properly -p and -x options. (output_gcov_file): Use string type. (generate_results): Likewise. (md5sum_to_hex): Remove. (cherry picked from commit b777f228b481ae881a7fbb09de367a053740932c) --- gcc/gcov.c | 158 ++++++++++++++++++++++++++--------------------------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/gcc/gcov.c b/gcc/gcov.c index 5c651a9bdce..cf0a49d8c30 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -662,8 +662,8 @@ static void accumulate_line_counts (source_info *); static void output_gcov_file (const char *, source_info *); static int output_branch_count (FILE *, int, const arc_info *); static void output_lines (FILE *, const source_info *); -static char *make_gcov_file_name (const char *, const char *); -static char *mangle_name (const char *, char *); +static string make_gcov_file_name (const char *, const char *); +static char *mangle_name (const char *); static void release_structures (void); extern int main (int, char **); @@ -1134,6 +1134,41 @@ output_intermediate_json_line (json::array *object, object->append (lineo); } +/* Strip filename extension in STR. */ + +static string +strip_extention (string str) +{ + string::size_type pos = str.rfind ('.'); + if (pos != string::npos) + str = str.substr (0, pos); + + return str; +} + +/* Calcualte md5sum for INPUT string and return it in hex string format. */ + +static string +get_md5sum (const char *input) +{ + md5_ctx ctx; + char md5sum[16]; + string str; + + md5_init_ctx (&ctx); + md5_process_bytes (input, strlen (input), &ctx); + md5_finish_ctx (&ctx, md5sum); + + for (unsigned i = 0; i < 16; i++) + { + char b[3]; + sprintf (b, "%02x", (unsigned char)md5sum[i]); + str += b; + } + + return str; +} + /* Get the name of the gcov file. The return value must be free'd. It appends the '.gcov' extension to the *basename* of the file. @@ -1143,20 +1178,26 @@ output_intermediate_json_line (json::array *object, input: foo.da, output: foo.da.gcov input: a/b/foo.cc, output: foo.cc.gcov */ -static char * -get_gcov_intermediate_filename (const char *file_name) +static string +get_gcov_intermediate_filename (const char *input_file_name) { - const char *gcov = ".gcov.json.gz"; - char *result; - const char *cptr; + string base = basename (input_file_name); + string str = strip_extention (base); - /* Find the 'basename'. */ - cptr = lbasename (file_name); - - result = XNEWVEC (char, strlen (cptr) + strlen (gcov) + 1); - sprintf (result, "%s%s", cptr, gcov); + if (flag_hash_filenames) + { + str += "##"; + str += get_md5sum (input_file_name); + } + else if (flag_preserve_paths && base != input_file_name) + { + str += "##"; + str += mangle_path (input_file_name); + str = strip_extention (str); + } - return result; + str += ".gcov.json.gz"; + return str.c_str (); } /* Output the result in JSON intermediate format. @@ -1416,7 +1457,9 @@ process_all_functions (void) static void output_gcov_file (const char *file_name, source_info *src) { - char *gcov_file_name = make_gcov_file_name (file_name, src->coverage.name); + string gcov_file_name_str + = make_gcov_file_name (file_name, src->coverage.name); + const char *gcov_file_name = gcov_file_name_str.c_str (); if (src->coverage.lines) { @@ -1438,13 +1481,12 @@ output_gcov_file (const char *file_name, source_info *src) unlink (gcov_file_name); fnotice (stdout, "Removing '%s'\n", gcov_file_name); } - free (gcov_file_name); } static void generate_results (const char *file_name) { - char *gcov_intermediate_filename; + string gcov_intermediate_filename; for (vector<function_info *>::iterator it = functions.begin (); it != functions.end (); it++) @@ -1547,11 +1589,13 @@ generate_results (const char *file_name) root->print (&pp); pp_formatted_text (&pp); - gzFile output = gzopen (gcov_intermediate_filename, "w"); + fnotice (stdout, "Creating '%s'\n", + gcov_intermediate_filename.c_str ()); + gzFile output = gzopen (gcov_intermediate_filename.c_str (), "w"); if (output == NULL) { fnotice (stderr, "Cannot open JSON output file %s\n", - gcov_intermediate_filename); + gcov_intermediate_filename.c_str ()); return; } @@ -1559,7 +1603,7 @@ generate_results (const char *file_name) || gzclose (output)) { fnotice (stderr, "Error writing JSON output file %s\n", - gcov_intermediate_filename); + gcov_intermediate_filename.c_str ()); return; } } @@ -2546,15 +2590,6 @@ canonicalize_name (const char *name) return result; } -/* Print hex representation of 16 bytes from SUM and write it to BUFFER. */ - -static void -md5sum_to_hex (const char *sum, char *buffer) -{ - for (unsigned i = 0; i < 16; i++) - sprintf (buffer + (2 * i), "%02x", (unsigned char)sum[i]); -} - /* Generate an output file name. INPUT_NAME is the canonicalized main input file and SRC_NAME is the canonicalized file name. LONG_OUTPUT_NAMES and PRESERVE_PATHS affect name generation. With @@ -2567,77 +2602,42 @@ md5sum_to_hex (const char *sum, char *buffer) component. (Remember, the canonicalized name will already have elided '.' components and converted \\ separators.) */ -static char * +static string make_gcov_file_name (const char *input_name, const char *src_name) { - char *ptr; - char *result; - - if (flag_long_names && input_name && strcmp (src_name, input_name)) - { - /* Generate the input filename part. */ - result = XNEWVEC (char, strlen (input_name) + strlen (src_name) + 10); - - ptr = result; - ptr = mangle_name (input_name, ptr); - ptr[0] = ptr[1] = '#'; - ptr += 2; - } - else - { - result = XNEWVEC (char, strlen (src_name) + 10); - ptr = result; - } - - ptr = mangle_name (src_name, ptr); - strcpy (ptr, ".gcov"); + string str; /* When hashing filenames, we shorten them by only using the filename component and appending a hash of the full (mangled) pathname. */ if (flag_hash_filenames) + str = (string (mangle_name (src_name)) + "##" + + get_md5sum (src_name) + ".gcov"); + else { - md5_ctx ctx; - char md5sum[16]; - char md5sum_hex[33]; - - md5_init_ctx (&ctx); - md5_process_bytes (src_name, strlen (src_name), &ctx); - md5_finish_ctx (&ctx, md5sum); - md5sum_to_hex (md5sum, md5sum_hex); - free (result); + if (flag_long_names && input_name && strcmp (src_name, input_name) != 0) + { + str += mangle_name (input_name); + str += "##"; + } - result = XNEWVEC (char, strlen (src_name) + 50); - ptr = result; - ptr = mangle_name (src_name, ptr); - ptr[0] = ptr[1] = '#'; - ptr += 2; - memcpy (ptr, md5sum_hex, 32); - ptr += 32; - strcpy (ptr, ".gcov"); + str += mangle_name (src_name); + str += ".gcov"; } - return result; + return str; } /* Mangle BASE name, copy it at the beginning of PTR buffer and return address of the \0 character of the buffer. */ static char * -mangle_name (char const *base, char *ptr) +mangle_name (char const *base) { - size_t len; - /* Generate the source filename part. */ if (!flag_preserve_paths) - base = lbasename (base); + return xstrdup (lbasename (base)); else - base = mangle_path (base); - - len = strlen (base); - memcpy (ptr, base, len); - ptr += len; - - return ptr; + return mangle_path (base); } /* Scan through the bb_data for each line in the block, increment -- 2.32.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: GCC 11 backports 2021-08-23 8:54 ` Martin Liška @ 2021-11-05 16:08 ` Martin Liška 2021-11-08 12:26 ` Martin Liška 0 siblings, 1 reply; 6+ messages in thread From: Martin Liška @ 2021-11-05 16:08 UTC (permalink / raw) To: GCC Patches [-- Attachment #1: Type: text/plain, Size: 228 bytes --] On 8/23/21 10:54, Martin Liška wrote: > On 8/16/21 13:13, Martin Liška wrote: >> I'm going to apply the following 3 tested patches. >> >> Martin > > One more patch I've just tested. > > Martin And one more backport. Martin [-- Attachment #2: 0001-Speed-up-jump-table-switch-detection.patch --] [-- Type: text/x-patch, Size: 5668 bytes --] From 64fbc25cb6983725fefe313bfedd3657df795d54 Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Fri, 13 Aug 2021 17:22:35 +0200 Subject: [PATCH] Speed up jump table switch detection. PR tree-optimization/100393 gcc/ChangeLog: * tree-switch-conversion.c (group_cluster::dump): Use get_comparison_count. (jump_table_cluster::find_jump_tables): Pre-compute number of comparisons and then decrement it. Cache also max_ratio. (jump_table_cluster::can_be_handled): Change signature. * tree-switch-conversion.h (get_comparison_count): New. (cherry picked from commit c517cf2e685e2903b591d63c1034ff9726cb3822) --- gcc/tree-switch-conversion.c | 42 ++++++++++++++++++++---------------- gcc/tree-switch-conversion.h | 14 ++++++++++-- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c index 7f65c4ce839..8fc5eaa3033 100644 --- a/gcc/tree-switch-conversion.c +++ b/gcc/tree-switch-conversion.c @@ -1090,7 +1090,7 @@ group_cluster::dump (FILE *f, bool details) for (unsigned i = 0; i < m_cases.length (); i++) { simple_cluster *sc = static_cast<simple_cluster *> (m_cases[i]); - comparison_count += sc->m_range_p ? 2 : 1; + comparison_count += sc->get_comparison_count (); } unsigned HOST_WIDE_INT range = get_range (get_low (), get_high ()); @@ -1185,11 +1185,24 @@ jump_table_cluster::find_jump_tables (vec<cluster *> &clusters) min.quick_push (min_cluster_item (0, 0, 0)); + unsigned HOST_WIDE_INT max_ratio + = (optimize_insn_for_size_p () + ? param_jump_table_max_growth_ratio_for_size + : param_jump_table_max_growth_ratio_for_speed); + for (unsigned i = 1; i <= l; i++) { /* Set minimal # of clusters with i-th item to infinite. */ min.quick_push (min_cluster_item (INT_MAX, INT_MAX, INT_MAX)); + /* Pre-calculate number of comparisons for the clusters. */ + HOST_WIDE_INT comparison_count = 0; + for (unsigned k = 0; k <= i - 1; k++) + { + simple_cluster *sc = static_cast<simple_cluster *> (clusters[k]); + comparison_count += sc->get_comparison_count (); + } + for (unsigned j = 0; j < i; j++) { unsigned HOST_WIDE_INT s = min[j].m_non_jt_cases; @@ -1200,10 +1213,15 @@ jump_table_cluster::find_jump_tables (vec<cluster *> &clusters) if ((min[j].m_count + 1 < min[i].m_count || (min[j].m_count + 1 == min[i].m_count && s < min[i].m_non_jt_cases)) - && can_be_handled (clusters, j, i - 1)) + && can_be_handled (clusters, j, i - 1, max_ratio, + comparison_count)) min[i] = min_cluster_item (min[j].m_count + 1, j, s); + + simple_cluster *sc = static_cast<simple_cluster *> (clusters[j]); + comparison_count -= sc->get_comparison_count (); } + gcc_checking_assert (comparison_count == 0); gcc_checking_assert (min[i].m_count != INT_MAX); } @@ -1241,7 +1259,9 @@ jump_table_cluster::find_jump_tables (vec<cluster *> &clusters) bool jump_table_cluster::can_be_handled (const vec<cluster *> &clusters, - unsigned start, unsigned end) + unsigned start, unsigned end, + unsigned HOST_WIDE_INT max_ratio, + unsigned HOST_WIDE_INT comparison_count) { /* If the switch is relatively small such that the cost of one indirect jump on the target are higher than the cost of a @@ -1260,10 +1280,6 @@ jump_table_cluster::can_be_handled (const vec<cluster *> &clusters, if (start == end) return true; - unsigned HOST_WIDE_INT max_ratio - = (optimize_insn_for_size_p () - ? param_jump_table_max_growth_ratio_for_size - : param_jump_table_max_growth_ratio_for_speed); unsigned HOST_WIDE_INT range = get_range (clusters[start]->get_low (), clusters[end]->get_high ()); /* Check overflow. */ @@ -1277,18 +1293,6 @@ jump_table_cluster::can_be_handled (const vec<cluster *> &clusters, if (lhs < range) return false; - /* First make quick guess as each cluster - can add at maximum 2 to the comparison_count. */ - if (lhs > 2 * max_ratio * (end - start + 1)) - return false; - - unsigned HOST_WIDE_INT comparison_count = 0; - for (unsigned i = start; i <= end; i++) - { - simple_cluster *sc = static_cast<simple_cluster *> (clusters[i]); - comparison_count += sc->m_range_p ? 2 : 1; - } - return lhs <= max_ratio * comparison_count; } diff --git a/gcc/tree-switch-conversion.h b/gcc/tree-switch-conversion.h index d76f19b57f6..a375e52636e 100644 --- a/gcc/tree-switch-conversion.h +++ b/gcc/tree-switch-conversion.h @@ -180,6 +180,13 @@ public: return tree_int_cst_equal (get_low (), get_high ()); } + /* Return number of comparisons needed for the case. */ + unsigned + get_comparison_count () + { + return m_range_p ? 2 : 1; + } + /* Low value of the case. */ tree m_low; @@ -267,9 +274,12 @@ public: static vec<cluster *> find_jump_tables (vec<cluster *> &clusters); /* Return true when cluster starting at START and ending at END (inclusive) - can build a jump-table. */ + can build a jump-table. COMPARISON_COUNT is number of comparison + operations needed if the clusters are expanded as decision tree. + MAX_RATIO tells about the maximum code growth (in percent). */ static bool can_be_handled (const vec<cluster *> &clusters, unsigned start, - unsigned end); + unsigned end, unsigned HOST_WIDE_INT max_ratio, + unsigned HOST_WIDE_INT comparison_count); /* Return true if cluster starting at START and ending at END (inclusive) is profitable transformation. */ -- 2.33.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: GCC 11 backports 2021-11-05 16:08 ` Martin Liška @ 2021-11-08 12:26 ` Martin Liška 2021-12-16 11:46 ` Martin Liška 0 siblings, 1 reply; 6+ messages in thread From: Martin Liška @ 2021-11-08 12:26 UTC (permalink / raw) To: GCC Patches On 11/5/21 17:08, Martin Liška wrote: > On 8/23/21 10:54, Martin Liška wrote: >> On 8/16/21 13:13, Martin Liška wrote: >>> I'm going to apply the following 3 tested patches. >>> >>> Martin >> >> One more patch I've just tested. >> >> Martin > > And one more backport. > > Martin One more tested patch. Martin ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: GCC 11 backports 2021-11-08 12:26 ` Martin Liška @ 2021-12-16 11:46 ` Martin Liška 2022-01-18 13:26 ` Martin Liška 0 siblings, 1 reply; 6+ messages in thread From: Martin Liška @ 2021-12-16 11:46 UTC (permalink / raw) To: GCC Patches [-- Attachment #1: Type: text/plain, Size: 411 bytes --] On 11/8/21 13:26, Martin Liška wrote: > On 11/5/21 17:08, Martin Liška wrote: >> On 8/23/21 10:54, Martin Liška wrote: >>> On 8/16/21 13:13, Martin Liška wrote: >>>> I'm going to apply the following 3 tested patches. >>>> >>>> Martin >>> >>> One more patch I've just tested. >>> >>> Martin >> >> And one more backport. >> >> Martin > > One more tested patch. > > Martin And one more tested patch. Martin [-- Attachment #2: 0001-i386-Fix-emissing-of-__builtin_cpu_supports.patch --] [-- Type: text/x-patch, Size: 1429 bytes --] From d4e305e4498039b921070418069a68648188b196 Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Mon, 13 Dec 2021 15:34:30 +0100 Subject: [PATCH] i386: Fix emissing of __builtin_cpu_supports. PR target/103661 gcc/ChangeLog: * config/i386/i386-builtins.c (fold_builtin_cpu): Compare to 0 as API expects that non-zero values are returned (do that it mask == 31). For "avx512vbmi2" argument, we return now 1 << 31, which is a negative integer value. (cherry picked from commit 127c7178d5ec502d95862fd823537cbca1a0cb99) --- gcc/config/i386/i386-builtins.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c index 128bd39816c..59575aea795 100644 --- a/gcc/config/i386/i386-builtins.c +++ b/gcc/config/i386/i386-builtins.c @@ -2236,7 +2236,11 @@ fold_builtin_cpu (tree fndecl, tree *args) /* Return __cpu_model.__cpu_features[0] & field_val */ final = build2 (BIT_AND_EXPR, unsigned_type_node, array_elt, build_int_cstu (unsigned_type_node, field_val)); - return build1 (CONVERT_EXPR, integer_type_node, final); + if (isa_names_table[i].feature == (INT_TYPE_SIZE - 1)) + return build2 (NE_EXPR, integer_type_node, final, + build_int_cst (unsigned_type_node, 0)); + else + return build1 (CONVERT_EXPR, integer_type_node, final); } gcc_unreachable (); } -- 2.34.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: GCC 11 backports 2021-12-16 11:46 ` Martin Liška @ 2022-01-18 13:26 ` Martin Liška 0 siblings, 0 replies; 6+ messages in thread From: Martin Liška @ 2022-01-18 13:26 UTC (permalink / raw) To: GCC Patches [-- Attachment #1: Type: text/plain, Size: 502 bytes --] On 12/16/21 12:46, Martin Liška wrote: > On 11/8/21 13:26, Martin Liška wrote: >> On 11/5/21 17:08, Martin Liška wrote: >>> On 8/23/21 10:54, Martin Liška wrote: >>>> On 8/16/21 13:13, Martin Liška wrote: >>>>> I'm going to apply the following 3 tested patches. >>>>> >>>>> Martin >>>> >>>> One more patch I've just tested. >>>> >>>> Martin >>> >>> And one more backport. >>> >>> Martin >> >> One more tested patch. >> >> Martin > > And one more tested patch. > > Martin One more patch. Martin [-- Attachment #2: 0001-ipa-naked-attribute-implies-noipa-attribute.patch --] [-- Type: text/x-patch, Size: 1466 bytes --] From b76e938a192da0da198d2f414070182f2506508d Mon Sep 17 00:00:00 2001 From: Martin Liska <mliska@suse.cz> Date: Thu, 12 Aug 2021 17:26:51 +0200 Subject: [PATCH] ipa: "naked" attribute implies "noipa" attribute PR ipa/101354 gcc/ChangeLog: * attribs.c (decl_attributes): Make naked functions "noipa" functions. (cherry picked from commit 4998404915bba9cb04c438a926cdf7126782a767) --- gcc/attribs.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/gcc/attribs.c b/gcc/attribs.c index ebc0783c439..47969bd7742 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -520,14 +520,9 @@ decl_attributes (tree *node, tree attributes, int flags, if (TREE_CODE (*node) == FUNCTION_DECL && attributes && lookup_attribute ("naked", attributes) != NULL - && lookup_attribute_spec (get_identifier ("naked"))) - { - if (lookup_attribute ("noinline", attributes) == NULL) - attributes = tree_cons (get_identifier ("noinline"), NULL, attributes); - - if (lookup_attribute ("noclone", attributes) == NULL) - attributes = tree_cons (get_identifier ("noclone"), NULL, attributes); - } + && lookup_attribute_spec (get_identifier ("naked")) + && lookup_attribute ("noipa", attributes) == NULL) + attributes = tree_cons (get_identifier ("noipa"), NULL, attributes); /* A "noipa" function attribute implies "noinline", "noclone" and "no_icf" for those targets that support it. */ -- 2.34.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-01-18 13:26 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-16 11:13 GCC 11 backports Martin Liška 2021-08-23 8:54 ` Martin Liška 2021-11-05 16:08 ` Martin Liška 2021-11-08 12:26 ` Martin Liška 2021-12-16 11:46 ` Martin Liška 2022-01-18 13:26 ` Martin Liška
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).