From 400bc5261ebde7046e2afd1c064109109ba2c0c1 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Fri, 28 Sep 2018 23:13:10 +0000 Subject: [PATCH] match.pd (simple_comparison): Don't optimize if either operand is a function pointer when... * match.pd (simple_comparison): Don't optimize if either operand is a function pointer when target needs function pointer canonicalization. From-SVN: r264705 --- gcc/ChangeLog | 5 +++++ gcc/match.pd | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0f703f5c0fb..7be6ceb3d62 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-09-28 John David Anglin + + * match.pd (simple_comparison): Don't optimize if either operand is + a function pointer when target needs function pointer canonicalization. + 2018-09-28 Segher Boessenkool * config/rs6000/driver-rs6000.c (asm_names): Adjust the entries for diff --git a/gcc/match.pd b/gcc/match.pd index 74244f348a0..ae26ec226ac 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3558,8 +3558,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* Disable this optimization if we're casting a function pointer type on targets that require function pointer canonicalization. */ && !(targetm.have_canonicalize_funcptr_for_compare () - && POINTER_TYPE_P (TREE_TYPE (@00)) - && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (@00)))) + && ((POINTER_TYPE_P (TREE_TYPE (@00)) + && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (@00)))) + || (POINTER_TYPE_P (TREE_TYPE (@10)) + && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (@10)))))) && single_use (@0)) (if (TYPE_PRECISION (TREE_TYPE (@00)) == TYPE_PRECISION (TREE_TYPE (@0)) && (TREE_CODE (@10) == INTEGER_CST -- 2.30.2