Bits propagation only for int and ptr types
authorMartin Liska <mliska@suse.cz>
Tue, 3 Apr 2018 13:27:26 +0000 (15:27 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Tue, 3 Apr 2018 13:27:26 +0000 (15:27 +0200)
2018-03-29  Martin Liska  <mliska@suse.cz>
    Martin Jambor  <mjambor@suse.cz>

PR ipa/84947
* ipa-cp.c (propagate_bits_across_jump_function): Bail out if
param_type is not an integral or pointer type.

Co-Authored-By: Martin Jambor <mjambor@suse.cz>
From-SVN: r259029

gcc/ChangeLog
gcc/ipa-cp.c

index ebd57de719f10bd1d63c8505f4420fd04c5d7b1e..2a43c39a290c8770585750064c2215934d9884b2 100644 (file)
@@ -1,3 +1,10 @@
+2018-03-29  Martin Liska  <mliska@suse.cz>
+           Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/84947
+       * ipa-cp.c (propagate_bits_across_jump_function): Bail out if
+       param_type is not an integral or pointer type.
+
 2018-04-03  Richard Biener  <rguenther@suse.de>
 
        * sese.h (recompute_all_dominators): Remove.
index ee41a8d55b79ad8094bc64627d97af8096c5a535..ec216010f2f532cb2bf1b308b5e5eac2cf891400 100644 (file)
@@ -1811,14 +1811,16 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx,
   struct ipa_node_params *callee_info = IPA_NODE_REF (callee);
   tree parm_type = ipa_get_type (callee_info, idx);
 
-  /* For K&R C programs, ipa_get_type() could return NULL_TREE.
-     Avoid the transform for these cases.  */
-  if (!parm_type)
+  /* For K&R C programs, ipa_get_type() could return NULL_TREE.  Avoid the
+     transform for these cases.  Similarly, we can have bad type mismatches
+     with LTO, avoid doing anything with those too.  */
+  if (!parm_type
+      || (!INTEGRAL_TYPE_P (parm_type) && !POINTER_TYPE_P (parm_type)))
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
-       fprintf (dump_file, "Setting dest_lattice to bottom, because"
-                           " param %i type is NULL for %s\n", idx,
-                           cs->callee->name ());
+       fprintf (dump_file, "Setting dest_lattice to bottom, because type of "
+                "param %i of %s is NULL or unsuitable for bits propagation\n",
+                idx, cs->callee->name ());
 
       return dest_lattice->set_to_bottom ();
     }