This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix for PR63583


Hello.

I added missing gimple_asm_string comparison for a function with an asm statement.
Bootstrap and regression tests still running, ready for trunk after it finishes?

Thank you,
Martin

Attachment: ipa-icf-gimple-asm-string.changelog
Description: Text document

diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c
index 792a3e4..1369b74 100644
--- a/gcc/ipa-icf-gimple.c
+++ b/gcc/ipa-icf-gimple.c
@@ -863,6 +863,9 @@ func_checker::compare_gimple_asm (gimple g1, gimple g2)
   if (gimple_asm_nclobbers (g1) != gimple_asm_nclobbers (g2))
     return false;
 
+  if (strcmp (gimple_asm_string (g1), gimple_asm_string (g2)) != 0)
+    return return_false_with_msg ("ASM strings are different");
+
   for (unsigned i = 0; i < gimple_asm_ninputs (g1); i++)
     {
       tree input1 = gimple_asm_input_op (g1, i);
diff --git a/gcc/testsuite/gcc.dg/ipa/pr63595.c b/gcc/testsuite/gcc.dg/ipa/pr63595.c
new file mode 100644
index 0000000..9c9f3bf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr63595.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-icf-details"  } */
+
+static int f(int t) __attribute__((noinline));
+
+static int g(int t) __attribute__((noinline));
+static int g(int t)
+{
+    asm("addl %0, 1": "+r"(t));  
+      return t;
+}
+static int f(int t)
+{
+    asm("addq %0, -1": "+r"(t));
+      return t;
+}
+
+
+int h(int t)
+{
+    return f(t) + g(t);
+}
+
+/* { dg-final { scan-ipa-dump "ASM strings are different" "icf"  } } */
+/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf"  } } */
+/* { dg-final { cleanup-ipa-dump "icf" } } */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]