------- Comment #5 from rguenth at gcc dot gnu dot org 2006-05-11 08:56 ------- Reduced testcase:
double zero; double matmul_c8 (_Complex double * dest) { *dest += 1; return zero; } we go from before cplxlower matmul_c8 (dest) { double D.1526; complex double D.1525; complex double D.1524; <bb 2>: # VUSE <zero_4>; D.1524_2 = *dest_1; D.1525_3 = D.1524_2 + __complex__ (1.0e+0, 0.0); # zero_7 = V_MAY_DEF <zero_4>; *dest_1 = D.1525_3; # VUSE <zero_7>; D.1526_5 = zero; return D.1526_5; } to after it ;; basic block 2, loop depth 0, count 0 ;; prev block 0, next block 1 ;; pred: ENTRY [100.0%] (fallthru,exec) ;; succ: EXIT [100.0%] <bb 2>: # VUSE <SMT.4>; D.1538 = REALPART_EXPR <*dest_1>; # VUSE <SMT.4>; D.1539 = IMAGPART_EXPR <*dest_1>; D.1524_2 = COMPLEX_EXPR <D.1538, D.1539>; CR.9_9 = D.1538; CI.10_10 = D.1539; D.1542 = CR.9_9 + 1.0e+0; D.1525_3 = COMPLEX_EXPR <D.1542, CI.10_10>; CR.11_11 = D.1542; # zero_7 = V_MAY_DEF <zero_4>; *dest_1 = D.1525_3; # VUSE <zero_7>; D.1526_5 = zero; return D.1526_5; note that for the complex dest, we have Vops for zero only, but later a SMT falls out of the sky. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27341