This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: Resolving an issue of bootstrap failure from vectorization.

Repost to

---------- Forwarded message ----------
From: Cong Hou <>
Date: Tue, Jul 9, 2013 at 1:10 PM
Subject: Resolving an issue of bootstrap failure from vectorization.
Cc: David Li <>


My name is Cong Hou, and I am a Noogler working in the compiler
optimization team at Google.

When we were trying moving the vectorization from O3 to O2 in GCC 4.9,
we met a bootstrap failure from comparison between stage 2&3. This
failure is caused by a potential bug in GCC as stated below.

In the file tree-vect-data-refs.c, there is a qsort() function call
which sorts a group of data references using a comparison function
called "dr_group_sort_cmp()". In this function, the iterative hash
values of tree nodes are used for comparisons. For a declaration tree
node, its UID participates in the calculation of the hash value.
However, a specific declaration may have different UIDs whether the
debug information is switched on/off. In consequence, the results of
comparisons may vary in stage 2&3 during bootstrapping.

As a solution, I think we need a function to compare two tree nodes
that does not rely on UIDs. An apparent idea is comparing the tree
code first, and if they have the same tree code, then compare their
subnodes recursively. To resolve the issue we have now, I just
composed a very basic comparison function which only compares tree
codes, and this patch can make the bootstrap get passed. I have
attached the patch here.

I am wondering if this is a valid solution and appreciate if someone
could give me any feedback.

Thank you!


Attachment: patch.diff
Description: Binary data

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]