From dedbabed297d6c854db74162cd43f996a9739aa6 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 27 Feb 2004 22:33:02 +0000 Subject: [PATCH] c-typeck.c (tagged_types_tu_compatible_p): Speedup common case of the type values being in the same order. * c-typeck.c (tagged_types_tu_compatible_p) : Speedup common case of the type values being in the same order. From-SVN: r78585 --- gcc/ChangeLog | 5 +++++ gcc/c-typeck.c | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f88a8bd9f4e..e6a72d0a1217 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-02-27 Andrew Pinski + + * c-typeck.c (tagged_types_tu_compatible_p) : + Speedup common case of the type values being in the same order. + 2004-02-27 Steve Ellcey * config/ia64/ia64.h (no-inline-float-divide): New option. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index c10d3e07e7f4..e44453af8329 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -701,6 +701,27 @@ tagged_types_tu_compatible_p (tree t1, tree t2, int flags) { case ENUMERAL_TYPE: { + + /* Speed up the case where the type values are in the same order. */ + tree tv1 = TYPE_VALUES (t1); + tree tv2 = TYPE_VALUES (t2); + + if (tv1 == tv2) + return 1; + + for (;tv1 && tv2; tv1 = TREE_CHAIN (tv2), tv2 = TREE_CHAIN (tv2)) + { + if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv1)) + break; + if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1) + return 0; + } + + if (tv1 == NULL_TREE && tv2 == NULL_TREE) + return 1; + if (tv1 == NULL_TREE || tv2 == NULL_TREE) + return 0; + if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2))) return 0; -- 2.47.2