On 09/24/14 14:38, Ilya Enkovich wrote:
2014-09-24 23:03 GMT+04:00 Jeff Law <l...@redhat.com>:
On 09/24/14 04:35, Steven Bosscher wrote:
According to description you quoted label marked by LABEL_PRESERVE_P
is used by some code or data. Let this use be not visible to the RTL
of a given function. It is still used, right? How can you remove it?
The code_label rtx is removed, but the label itself is still output to
the object file. The label number is retained in the CODE_LABEL_NUMBER
of the NOTE_INSN_DELETED_LABEL. Look for how NOTE_INSN_DELETED_LABEL
is handled in final.c. It's a hack IMHO, but that's how it has been
since day 0 (see https://gcc.gnu.org/r104).
Right. We transform it into a NOTE_INSN_DELETED_LABEL, but still output it
into the assembly code. There's one other intereseting aspect here -- IIRC,
we allow NOTE_INSN_DELETED_LABELs to move around the insn stream. My
recollection was we may move them from between two blocks to the start of a
block to facilitate block merging.
Basically the LABEL_PRESERVE_P ensures the label gets output in the assembly
code. THe docs could possibly use some clarification.
Jeff
The patch has been already installed. Should it be reverted for now
then? Or probably test and install a version with LABEL_NUSES? It
still doesn't looks correct that cfgcleanup may remove label with
nonzero count of uses with following ICE in optimizers.
I'd leave it, but if Steven wants to remove and replace with a different
test I won't object.
Jeff