https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118910
Bug ID: 118910 Summary: Promote an expression equivalence to a name equivalence in DOM Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: law at gcc dot gnu.org Target Milestone: --- Created attachment 60517 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60517&action=edit POC patch In the context of bz81958 I speculated that improving the way we handle conditional equivalences a bit could improve jump threading and ultimately resolve the missed optimization leading to the false positive uninitialized warning. Since then we've moved away from DOM threading, so those ideas won't solve that particular bz's problem. But the ideas may still be found and provide value. The purpose of this bz is to record the ideas independently and trigger an evaluation of whether or not they are worth pushing beyond the initial proof of concept code. We have a structure which records equivalenes related to edges so that we can add those equivalences to the various tables as we traverse edges. There are two forms of edge equivalences we track. [01] = a COND b Is used to record the equivalences created by the branch itself. We can look the RHS up in the expression table and it'll report back the LHS (a constant indicating branch direction). Second are simple a = b equivalences. THe idea is that we can promote an expression equivalence to a simple equivalence by propagating known const/copy values into the expression equivalence and simplifying. So if the edge had 1 = a GE b If we know that a has the value zero we propagate that in resulting in 1 = 0 GE b We then fold/simplify the RHS. In the case I was looking at B is an unsigned type. So the net after simplificatoin is 1 = (0 EQ b) meaning we can record b = 0 as we traverse the edge. I'll attach a very rough POC that could probably be used for some initial evaluation. I have a suspicion this would be generally useful as I've seen it identify caess for promotion. What I haven't done is run a wide body of code through it to see if it helps in practice (and to generate any tests).