Hi,

How SSA inlining and default defs for uninitialized variables are supposed to 
interact?  Suppose you have the following situation

    BB0 ...
     |   \
(ab) |    BB1 s_2 = f(s_1(D))
     |   /
    BB2 s_3 = PHI <s_1(D), s2>

in a function that gets inlined into a loop.  The liveness of s_1(D) in BB0 
will propagate to BB2 along the backwards edge and you get overlapping live 
ranges for s_1(D) and s_3.  If s_1(D) is SSA_NAME_OCCURS_IN_ABNORMAL_PHI, the 
compilation will abort during SSA coalescing because they must be coalesced.

This is on the mainline, Ada testcase attached, run 'gnatchop' on it and 
compile at -O -gnatp.

Thanks in advance.

-- 
Eric Botcazou
package Q is

    procedure Read(S : out Integer);
    procedure Restore(S : in out Integer);

end Q;
package P is

    type Int_Ptr is access all Integer;
    procedure Exec(P : Int_Ptr);

end P;
with Q; use Q;

package body P is

    procedure Lock is
        S : Integer;
    begin
        Read(S);
        Restore(S);
    exception
        when others => Restore(S);
    end;

    procedure Exec(P : Int_Ptr) is
    begin
        while P /= NULL loop
            Lock;
        end loop;
    end;

end P;

Reply via email to