From: marxin Date: Thu, 30 Oct 2014 10:10:58 +0000 (+0000) Subject: PR ipa/63574 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b2e8d25e68b4b644935c8f716748ae1049e3c26f;p=thirdparty%2Fgcc.git PR ipa/63574 PR ipa/63664 * g++.dg/ipa/pr63574.C: New test. * ipa-icf-gimple.c (func_checker::parse_labels): Missing comment added. (func_checker::compare_gimple_label): Simlified comparison introduced. * ipa-icf-gimple.h: Missing comment added. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216913 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 373b44209bcc..d587890fa739 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2014-10-30 Martin Liska + + PR ipa/63574 + PR ipa/63664 + * ipa-icf-gimple.c (func_checker::parse_labels): Missing comment added. + (func_checker::compare_gimple_label): Simlified comparison introduced. + * ipa-icf-gimple.h: Missing comment added. + 2014-10-30 Jeff Law * config/pa/pa-protos.h (pa_output_arg_descriptor): Strengthen diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c index d3f379557f16..ecb96671fb76 100644 --- a/gcc/ipa-icf-gimple.c +++ b/gcc/ipa-icf-gimple.c @@ -527,6 +527,10 @@ func_checker::compare_variable_decl (tree t1, tree t2) return return_with_debug (ret); } + +/* Function visits all gimple labels and creates corresponding + mapping between basic blocks and labels. */ + void func_checker::parse_labels (sem_bb *bb) { @@ -765,7 +769,8 @@ func_checker::compare_gimple_label (gimple g1, gimple g2) if (FORCED_LABEL (t1) || FORCED_LABEL (t2)) return return_false_with_msg ("FORCED_LABEL"); - return compare_tree_ssa_label (t1, t2); + /* As the pass build BB to label mapping, no further check is needed. */ + return true; } /* Verifies for given GIMPLEs S1 and S2 that diff --git a/gcc/ipa-icf-gimple.h b/gcc/ipa-icf-gimple.h index 8487a2ad745e..5811bd132f0b 100644 --- a/gcc/ipa-icf-gimple.h +++ b/gcc/ipa-icf-gimple.h @@ -145,6 +145,8 @@ public: /* Memory release routine. */ ~func_checker(); + /* Function visits all gimple labels and creates corresponding + mapping between basic blocks and labels. */ void parse_labels (sem_bb *bb); /* Basic block equivalence comparison function that returns true if diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a362f1357826..2c290daa8e53 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-10-30 Martin Liska + + PR ipa/63574 + PR ipa/63664 + * g++.dg/ipa/pr63574.C: New test. + 2014-10-29 Kyrylo Tkachov * gcc.target/aarch64/madd_after_asm_1.c: New test. diff --git a/gcc/testsuite/g++.dg/ipa/pr63574.C b/gcc/testsuite/g++.dg/ipa/pr63574.C new file mode 100644 index 000000000000..59b82d53ba8b --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr63574.C @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +class test +{ +public: + test (int val, int *p) + { + int_val = *p; + bool_val = (val != int_val); + } + + ~test () + { + if (!bool_val) + return; + } + + int get_int_val () const + { + return int_val; + } + +private: + bool bool_val; + int int_val; +}; + +static int __attribute__ ((noinline)) +f1 (int i, int *p) +{ + test obj (i, p); + return obj.get_int_val (); +} + +static int __attribute__ ((noinline)) +f2 (int i, int *p) +{ + test obj (i, p); + return obj.get_int_val (); +} + +int +f (int i, int *p) +{ + return f1 (i, p) + f2 (i, p); +}