http://llvm.org/bugs/show_bug.cgi?id=4216
Sylvère Teissier <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|FIXED | --- Comment #11 from Sylvère Teissier <[email protected]> 2009-09-22 08:53:56 --- that's stange with my target: with -01 I have this: clang-cc test2.c -emit-llvm -o - -O1 ; ModuleID = 'test2.c' target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" target triple = "i386-pc-linux-gnu" %struct.control_reg = type { i8, i8, [2 x i8] } define void @test_bitfield(%struct.control_reg* noalias nocapture sret %agg.result, %struct.control_reg* nocapture byval %c) nounwind { entry: %tmp = bitcast %struct.control_reg* %c to i32* ; <i32*> [#uses=1] %bf.prev.low = load i32* %tmp ; <i32> [#uses=1] %bf.prev.lo.cleared10 = or i32 %bf.prev.low, 32962 ; <i32> [#uses=1] %bf.new.lo11 = and i32 %bf.prev.lo.cleared10, -25350 ; <i32> [#uses=1] %0 = bitcast %struct.control_reg* %agg.result to i32* ; <i32*> [#uses=1] store i32 %bf.new.lo11, i32* %0, align 4 ret void } that's ok, but with -O2 / -O3 I have this: $ clang-cc test2.c -emit-llvm -o - -O2 ; ModuleID = 'test2.c' target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" target triple = "i386-pc-linux-gnu" %struct.control_reg = type { i8, i8, [2 x i8] } define void @test_bitfield(%struct.control_reg* noalias nocapture sret %agg.result, %struct.control_reg* nocapture byval %c) nounwind { entry: %tmp = bitcast %struct.control_reg* %c to i32* ; <i32*> [#uses=1] %bf.prev.low = load i32* %tmp ; <i32> [#uses=3] %bf.prev.lo.cleared10 = or i32 %bf.prev.low, 32962 ; <i32> [#uses=1] %bf.new.lo11 = and i32 %bf.prev.lo.cleared10, -25350 ; <i32> [#uses=2] %trunc = trunc i32 %bf.new.lo11 to i8 ; <i8> [#uses=1] %tmp28 = lshr i32 %bf.new.lo11, 8 ; <i32> [#uses=1] %tmp29 = trunc i32 %tmp28 to i8 ; <i8> [#uses=1] %tmp30 = lshr i32 %bf.prev.low, 16 ; <i32> [#uses=1] %tmp31 = trunc i32 %tmp30 to i8 ; <i8> [#uses=1] %tmp32 = lshr i32 %bf.prev.low, 24 ; <i32> [#uses=1] %tmp33 = trunc i32 %tmp32 to i8 ; <i8> [#uses=1] %agg.result.0 = getelementptr %struct.control_reg* %agg.result, i32 0, i32 0 ; <i8*> [#uses=1] store i8 %trunc, i8* %agg.result.0, align 4 %agg.result.1 = getelementptr %struct.control_reg* %agg.result, i32 0, i32 1 ; <i8*> [#uses=1] store i8 %tmp29, i8* %agg.result.1, align 1 %agg.result.2.0 = getelementptr %struct.control_reg* %agg.result, i32 0, i32 2, i32 0 ; <i8*> [#uses=1] store i8 %tmp31, i8* %agg.result.2.0, align 2 %agg.result.2.1 = getelementptr %struct.control_reg* %agg.result, i32 0, i32 2, i32 1 ; <i8*> [#uses=1] store i8 %tmp33, i8* %agg.result.2.1, align 2 ret void } that's very bad :( do you have the same behavior ? -- Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
_______________________________________________ LLVMbugs mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs
