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: question on behavior of tree-ssa-ccp


On Thu, Dec 15, 2011 at 2:41 PM, Amker.Cheng <amker.cheng@gmail.com> wrote:
> HI,
> I encountered a case with below codes:
>
> int data_0;
> int motion_test1(int data, int v)
> {
> ? ? ? ?int i;
> ? ? ? ?int t, u;
> ? ?int x;
>
> ? ? ? ?if (data)
> ? ? ? ? ? ? ? ?i = data_0 + x;
> ? ? ? ?else {
> ? ? ? ? ? ? ? ?v = 2;
> ? ? ? ? ? ? ? ?i = 5;
> ? ? ? ?}
> ? ? ? ?t = data_0 + x;
> ? ? ? ?u = i;
> ? ? ? ?return v * t * u;
> }
> The dump file for 023t.ccp1 is like:
>
> motion_test1 (int data, int v)
> {
> ?int x;
> ?int t;
> ?int D.4723;
> ?int D.4722;
> ?int data_0.0;
>
> <bb 2>:
> ?if (data_3(D) != 0)
> ? ?goto <bb 4>;
> ?else
> ? ?goto <bb 3>;
>
> <bb 3>:
> ?v_8 = 2;
>
> <bb 4>:
> ?# v_1 = PHI <v_7(D)(2), 2(3)>
> ?data_0.0_10 = data_0;
> ?t_11 = data_0.0_10 + x_5(D);
> ?D.4723_13 = v_1 * t_11;
> ?D.4722_14 = D.4723_13 * 5;
> ?return D.4722_14;
>
> }
>
> Seems the result is computed as "v*(data_0+x)*5", which is wrong.
> The question is whether it is a bug or intended behavior due to
> unintialized "x"?
>
> Any tips is welcome. Thanks.

CCP is right.  When the path with the uninitialized use is entered
the value of i becomes undefined x + <undefined> is <undefined>
(not so, for example x * <undefined> which is well-defined for x == 0).
At the PHI node for i any <undefined> values on edges are ignored
so the only edge with a defined value (with value 5) is propagated.

Richard.

> --
> Best Regards.


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