This is the mail archive of the gcc@gcc.gnu.org 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]

Re: DCE eliminating valid statement for ACATS c34007p


On 9/6/05, Richard Kenner <kenner@vlsi1.ultra.nyu.edu> wrote:
> Here's a fragment of the SSA dump for a shortened version of that
> test.
> 
> 
>   D.860_8 = __gnat_malloc (20);
>   #   D.861_10 = V_MUST_DEF <D.861_9>;
>   D.861 = (struct c34007p__designated *) D.860_8;
>   #   VUSE <D.861_10>;
>   VIEW_CONVERT_EXPR<struct c34007p__T7b>(*D.861).b = 1;
>   #   VUSE <D.861_10>;
>   VIEW_CONVERT_EXPR<struct c34007p__T7b>(*D.861).l = 3;
> 
> There last two statements are confusing to me.  First of all, why isn't
> the *D.861 in SSA form?  But more importantly, those statements are
> modifying memory, but there's no V_MAY_DEF operand.  Why not?
> 
> I'm stepping through update_ssa_operands but can't figure out exactly
> where it's supposed to be written here.

You want to look at tree-ssa-operands.c:get_expr_operands() and see where
things go wrong.  Also for D.861 not in SSA form, there might be a missing
call to mark_vars_to_rename and/or update_ssa somewhere.  At which point
in the pass flow does the above happen?  Is it ever "correct"?

Richard.


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