array initializers
Trass3r via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jul 11 16:08:29 PDT 2014
> auto foo() {
> immutable int[] arr = [0, 1, 0, 3];
> return arr;
> }
> ---
> produces (with optimizations on, but just for brevity)
> ---
> define { i64, i32* } @_D4test3fooFZyAi() #0 {
> ret { i64, i32* } { i64 4, i32* getelementptr inbounds ([4 x
> i32]* @.immutablearray, i32 0, i32 0) }
> }
> ---
Indeed. But
bool blub()
{
immutable int[] arr = [0,0,0,0,0,0,0,0];
return arr == [1,1,1,1,1,1,1,1];
}
yields
@.immutablearray = internal constant [8 x i32] zeroinitializer
@.arrayliteral = internal unnamed_addr constant [8 x i32] [i32 1,
i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1]
define i1 @_D13arrayliterals4blubFZb() #0 {
%.gc_mem = tail call { i64, i8* }
@_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Ai6__initZ, i64 8)
%.ptr = extractvalue { i64, i8* } %.gc_mem, 1
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %.ptr, i8*
bitcast ([8 x i32]* @.arrayliteral to i8*), i64 32, i32 1, i1
false)
%tmp27 = tail call i32 @_adEq2({ i64, i8* } { i64 8, i8*
bitcast ([8 x i32]* @.immutablearray to i8*) }, { i64, i8* }
%.gc_mem, %object.TypeInfo* bitcast (%"typeid(immutable(int)[])"*
@_D12TypeInfo_Ayi6__initZ to %object.TypeInfo*)) #2
%tmp28 = icmp ne i32 %tmp27, 0
ret i1 %tmp28
}
More information about the Digitalmars-d
mailing list