Hi, Following is the tree dump of 094t.pre for a test program. Question is loads of D.5375_12/D.5375_14 are redundant on path <bb2, bb7, bb5, bb6>, but why not lowered into basic block 3, where it is used.
BTW, seems no tree pass handles this case currently. Any idea? Thanks int z$imag; int z$real; int D.5378; int D.5377; int D.5376; int D.5375; <bb 2>: D.5375_11 = REALPART_EXPR <g2>; D.5376_12 = IMAGPART_EXPR <g2>; D.5377_13 = REALPART_EXPR <g3>; D.5378_14 = IMAGPART_EXPR <g3>; if (D.5375_11 == D.5377_13) goto <bb 3>; else goto <bb 7>; <bb 3>: if (D.5376_12 == D.5378_14) goto <bb 4>; else goto <bb 7>; <bb 4>: z$real_15 = REALPART_EXPR <g1>; z$imag_16 = IMAGPART_EXPR <g1>; goto <bb 6>; <bb 7>: <bb 5>: z$real_17 = REALPART_EXPR <g4>; z$imag_18 = IMAGPART_EXPR <g4>; <bb 6>: # z$real_19 = PHI <z$real_15(4), z$real_17(5)> # z$imag_20 = PHI <z$imag_16(4), z$imag_18(5)> REALPART_EXPR <g1> = z$real_19; IMAGPART_EXPR <g1> = z$imag_20; return 0; -- Best Regards.