https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88677
Jan Hubicka <hubicka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|hubicka at gcc dot gnu.org |rguenther at suse dot de --- Comment #13 from Jan Hubicka <hubicka at gcc dot gnu.org> --- So even with the patch for TYPE_NEEDS_CONSTRUCTING I get the following difference in fre1 dump (and it is first one). I also use -fno-strict-aliasing --- test.ii.033t.fre1 2019-02-10 13:27:45.531305878 +0100 +++ dd/test.ii.033t.fre1 2019-02-10 13:27:34.895310810 +0100 @@ -120,7 +120,7 @@ n::p (struct n * const this) { int SR.3; - struct D D.2531; + struct D D.2527; struct D D.2507; unsigned int _1; @@ -221,9 +221,9 @@ marking outgoing edge 6 -> 8 executable Processing block 5: BB8 Value numbering stmt = SR.9_27 = MEM[(struct D *)&m]; -Setting value number of SR.9_27 to SR.8_23 (changed) +Setting value number of SR.9_27 to SR.9_27 (changed) marking outgoing edge 8 -> 9 executable -Making available beyond BB8 SR.9_27 for value SR.8_23 +Making available beyond BB8 SR.9_27 for value SR.9_27 Processing block 6: BB7 Value numbering stmt = SR.9_26 = 0; RHS 0 simplified to 0 @@ -233,12 +233,11 @@ Value numbering stmt = .MEM_14 = PHI <.MEM_6(7), .MEM_6(8)> Setting value number of .MEM_14 to .MEM_6 (changed) Value numbering stmt = SR.9_12 = PHI <SR.9_26(7), SR.9_27(8)> -Marking CSEd to PHI node SR.8_11 = PHI <SR.8_2(3), SR.8_23(4)> -Setting value number of SR.9_12 to SR.8_11 (changed) -SR.8_11 is available for SR.8_11 +Setting value number of SR.9_12 to SR.9_12 (changed) +Making available beyond BB9 SR.9_12 for value SR.9_12 Value numbering stmt = MEM[(struct D *)&D.2498] = SR.9_12; No store match -Value numbering store MEM[(struct D *)&D.2498] to SR.8_11 +Value numbering store MEM[(struct D *)&D.2498] to SR.9_12 Setting value number of .MEM_18 to .MEM_18 (changed) Value numbering stmt = return; marking outgoing edge 9 -> 1 executable @@ -252,9 +251,7 @@ Value numbering stmt = <L1>: Value numbering stmt = resx 1 RPO iteration over 10 blocks visited 10 blocks in total discovering 10 executable blocks iterating 1.0 times, a block was visited max. 1 times -RPO tracked 2 values available at 3 locations and 17 lattice elements -Replaced redundant PHI node defining SR.9_12 with SR.8_11 -Removing dead stmt SR.9_12 = PHI <0(7), SR.9_27(8)> +RPO tracked 4 values available at 4 locations and 17 lattice elements Removing dead stmt SR.9_26 = 0; Removing dead stmt _10 = a_7(D); Removing dead stmt SR.7_24 = SR.8_11; @@ -281,9 +278,9 @@ int SR.8; int SR.7; unsigned int a; - struct D D.2547; - struct D D.2545; - struct D D.2544; + struct D D.2543; + struct D D.2541; + struct D D.2540; struct n a; struct D D.2498; struct D D.2497; @@ -313,7 +310,8 @@ SR.9_27 = MEM[(struct D *)&m]; <bb 7> : - MEM[(struct D *)&D.2498] = SR.8_11; + # SR.9_12 = PHI <0(5), SR.9_27(6)> + MEM[(struct D *)&D.2498] = SR.9_12; return; <bb 8> : Richi, do you have any idea what happens here? If needed I can analyze it more...