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
gcc/ChangeLog:

2014-10-19  Martin Liska  <mli...@suse.cz>

        * ipa-icf-gimple.c (func_checker::compare_gimple_asm):
        Gimple tempate string is compared.

gcc/testsuite/ChangeLog:

2014-10-19  Martin Liska  <mli...@suse.cz>

        * gcc.dg/ipa/pr63595.c: New test.
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" } } */

Reply via email to