This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Speed up qsort in IPA ICF
On 9/19/19 3:18 PM, Richard Biener wrote:
> On Thu, Sep 19, 2019 at 3:15 PM Alexander Monakov <amonakov@ispras.ru> wrote:
>>
>> On Thu, 19 Sep 2019, Richard Biener wrote:
>>
>>>> Good point, there's a tested patch.
>>>
>>> OK.
>>
>> Hold on, is the new comparator really correct?
>>
>>
>> @@ -3384,20 +3372,11 @@ sort_congruence_classes_by_decl_uid (const void *a, const void *b)
>> static int
>> sort_congruence_class_groups_by_decl_uid (const void *a, const void *b)
>> {
>> - const congruence_class_group *g1
>> - = *(const congruence_class_group * const *)a;
>> - const congruence_class_group *g2
>> - = *(const congruence_class_group * const *)b;
>> -
>> - int uid1 = DECL_UID (g1->classes[0]->members[0]->decl);
>> - int uid2 = DECL_UID (g2->classes[0]->members[0]->decl);
>> -
>> - if (uid1 < uid2)
>> - return -1;
>> - else if (uid1 > uid2)
>> - return 1;
>> - else
>> - return 0;
>> + const std::pair<congruence_class_group *, int> *g1
>> + = *(const std::pair<congruence_class_group *, int> *const *) a;
>> + const std::pair<congruence_class_group *, int> *g2
>> + = *(const std::pair<congruence_class_group *, int> *const *) b;
>> + return g1->second - g2->second;
>> }
>>
>>
>> AFAICT the vec holds pairs, not pointers to pairs, so why does the comparator
>> cast to a pointer-to-pointer-to-pair? Shouldn't it read
>>
>> const std::pair<congruence_class_group *, int> *g1
>> = (const std::pair<congruence_class_group *, int> *) a;
>
> Indeed. We need static type correctness for the comparator :/
Ooops, sorry for the mistake. I'm testing the following patch.
I checked in debugger that uids are valid for a simple test-case.
Martin
>
> Richard.
>
>> Thanks.
>> Alexander
>From 5f94530ee52b254a1e3cdfc0f4db4222a6b77a14 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Thu, 19 Sep 2019 15:27:20 +0200
Subject: [PATCH] Fix cast in sort_congruence_class_groups_by_decl_uid.
gcc/ChangeLog:
2019-09-19 Martin Liska <mliska@suse.cz>
* ipa-icf.c (sort_congruence_class_groups_by_decl_uid):
Use proper casting.
---
gcc/ipa-icf.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 59b7f8b1b9d..009aeb487dd 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -3373,9 +3373,9 @@ static int
sort_congruence_class_groups_by_decl_uid (const void *a, const void *b)
{
const std::pair<congruence_class_group *, int> *g1
- = *(const std::pair<congruence_class_group *, int> *const *) a;
+ = (const std::pair<congruence_class_group *, int> *) a;
const std::pair<congruence_class_group *, int> *g2
- = *(const std::pair<congruence_class_group *, int> *const *) b;
+ = (const std::pair<congruence_class_group *, int> *) b;
return g1->second - g2->second;
}
--
2.23.0