int main() { float[4] v = [1.0f, 2.0f, 3.0f, 4.0f]; return cast(int)v[0]; } is compiled to define x86_stdcallcc i32 @_Dmain(%"char[][]" %unnamed) { entry: %v = alloca <4 x float>, align 4 %.gc_mem = call %"byte[]" @_d_newarrayiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_xAf6__initZ to %object.TypeInfo*), i64 4) %.len = extractvalue %"byte[]" %.gc_mem, 0 %.ptr = extractvalue %"byte[]" %.gc_mem, 1 %.gc_mem1 = bitcast i8* %.ptr to float* store float 1.000000e+00, float* %.gc_mem1, align 4 %tmp3 = getelementptr i8* %.ptr, i64 4 %0 = bitcast i8* %tmp3 to float* store float 2.000000e+00, float* %0, align 4 %tmp4 = getelementptr i8* %.ptr, i64 8 %1 = bitcast i8* %tmp4 to float* store float 3.000000e+00, float* %1, align 4 %tmp5 = getelementptr i8* %.ptr, i64 12 %2 = bitcast i8* %tmp5 to float* store float 4.000000e+00, float* %2, align 4 %tmp6 = bitcast <4 x float>* %v to i8* %tmp7 = shl i64 %.len, 2 call void @_d_array_slice_copy(i8* nocapture %tmp6, i64 16, i8* nocapture %.ptr, i64 %tmp7) %tmp9 = getelementptr <4 x float>* %v, i64 0, i64 0 %tmp10 = load float* %tmp9, align 4 %tmp11 = fptosi float %tmp10 to i32 ret i32 %tmp11 }