Files
c3c/test/test_suite/vector/vector_init.c3t
2023-11-13 17:20:46 +01:00

53 lines
1.8 KiB
C

// #target: macos-x64
int[<4>] baz = { 1, 4, 5, 7 };
fn void main()
{
int[<4>] foo = { 1, 2, 3, 4 };
int z = foo[0];
foo[2] = z + 1;
int[<4>] bar = {};
int[<4>] bar2 = { 1, z, 3, 4 };
int[<4>] bar3 = { [1] = z };
int[<4>] bar4 = { [0..3] = z };
}
/* #expect: vector_init.ll
@vector_init.baz = local_unnamed_addr global <4 x i32> <i32 1, i32 4, i32 5, i32 7>, align 16
define void @vector_init.main() #0 {
entry:
%foo = alloca <4 x i32>, align 16
%z = alloca i32, align 4
%bar = alloca <4 x i32>, align 16
%bar2 = alloca <4 x i32>, align 16
%bar3 = alloca <4 x i32>, align 16
%bar4 = alloca <4 x i32>, align 16
store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %foo, align 16
%0 = load <4 x i32>, ptr %foo, align 16
%1 = extractelement <4 x i32> %0, i64 0
store i32 %1, ptr %z, align 4
%2 = load <4 x i32>, ptr %foo, align 16
%3 = load i32, ptr %z, align 4
%add = add i32 %3, 1
%elemset = insertelement <4 x i32> %2, i32 %add, i64 2
store <4 x i32> %elemset, ptr %foo, align 16
store <4 x i32> zeroinitializer, ptr %bar, align 16
%4 = load i32, ptr %z, align 4
%5 = insertelement <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>, i32 %4, i64 1
%6 = insertelement <4 x i32> %5, i32 3, i64 2
%7 = insertelement <4 x i32> %6, i32 4, i64 3
store <4 x i32> %7, ptr %bar2, align 16
%8 = load i32, ptr %z, align 4
%9 = insertelement <4 x i32> zeroinitializer, i32 %8, i64 1
store <4 x i32> %9, ptr %bar3, align 16
%10 = load i32, ptr %z, align 4
%11 = insertelement <4 x i32> zeroinitializer, i32 %10, i64 0
%12 = insertelement <4 x i32> %11, i32 %10, i64 1
%13 = insertelement <4 x i32> %12, i32 %10, i64 2
%14 = insertelement <4 x i32> %13, i32 %10, i64 3
store <4 x i32> %14, ptr %bar4, align 16
ret void
}