All pastes #2073848 Raw Edit

Unnamed

public text v1 · immutable
#2073848 ·published 2011-06-02 20:40 UTC
rendered paste body


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
}