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. Ilya