match.pd ((intptr_t) x eq/ne CST to x eq/ne (typeof x) cst): Disable transform if...
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
Sat, 6 Aug 2016 05:04:07 +0000 (05:04 +0000)
committerPrathamesh Kulkarni <prathamesh3492@gcc.gnu.org>
Sat, 6 Aug 2016 05:04:07 +0000 (05:04 +0000)
2016-08-06  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

* match.pd ((intptr_t) x eq/ne CST to x eq/ne (typeof x) cst): Disable
transform if operand's type is pointer to function or method.

From-SVN: r239190

gcc/ChangeLog
gcc/match.pd

index f6a62d1ffc12c8522a8c896f7ba74268c668a891..c72eb5ff5ec4bfff2171e48f043037249a6c6661 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-06  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+
+       * match.pd ((intptr_t) x eq/ne CST to x eq/ne (typeof x) cst): Disable
+       transform if operand's type is pointer to function or method.
+
 2016-08-05  Patrick Palka  <ppalka@gcc.gnu.org>
 
        PR tree-optimization/18046
index 2380d90d5db2affef4688525215955c58e1cbc17..ac7cfff0ae25106819e330f0a16d6bac71e72952 100644 (file)
@@ -2528,12 +2528,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
    { neeq == EQ_EXPR ? boolean_false_node : boolean_true_node; })))
 
 /* PR70920: Transform (intptr_t)x eq/ne CST to x eq/ne (typeof x) CST.
-   and (typeof ptr_cst) x eq/ne ptr_cst to x eq/ne (typeof x) CST */
+   and (typeof ptr_cst) x eq/ne ptr_cst to x eq/ne (typeof x) CST.
+   Disable the transform if either operand is pointer to function.
+   This broke pr22051-2.c for arm where function pointer
+   canonicalizaion is not wanted.  */
 (for cmp (ne eq)
  (simplify
   (cmp (convert @0) INTEGER_CST@1)
-  (if ((POINTER_TYPE_P (TREE_TYPE (@0)) && INTEGRAL_TYPE_P (TREE_TYPE (@1)))
-        || (INTEGRAL_TYPE_P (TREE_TYPE (@0)) && POINTER_TYPE_P (TREE_TYPE (@1))))
+  (if ((POINTER_TYPE_P (TREE_TYPE (@0)) && !FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (@0)))
+       && INTEGRAL_TYPE_P (TREE_TYPE (@1)))
+      || (INTEGRAL_TYPE_P (TREE_TYPE (@0)) && POINTER_TYPE_P (TREE_TYPE (@1))
+         && !FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (@1)))))
    (cmp @0 (convert @1)))))
 
 /* Non-equality compare simplifications from fold_binary  */