; ModuleID = 'struct.c' target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.7.0" %struct.A = type { i32, double, i8*, %struct.A* } @i = common global i32 0, align 4 @d = common global double 0.000000e+00, align 8 @c = common global i8* null, align 8 @a = common global %struct.A* null, align 8 define void @foo(%struct.A* %val) #0 { entry: %val.addr = alloca %struct.A*, align 8 store %struct.A* %val, %struct.A** %val.addr, align 8 %0 = load %struct.A** %val.addr, align 8 %i = getelementptr inbounds %struct.A* %0, i32 0, i32 0 %1 = load i32* %i, align 4 store i32 %1, i32* @i, align 4 %2 = load %struct.A** %val.addr, align 8 %d = getelementptr inbounds %struct.A* %2, i32 0, i32 1 %3 = load double* %d, align 8 store double %3, double* @d, align 8 %4 = load %struct.A** %val.addr, align 8 %c = getelementptr inbounds %struct.A* %4, i32 0, i32 2 %5 = load i8** %c, align 8 store i8* %5, i8** @c, align 8 %6 = load %struct.A** %val.addr, align 8 %a = getelementptr inbounds %struct.A* %6, i32 0, i32 3 %7 = load %struct.A** %a, align 8 store %struct.A* %7, %struct.A** @a, align 8 ret void } attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }