https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106663
Aldy Hernandez <aldyh at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Last reconfirmed| |2022-08-17
Assignee|unassigned at gcc dot gnu.org |aldyh at gcc dot gnu.org
Status|UNCONFIRMED |NEW
--- Comment #2 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> Created attachment 53468 [details]
> patch restoring backward threader functionality
>
> The attached restores functionality in the backwards threader but as said it
> gives up in find_taken_edge_goto doing
>
> m_solver->range_of_expr (r, dest, m_last_stmt);
> tree addr;
> if (!r.singleton_p (&addr)
> || (TREE_CODE (addr) != ADDR_EXPR
> && TREE_CODE (TREE_OPERAND (addr, 0)) != LABEL_DECL))
> return NULL;
>
> since the range we get is non-null, not &label
In my prange branch I have the following for a prange:
+ void set_pt (tree base);
+ void set_pt (tree base, const wide_int &offset);
+ bool get_pt (tree &base, wide_int &offset) const;
Your snippet above could be:
m_solver->range_of_expr (r, dest, m_last_stmt);
tree addr;
wide_int offset;
if (is_a <prange> (r))
&& as_a <prange> (r).get_pt (addr, offset)
&& offset == 0
&& TREE_CODE (addr) != ADDR_EXPR
&& TREE_CODE (TREE_OPERAND (addr, 0)) != LABEL_DECL)))
...
Or some such... it was working last time I poked at it last year ;-).
Anyways, confirmed. I'll take it.