On Thu, Jul 21, 2011 at 1:17 PM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Thu, Jul 21, 2011 at 10:00 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > >>> /* Represents viewing something of one type as being of a second type. >>> This corresponds to an "Unchecked Conversion" in Ada and roughly to >>> the idiom *(type2 *)&X in C. The only operand is the value to be >>> viewed as being of another type. **It is undefined if the type of the >>> input and of the expression have different sizes.** >>> >>> ... >>> DEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", tcc_reference, 1) >>> >>> We have: >>> >>> <bb 2>: >>> D.2709_8 = VIEW_CONVERT_EXPR<double>(&xxxx); >>> D.2702_1 = u.d; >>> D.2704_3 = D.2702_1 == D.2709_8; >>> D.2701_4 = (int) D.2704_3; >>> return D.2701_4; >>> >>> Where >>> >>> sizeof (double) = 64 >>> sizeof (ptr_type) = 32. >>> >> >> Are you sure that you used -mx32? I couldn't reproduce it. >> It looks like an x86 backend bug to me. > > Hm, can't reproduce it anymore... x32 -O2 looks OK: > > <bb 2>: > v = {}; > v.m = &xxxx; > D.2702_1 = u.d; > D.2703_2 = v.d; > D.2704_3 = D.2702_1 == D.2703_2; > D.2701_4 = (int) D.2704_3; > return D.2701_4; > > } > > Expand generates: > > (insn 8 6 9 (set (reg:SI 68) > (symbol_ref:SI ("xxxx") [flags 0x40] <var_decl 0x7fccc360b140 xxxx>)) > p > r49798.c:12 -1 > (nil)) > > (insn 9 8 10 (set (reg:DI 67) > (zero_extend:DI (reg:SI 68))) pr49798.c:12 -1 > (nil)) > > I don't know if this is OK to be transformed to DImode load. >
I believe it is valid. -- H.J.