blob: 390161cf7f68b3e53833bab4f1628affe7978d01 [file] [log] [blame]
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK,CHECK-O0
2// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=pattern %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK-O0,PATTERN,PATTERN-O0
3// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=pattern %s -O1 -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK-O1,PATTERN,PATTERN-O1
4// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=zero %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK-O0,ZERO,ZERO-O0
5// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=zero %s -O1 -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK-O1,ZERO,ZERO-O1
JF Bastienc70f65e2018-08-07 03:12:52 +00006
7template<typename T> void used(T &) noexcept;
8
9#define TEST_UNINIT(NAME, TYPE) \
10 using type_##NAME = TYPE; \
11 void test_##NAME##_uninit() { \
12 type_##NAME uninit; \
13 used(uninit); \
14 }
15
16// Value initialization on scalars, aggregate initialization on aggregates.
17#define TEST_BRACES(NAME, TYPE) \
18 using type_##NAME = TYPE; \
19 void test_##NAME##_braces() { \
20 type_##NAME braces = {}; \
21 used(braces); \
22 }
23
24#define TEST_CUSTOM(NAME, TYPE, ...) \
25 using type_##NAME = TYPE; \
26 void test_##NAME##_custom() { \
27 type_##NAME custom __VA_ARGS__; \
28 used(custom); \
29 }
30
JF Bastien14daa202018-12-18 05:12:21 +000031// None of the synthesized globals should contain `undef`.
32// PATTERN-NOT: undef
33// ZERO-NOT: undef
34
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000035// PATTERN-O0: @__const.test_empty_uninit.uninit = private unnamed_addr constant %struct.empty { i8 -86 }, align 1
36// PATTERN-O1-NOT: @__const.test_empty_uninit.uninit
JF Bastienc70f65e2018-08-07 03:12:52 +000037struct empty {};
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000038// PATTERN-O0: @__const.test_small_uninit.uninit = private unnamed_addr constant %struct.small { i8 -86 }, align 1
39// PATTERN-O0: @__const.test_small_custom.custom = private unnamed_addr constant %struct.small { i8 42 }, align 1
40// ZERO-O0: @__const.test_small_custom.custom = private unnamed_addr constant %struct.small { i8 42 }, align 1
41// PATTERN-O1-NOT: @__const.test_small_uninit.uninit
42// PATTERN-O1-NOT: @__const.test_small_custom.custom
43// ZERO-O1-NOT: @__const.test_small_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +000044struct small { char c; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000045// PATTERN-O0: @__const.test_smallinit_uninit.uninit = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1
46// PATTERN-O0: @__const.test_smallinit_braces.braces = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1
47// PATTERN-O0: @__const.test_smallinit_custom.custom = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1
48// PATTERN-O1-NOT: @__const.test_smallinit_uninit.uninit
49// PATTERN-O1-NOT: @__const.test_smallinit_braces.braces
50// PATTERN-O1-NOT: @__const.test_smallinit_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +000051struct smallinit { char c = 42; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000052// PATTERN-O0: @__const.test_smallpartinit_uninit.uninit = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1
53// PATTERN-O0: @__const.test_smallpartinit_braces.braces = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1
54// PATTERN-O0: @__const.test_smallpartinit_custom.custom = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1
55// PATTERN-O1-NOT: @__const.test_smallpartinit_uninit.uninit
56// PATTERN-O1-NOT: @__const.test_smallpartinit_braces.braces
57// PATTERN-O1-NOT: @__const.test_smallpartinit_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +000058struct smallpartinit { char c = 42, d; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000059// PATTERN-O0: @__const.test_nullinit_uninit.uninit = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8
60// PATTERN-O0: @__const.test_nullinit_braces.braces = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8
61// PATTERN-O0: @__const.test_nullinit_custom.custom = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8
62// PATTERN-O1-NOT: @__const.test_nullinit_uninit.uninit
63// PATTERN-O1-NOT: @__const.test_nullinit_braces.braces
64// PATTERN-O1-NOT: @__const.test_nullinit_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +000065struct nullinit { char* null = nullptr; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000066// PATTERN-O0: @__const.test_padded_uninit.uninit = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4
JF Bastiencdf26f12019-04-30 23:27:28 +000067// PATTERN-O0: @__const.test_padded_custom.custom = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, align 4
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000068// ZERO-O0: @__const.test_padded_custom.custom = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, align 4
69// PATTERN-O1-NOT: @__const.test_padded_uninit.uninit
70// PATTERN-O1-NOT: @__const.test_padded_custom.custom
71// ZERO-O1-NOT: @__const.test_padded_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +000072struct padded { char c; int i; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000073// PATTERN-O0: @__const.test_paddednullinit_uninit.uninit = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4
74// PATTERN-O0: @__const.test_paddednullinit_braces.braces = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4
75// PATTERN-O0: @__const.test_paddednullinit_custom.custom = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4
76// PATTERN-O1-NOT: @__const.test_paddednullinit_uninit.uninit
77// PATTERN-O1-NOT: @__const.test_paddednullinit_braces.braces
78// PATTERN-O1-NOT: @__const.test_paddednullinit_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +000079struct paddednullinit { char c = 0; int i = 0; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000080// PATTERN-O0: @__const.test_paddedpacked_uninit.uninit = private unnamed_addr constant %struct.paddedpacked <{ i8 -86, i32 -1431655766 }>, align 1
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +000081// PATTERN: @__const.test_paddedpacked_custom.custom = private unnamed_addr constant %struct.paddedpacked <{ i8 42, i32 13371337 }>, align 1
82// ZERO: @__const.test_paddedpacked_custom.custom = private unnamed_addr constant %struct.paddedpacked <{ i8 42, i32 13371337 }>, align 1
83struct paddedpacked { char c; int i; } __attribute__((packed));
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000084// PATTERN-O0: @__const.test_paddedpackedarray_uninit.uninit = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 -86, i32 -1431655766 }>, %struct.paddedpacked <{ i8 -86, i32 -1431655766 }>] }, align 1
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +000085// PATTERN: @__const.test_paddedpackedarray_custom.custom = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }>] }, align 1
86// ZERO: @__const.test_paddedpackedarray_custom.custom = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }>] }, align 1
87struct paddedpackedarray { struct paddedpacked p[2]; };
Peter Collingbourne68b46732019-03-16 19:25:39 +000088// PATTERN-O0: @__const.test_unpackedinpacked_uninit.uninit = private unnamed_addr constant <{ { i8, [3 x i8], i32 }, i8 }> <{ { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, i8 -86 }>, align 1
89struct unpackedinpacked { padded a; char b; } __attribute__((packed));
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000090// PATTERN-O0: @__const.test_paddednested_uninit.uninit = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 } }, align 4
JF Bastiencdf26f12019-04-30 23:27:28 +000091// PATTERN: @__const.test_paddednested_custom.custom = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, { i8, [3 x i8], i32 } { i8 43, [3 x i8] zeroinitializer, i32 13371338 } }, align 4
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +000092// ZERO: @__const.test_paddednested_custom.custom = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, { i8, [3 x i8], i32 } { i8 43, [3 x i8] zeroinitializer, i32 13371338 } }, align 4
93struct paddednested { struct padded p1, p2; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000094// PATTERN-O0: @__const.test_paddedpackednested_uninit.uninit = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 -86, i32 -1431655766 }>, %struct.paddedpacked <{ i8 -86, i32 -1431655766 }> }, align 1
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +000095// PATTERN: @__const.test_paddedpackednested_custom.custom = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }> }, align 1
96// ZERO: @__const.test_paddedpackednested_custom.custom = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }> }, align 1
97struct paddedpackednested { struct paddedpacked p1, p2; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +000098// PATTERN-O0: @__const.test_bitfield_uninit.uninit = private unnamed_addr constant %struct.bitfield { i8 -86, [3 x i8] c"\AA\AA\AA" }, align 4
99// PATTERN-O0: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] c"\AA\AA\AA" }, align 4
100// ZERO-O0: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] zeroinitializer }, align 4
101// PATTERN-O1-NOT: @__const.test_bitfield_uninit.uninit
102// PATTERN-O1-NOT: @__const.test_bitfield_custom.custom
103// ZERO-O1-NOT: @__const.test_bitfield_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000104struct bitfield { int i : 4; int j : 2; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000105// PATTERN-O0: @__const.test_bitfieldaligned_uninit.uninit = private unnamed_addr constant %struct.bitfieldaligned { i8 -86, [3 x i8] c"\AA\AA\AA", i8 -86, [3 x i8] c"\AA\AA\AA" }, align 4
106// PATTERN-O0: @__const.test_bitfieldaligned_custom.custom = private unnamed_addr constant %struct.bitfieldaligned { i8 4, [3 x i8] c"\AA\AA\AA", i8 1, [3 x i8] c"\AA\AA\AA" }, align 4
107// ZERO-O0: @__const.test_bitfieldaligned_custom.custom = private unnamed_addr constant %struct.bitfieldaligned { i8 4, [3 x i8] zeroinitializer, i8 1, [3 x i8] zeroinitializer }, align 4
108// PATTERN-O1-NOT: @__const.test_bitfieldaligned_uninit.uninit
109// PATTERN-O1-NOT: @__const.test_bitfieldaligned_custom.custom
110// ZERO-O1-NOT: @__const.test_bitfieldaligned_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000111struct bitfieldaligned { int i : 4; int : 0; int j : 2; };
112struct big { unsigned a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000113// PATTERN-O0: @__const.test_arraytail_uninit.uninit = private unnamed_addr constant %struct.arraytail { i32 -1431655766, [0 x i32] zeroinitializer }, align 4
114// PATTERN-O0: @__const.test_arraytail_custom.custom = private unnamed_addr constant %struct.arraytail { i32 57005, [0 x i32] zeroinitializer }, align 4
115// ZERO-O0: @__const.test_arraytail_custom.custom = private unnamed_addr constant %struct.arraytail { i32 57005, [0 x i32] zeroinitializer }, align 4
116// PATTERN-O1-NOT: @__const.test_arraytail_uninit.uninit
117// PATTERN-O1-NOT: @__const.test_arraytail_custom.custom
118// ZERO-O1-NOT: @__const.test_arraytail_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000119struct arraytail { int i; int arr[]; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000120// PATTERN-O0: @__const.test_int1_uninit.uninit = private unnamed_addr constant [1 x i32] [i32 -1431655766], align 4
121// PATTERN-O0: @__const.test_int1_custom.custom = private unnamed_addr constant [1 x i32] [i32 858993459], align 4
122// ZERO-O0: @__const.test_int1_custom.custom = private unnamed_addr constant [1 x i32] [i32 858993459], align 4
123// PATTERN-O1-NOT: @__const.test_int1_uninit.uninit
124// PATTERN-O1-NOT: @__const.test_int1_custom.custom
125// ZERO-O1-NOT: @__const.test_int1_custom.custom
126
127// PATTERN-O0: @__const.test_bool4_uninit.uninit = private unnamed_addr constant [4 x i8] c"\AA\AA\AA\AA", align 1
128// PATTERN-O0: @__const.test_bool4_custom.custom = private unnamed_addr constant [4 x i8] c"\01\01\01\01", align 1
129// ZERO-O0: @__const.test_bool4_custom.custom = private unnamed_addr constant [4 x i8] c"\01\01\01\01", align 1
130// PATTERN-O1-NOT: @__const.test_bool4_uninit.uninit
131// PATTERN-O1-NOT: @__const.test_bool4_custom.custom
132// ZERO-O1-NOT: @__const.test_bool4_custom.custom
133
JF Bastien14daa202018-12-18 05:12:21 +0000134// PATTERN: @__const.test_intptr4_custom.custom = private unnamed_addr constant [4 x i32*] [i32* inttoptr (i64 572662306 to i32*), i32* inttoptr (i64 572662306 to i32*), i32* inttoptr (i64 572662306 to i32*), i32* inttoptr (i64 572662306 to i32*)], align 16
135// ZERO: @__const.test_intptr4_custom.custom = private unnamed_addr constant [4 x i32*] [i32* inttoptr (i64 572662306 to i32*), i32* inttoptr (i64 572662306 to i32*), i32* inttoptr (i64 572662306 to i32*), i32* inttoptr (i64 572662306 to i32*)], align 16
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000136// PATTERN-O0: @__const.test_tailpad4_uninit.uninit = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }], align 16
137// PATTERN-O1-NOT: @__const.test_tailpad4_uninit.uninit
JF Bastiencdf26f12019-04-30 23:27:28 +0000138// PATTERN: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }], align 16
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000139// ZERO: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }], align 16
JF Bastienc70f65e2018-08-07 03:12:52 +0000140struct tailpad { short s; char c; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000141// PATTERN-O0: @__const.test_atomicnotlockfree_uninit.uninit = private unnamed_addr constant %struct.notlockfree { [4 x i64] [i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206] }, align 8
142// PATTERN-O1-NOT: @__const.test_atomicnotlockfree_uninit.uninit
JF Bastienc70f65e2018-08-07 03:12:52 +0000143struct notlockfree { long long a[4]; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000144// PATTERN-O0: @__const.test_atomicpadded_uninit.uninit = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 8
145// PATTERN-O1-NOT: @__const.test_atomicpadded_uninit.uninit
146// PATTERN-O0: @__const.test_atomictailpad_uninit.uninit = private unnamed_addr constant { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, align 4
147// PATTERN-O1-NOT: @__const.test_atomictailpad_uninit.uninit
148// PATTERN-O0: @__const.test_complexfloat_uninit.uninit = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4
149// PATTERN-O1-NOT: @__const.test_complexfloat_uninit.uninit
150// PATTERN-O0: @__const.test_complexfloat_braces.braces = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4
151// PATTERN-O1-NOT: @__const.test_complexfloat_braces.braces
152// PATTERN-O0: @__const.test_complexfloat_custom.custom = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4
153// PATTERN-O1-NOT: @__const.test_complexfloat_custom.custom
154// PATTERN-O0: @__const.test_complexdouble_uninit.uninit = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8
155// PATTERN-O1-NOT: @__const.test_complexdouble_uninit.uninit
156// PATTERN-O0: @__const.test_complexdouble_braces.braces = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8
157// PATTERN-O1-NOT: @__const.test_complexdouble_braces.braces
158// PATTERN-O0: @__const.test_complexdouble_custom.custom = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8
159// PATTERN-O1-NOT: @__const.test_complexdouble_custom.custom
160// PATTERN-O0: @__const.test_semivolatile_uninit.uninit = private unnamed_addr constant %struct.semivolatile { i32 -1431655766, i32 -1431655766 }, align 4
161// PATTERN-O0: @__const.test_semivolatile_custom.custom = private unnamed_addr constant %struct.semivolatile { i32 1145324612, i32 1145324612 }, align 4
162// PATTERN-O1-NOT: @__const.test_semivolatile_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000163struct semivolatile { int i; volatile int vi; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000164// PATTERN-O0: @__const.test_semivolatileinit_uninit.uninit = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
165// PATTERN-O1-NOT: @__const.test_semivolatileinit_uninit.uninit
166// PATTERN-O0: @__const.test_semivolatileinit_braces.braces = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
167// PATTERN-O1-NOT: @__const.test_semivolatileinit_braces.braces
168// PATTERN-O0: @__const.test_semivolatileinit_custom.custom = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
169// PATTERN-O1-NOT: @__const.test_semivolatileinit_custom.custom = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
170// ZERO-O0: @__const.test_semivolatile_custom.custom = private unnamed_addr constant %struct.semivolatile { i32 1145324612, i32 1145324612 }, align 4
171// ZERO-O1-NOT: @__const.test_semivolatile_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000172struct semivolatileinit { int i = 0x11111111; volatile int vi = 0x11111111; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000173// PATTERN-O0: @__const.test_base_uninit.uninit = private unnamed_addr constant %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, align 8
174// PATTERN-O1-NOT: @__const.test_base_uninit.uninit
175// PATTERN-O0: @__const.test_base_braces.braces = private unnamed_addr constant %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, align 8
176// PATTERN-O1-NOT: @__const.test_base_braces.braces
JF Bastienc70f65e2018-08-07 03:12:52 +0000177struct base { virtual ~base(); };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000178// PATTERN-O0: @__const.test_derived_uninit.uninit = private unnamed_addr constant %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } }, align 8
179// PATTERN-O1-NOT: @__const.test_derived_uninit.uninit
180// PATTERN-O0: @__const.test_derived_braces.braces = private unnamed_addr constant %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } }, align 8
181// PATTERN-O1-NOT: @__const.test_derived_braces.braces
JF Bastienc70f65e2018-08-07 03:12:52 +0000182struct derived : public base {};
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000183// PATTERN-O0: @__const.test_virtualderived_uninit.uninit = private unnamed_addr constant %struct.virtualderived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } } }, align 8
184// PATTERN-O1-NOT: @__const.test_virtualderived_uninit.uninit
185// PATTERN-O0: @__const.test_virtualderived_braces.braces = private unnamed_addr constant %struct.virtualderived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } } }, align 8
186// PATTERN-O1-NOT: @__const.test_virtualderived_braces.braces
JF Bastienc70f65e2018-08-07 03:12:52 +0000187struct virtualderived : public virtual base, public virtual derived {};
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000188// PATTERN-O0: @__const.test_matching_uninit.uninit = private unnamed_addr constant %union.matching { i32 -1431655766 }, align 4
189// PATTERN-O1-NOT: @__const.test_matching_uninit.uninit
190// PATTERN-O0: @__const.test_matching_custom.custom = private unnamed_addr constant { float } { float 6.145500e+04 }, align 4
191// PATTERN-O1-NOT: @__const.test_matching_custom.custom
192// ZERO-O0: @__const.test_matching_custom.custom = private unnamed_addr constant { float } { float 6.145500e+04 }, align 4
193// ZERO-O1-NOT: @__const.test_matching_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000194union matching { int i; float f; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000195// PATTERN-O0: @__const.test_matchingreverse_uninit.uninit = private unnamed_addr constant %union.matchingreverse { float 0xFFFFFFFFE0000000 }, align 4
196// PATTERN-O1-NOT: @__const.test_matchingreverse_uninit.uninit
197// PATTERN-O0: @__const.test_matchingreverse_custom.custom = private unnamed_addr constant { i32 } { i32 61455 }, align 4
198// PATTERN-O1-NOT: @__const.test_matchingreverse_custom.custom
199// ZERO-O0: @__const.test_matchingreverse_custom.custom = private unnamed_addr constant { i32 } { i32 61455 }, align 4
200// ZERO-O1-NOT: @__const.test_matchingreverse_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000201union matchingreverse { float f; int i; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000202// PATTERN-O0: @__const.test_unmatched_uninit.uninit = private unnamed_addr constant %union.unmatched { i32 -1431655766 }, align 4
203// PATTERN-O1-NOT: @__const.test_unmatched_uninit.uninit
204// PATTERN-O0: @__const.test_unmatched_custom.custom = private unnamed_addr constant %union.unmatched { i32 1001242351 }, align 4
205// PATTERN-O1-NOT: @__const.test_unmatched_custom.custom
206// ZERO-O0: @__const.test_unmatched_custom.custom = private unnamed_addr constant %union.unmatched { i32 1001242351 }, align 4
207// ZERO-O1-NOT: @__const.test_unmatched_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000208union unmatched { char c; int i; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000209// PATTERN-O0: @__const.test_unmatchedreverse_uninit.uninit = private unnamed_addr constant %union.unmatchedreverse { i32 -1431655766 }, align 4
210// PATTERN-O1-NOT: @__const.test_unmatchedreverse_uninit.uninit
211// PATTERN-O0: @__const.test_unmatchedreverse_custom.custom = private unnamed_addr constant { i8, [3 x i8] } { i8 42, [3 x i8] c"\AA\AA\AA" }, align 4
212// PATTERN-O1-NOT: @__const.test_unmatchedreverse_custom.custom
213// ZERO-O0: @__const.test_unmatchedreverse_custom.custom = private unnamed_addr constant { i8, [3 x i8] } { i8 42, [3 x i8] zeroinitializer }, align 4
214// ZERO-O1-NOT: @__const.test_unmatchedreverse_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000215union unmatchedreverse { int i; char c; };
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000216// PATTERN-O0: @__const.test_unmatchedfp_uninit.uninit = private unnamed_addr constant %union.unmatchedfp { double 0xFFFFFFFFFFFFFFFF }, align 8
217// PATTERN-O1-NOT: @__const.test_unmatchedfp_uninit.uninit
218// PATTERN-O0: @__const.test_unmatchedfp_custom.custom = private unnamed_addr constant %union.unmatchedfp { double 0x400921FB54442D18 }, align 8
219// PATTERN-O1-NOT: @__const.test_unmatchedfp_custom.custom
220// ZERO-O0: @__const.test_unmatchedfp_custom.custom = private unnamed_addr constant %union.unmatchedfp { double 0x400921FB54442D18 }, align 8
221// ZERO-O1-NOT: @__const.test_unmatchedfp_custom.custom
JF Bastienc70f65e2018-08-07 03:12:52 +0000222union unmatchedfp { float f; double d; };
223enum emptyenum {};
224enum smallenum { VALUE };
225
226extern "C" {
227
228TEST_UNINIT(char, char);
229// CHECK-LABEL: @test_char_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000230// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000231// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000232// PATTERN-LABEL: @test_char_uninit()
233// PATTERN: store i8 -86, i8* %uninit, align 1
234// ZERO-LABEL: @test_char_uninit()
235// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000236
237TEST_BRACES(char, char);
238// CHECK-LABEL: @test_char_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000239// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
240// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000241// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
242
243TEST_UNINIT(uchar, unsigned char);
244// CHECK-LABEL: @test_uchar_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000245// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000246// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000247// PATTERN-LABEL: @test_uchar_uninit()
248// PATTERN: store i8 -86, i8* %uninit, align 1
249// ZERO-LABEL: @test_uchar_uninit()
250// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000251
252TEST_BRACES(uchar, unsigned char);
253// CHECK-LABEL: @test_uchar_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000254// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
255// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000256// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
257
258TEST_UNINIT(schar, signed char);
259// CHECK-LABEL: @test_schar_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000260// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000261// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000262// PATTERN-LABEL: @test_schar_uninit()
263// PATTERN: store i8 -86, i8* %uninit, align 1
264// ZERO-LABEL: @test_schar_uninit()
265// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000266
267TEST_BRACES(schar, signed char);
268// CHECK-LABEL: @test_schar_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000269// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
270// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000271// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
272
273TEST_UNINIT(wchar_t, wchar_t);
274// CHECK-LABEL: @test_wchar_t_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000275// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000276// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000277// PATTERN-LABEL: @test_wchar_t_uninit()
278// PATTERN: store i32 -1431655766, i32* %uninit, align
279// ZERO-LABEL: @test_wchar_t_uninit()
280// ZERO: store i32 0, i32* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000281
282TEST_BRACES(wchar_t, wchar_t);
283// CHECK-LABEL: @test_wchar_t_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000284// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
285// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000286// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
287
288TEST_UNINIT(short, short);
289// CHECK-LABEL: @test_short_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000290// CHECK: %uninit = alloca i16, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000291// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000292// PATTERN-LABEL: @test_short_uninit()
293// PATTERN: store i16 -21846, i16* %uninit, align
294// ZERO-LABEL: @test_short_uninit()
295// ZERO: store i16 0, i16* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000296
297TEST_BRACES(short, short);
298// CHECK-LABEL: @test_short_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000299// CHECK: %braces = alloca i16, align [[ALIGN:[0-9]*]]
300// CHECK-NEXT: store i16 0, i16* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000301// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
302
303TEST_UNINIT(ushort, unsigned short);
304// CHECK-LABEL: @test_ushort_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000305// CHECK: %uninit = alloca i16, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000306// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000307// PATTERN-LABEL: @test_ushort_uninit()
308// PATTERN: store i16 -21846, i16* %uninit, align
309// ZERO-LABEL: @test_ushort_uninit()
310// ZERO: store i16 0, i16* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000311
312TEST_BRACES(ushort, unsigned short);
313// CHECK-LABEL: @test_ushort_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000314// CHECK: %braces = alloca i16, align [[ALIGN:[0-9]*]]
315// CHECK-NEXT: store i16 0, i16* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000316// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
317
318TEST_UNINIT(int, int);
319// CHECK-LABEL: @test_int_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000320// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000321// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000322// PATTERN-LABEL: @test_int_uninit()
323// PATTERN: store i32 -1431655766, i32* %uninit, align
324// ZERO-LABEL: @test_int_uninit()
325// ZERO: store i32 0, i32* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000326
327TEST_BRACES(int, int);
328// CHECK-LABEL: @test_int_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000329// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
330// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000331// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
332
333TEST_UNINIT(unsigned, unsigned);
334// CHECK-LABEL: @test_unsigned_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000335// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000336// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000337// PATTERN-LABEL: @test_unsigned_uninit()
338// PATTERN: store i32 -1431655766, i32* %uninit, align
339// ZERO-LABEL: @test_unsigned_uninit()
340// ZERO: store i32 0, i32* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000341
342TEST_BRACES(unsigned, unsigned);
343// CHECK-LABEL: @test_unsigned_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000344// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
345// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000346// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
347
348TEST_UNINIT(long, long);
349// CHECK-LABEL: @test_long_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000350// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000351// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000352// PATTERN-LABEL: @test_long_uninit()
353// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
354// ZERO-LABEL: @test_long_uninit()
355// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000356
357TEST_BRACES(long, long);
358// CHECK-LABEL: @test_long_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000359// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
360// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000361// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
362
363TEST_UNINIT(ulong, unsigned long);
364// CHECK-LABEL: @test_ulong_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000365// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000366// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000367// PATTERN-LABEL: @test_ulong_uninit()
368// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
369// ZERO-LABEL: @test_ulong_uninit()
370// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000371
372TEST_BRACES(ulong, unsigned long);
373// CHECK-LABEL: @test_ulong_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000374// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
375// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000376// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
377
378TEST_UNINIT(longlong, long long);
379// CHECK-LABEL: @test_longlong_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000380// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000381// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000382// PATTERN-LABEL: @test_longlong_uninit()
383// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
384// ZERO-LABEL: @test_longlong_uninit()
385// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000386
387TEST_BRACES(longlong, long long);
388// CHECK-LABEL: @test_longlong_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000389// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
390// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000391// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
392
393TEST_UNINIT(ulonglong, unsigned long long);
394// CHECK-LABEL: @test_ulonglong_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000395// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000396// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000397// PATTERN-LABEL: @test_ulonglong_uninit()
398// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
399// ZERO-LABEL: @test_ulonglong_uninit()
400// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000401
402TEST_BRACES(ulonglong, unsigned long long);
403// CHECK-LABEL: @test_ulonglong_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000404// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
405// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000406// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
407
408TEST_UNINIT(int128, __int128);
409// CHECK-LABEL: @test_int128_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000410// CHECK: %uninit = alloca i128, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000411// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000412// PATTERN-LABEL: @test_int128_uninit()
413// PATTERN: store i128 -113427455640312821154458202477256070486, i128* %uninit, align
414// ZERO-LABEL: @test_int128_uninit()
415// ZERO: store i128 0, i128* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000416
417TEST_BRACES(int128, __int128);
418// CHECK-LABEL: @test_int128_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000419// CHECK: %braces = alloca i128, align [[ALIGN:[0-9]*]]
420// CHECK-NEXT: store i128 0, i128* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000421// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
422
423TEST_UNINIT(uint128, unsigned __int128);
424// CHECK-LABEL: @test_uint128_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000425// CHECK: %uninit = alloca i128, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000426// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000427// PATTERN-LABEL: @test_uint128_uninit()
428// PATTERN: store i128 -113427455640312821154458202477256070486, i128* %uninit, align
429// ZERO-LABEL: @test_uint128_uninit()
430// ZERO: store i128 0, i128* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000431
432TEST_BRACES(uint128, unsigned __int128);
433// CHECK-LABEL: @test_uint128_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000434// CHECK: %braces = alloca i128, align [[ALIGN:[0-9]*]]
435// CHECK-NEXT: store i128 0, i128* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000436// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
437
438
439TEST_UNINIT(fp16, __fp16);
440// CHECK-LABEL: @test_fp16_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000441// CHECK: %uninit = alloca half, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000442// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000443// PATTERN-LABEL: @test_fp16_uninit()
444// PATTERN: store half 0xHFFFF, half* %uninit, align
445// ZERO-LABEL: @test_fp16_uninit()
446// ZERO: store half 0xH0000, half* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000447
448TEST_BRACES(fp16, __fp16);
449// CHECK-LABEL: @test_fp16_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000450// CHECK: %braces = alloca half, align [[ALIGN:[0-9]*]]
451// CHECK-NEXT: store half 0xH0000, half* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000452// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
453
454TEST_UNINIT(float, float);
455// CHECK-LABEL: @test_float_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000456// CHECK: %uninit = alloca float, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000457// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000458// PATTERN-LABEL: @test_float_uninit()
459// PATTERN: store float 0xFFFFFFFFE0000000, float* %uninit, align
460// ZERO-LABEL: @test_float_uninit()
461// ZERO: store float 0.000000e+00, float* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000462
463TEST_BRACES(float, float);
464// CHECK-LABEL: @test_float_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000465// CHECK: %braces = alloca float, align [[ALIGN:[0-9]*]]
466// CHECK-NEXT: store float 0.000000e+00, float* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000467// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
468
469TEST_UNINIT(double, double);
470// CHECK-LABEL: @test_double_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000471// CHECK: %uninit = alloca double, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000472// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000473// PATTERN-LABEL: @test_double_uninit()
474// PATTERN: store double 0xFFFFFFFFFFFFFFFF, double* %uninit, align
475// ZERO-LABEL: @test_double_uninit()
476// ZERO: store double 0.000000e+00, double* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000477
478TEST_BRACES(double, double);
479// CHECK-LABEL: @test_double_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000480// CHECK: %braces = alloca double, align [[ALIGN:[0-9]*]]
481// CHECK-NEXT: store double 0.000000e+00, double* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000482// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
483
484TEST_UNINIT(longdouble, long double);
485// CHECK-LABEL: @test_longdouble_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000486// CHECK: %uninit = alloca x86_fp80, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000487// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000488// PATTERN-LABEL: @test_longdouble_uninit()
489// PATTERN: store x86_fp80 0xKFFFFFFFFFFFFFFFFFFFF, x86_fp80* %uninit, align
490// ZERO-LABEL: @test_longdouble_uninit()
491// ZERO: store x86_fp80 0xK00000000000000000000, x86_fp80* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000492
493TEST_BRACES(longdouble, long double);
494// CHECK-LABEL: @test_longdouble_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000495// CHECK: %braces = alloca x86_fp80, align [[ALIGN:[0-9]*]]
496// CHECK-NEXT: store x86_fp80 0xK00000000000000000000, x86_fp80* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000497// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
498
499
500TEST_UNINIT(intptr, int*);
501// CHECK-LABEL: @test_intptr_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000502// CHECK: %uninit = alloca i32*, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000503// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000504// PATTERN-LABEL: @test_intptr_uninit()
505// PATTERN: store i32* inttoptr (i64 -6148914691236517206 to i32*), i32** %uninit, align
506// ZERO-LABEL: @test_intptr_uninit()
507// ZERO: store i32* null, i32** %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000508
509TEST_BRACES(intptr, int*);
510// CHECK-LABEL: @test_intptr_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000511// CHECK: %braces = alloca i32*, align [[ALIGN:[0-9]*]]
512// CHECK-NEXT: store i32* null, i32** %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000513// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
514
515TEST_UNINIT(intptrptr, int**);
516// CHECK-LABEL: @test_intptrptr_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000517// CHECK: %uninit = alloca i32**, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000518// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000519// PATTERN-LABEL: @test_intptrptr_uninit()
520// PATTERN: store i32** inttoptr (i64 -6148914691236517206 to i32**), i32*** %uninit, align
521// ZERO-LABEL: @test_intptrptr_uninit()
522// ZERO: store i32** null, i32*** %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000523
524TEST_BRACES(intptrptr, int**);
525// CHECK-LABEL: @test_intptrptr_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000526// CHECK: %braces = alloca i32**, align [[ALIGN:[0-9]*]]
527// CHECK-NEXT: store i32** null, i32*** %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000528// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
529
530TEST_UNINIT(function, void(*)());
531// CHECK-LABEL: @test_function_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000532// CHECK: %uninit = alloca void ()*, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000533// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000534// PATTERN-LABEL: @test_function_uninit()
535// PATTERN: store void ()* inttoptr (i64 -6148914691236517206 to void ()*), void ()** %uninit, align
536// ZERO-LABEL: @test_function_uninit()
537// ZERO: store void ()* null, void ()** %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000538
539TEST_BRACES(function, void(*)());
540// CHECK-LABEL: @test_function_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000541// CHECK: %braces = alloca void ()*, align [[ALIGN:[0-9]*]]
542// CHECK-NEXT: store void ()* null, void ()** %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000543// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
544
545TEST_UNINIT(bool, bool);
546// CHECK-LABEL: @test_bool_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000547// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000548// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000549// PATTERN-LABEL: @test_bool_uninit()
550// PATTERN: store i8 -86, i8* %uninit, align 1
551// ZERO-LABEL: @test_bool_uninit()
552// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000553
554TEST_BRACES(bool, bool);
555// CHECK-LABEL: @test_bool_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000556// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
557// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000558// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
559
560
561TEST_UNINIT(empty, empty);
562// CHECK-LABEL: @test_empty_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000563// CHECK: %uninit = alloca %struct.empty, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000564// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000565// PATTERN-LABEL: @test_empty_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000566// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_empty_uninit.uninit
567// PATTERN-O1: store i8 -86, {{.*}} align 1
JF Bastien14daa202018-12-18 05:12:21 +0000568// ZERO-LABEL: @test_empty_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000569// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
570// ZERO-O1: store i8 0, {{.*}} align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000571
572TEST_BRACES(empty, empty);
573// CHECK-LABEL: @test_empty_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000574// CHECK: %braces = alloca %struct.empty, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000575// CHECK-NEXT: bitcast
576// CHECK-NEXT: call void @llvm.memcpy
577// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
578
579TEST_UNINIT(small, small);
580// CHECK-LABEL: @test_small_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000581// CHECK: %uninit = alloca %struct.small, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000582// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000583// PATTERN-LABEL: @test_small_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000584// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_small_uninit.uninit
585// PATTERN-O1: store i8 -86, {{.*}} align 1
JF Bastien14daa202018-12-18 05:12:21 +0000586// ZERO-LABEL: @test_small_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000587// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
588// ZERO-O1: store i8 0, {{.*}} align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000589
590TEST_BRACES(small, small);
591// CHECK-LABEL: @test_small_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000592// CHECK: %braces = alloca %struct.small, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000593// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000594// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 1, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000595// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
596
JF Bastien14daa202018-12-18 05:12:21 +0000597TEST_CUSTOM(small, small, { 42 });
JF Bastienc70f65e2018-08-07 03:12:52 +0000598// CHECK-LABEL: @test_small_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000599// CHECK: %custom = alloca %struct.small, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000600// CHECK-NEXT: bitcast
601// CHECK-NEXT: call void @llvm.memcpy
602// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
603
604TEST_UNINIT(smallinit, smallinit);
605// CHECK-LABEL: @test_smallinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000606// CHECK: %uninit = alloca %struct.smallinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000607// CHECK-NEXT: call void @{{.*}}smallinit{{.*}}%uninit)
608// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
609
610TEST_BRACES(smallinit, smallinit);
611// CHECK-LABEL: @test_smallinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000612// CHECK: %braces = alloca %struct.smallinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000613// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallinit, %struct.smallinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000614// CHECK-NEXT: store i8 42, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000615// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
616
617TEST_CUSTOM(smallinit, smallinit, { 100 });
618// CHECK-LABEL: @test_smallinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000619// CHECK: %custom = alloca %struct.smallinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000620// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallinit, %struct.smallinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000621// CHECK-NEXT: store i8 100, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000622// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
623
624TEST_UNINIT(smallpartinit, smallpartinit);
625// CHECK-LABEL: @test_smallpartinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000626// CHECK: %uninit = alloca %struct.smallpartinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000627// CHECK-NEXT: call void @{{.*}}smallpartinit{{.*}}%uninit)
628// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000629// PATTERN-LABEL: @test_smallpartinit_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000630// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_smallpartinit_uninit.uninit
631// PATTERN-O1: store i8 -86, {{.*}} align 1
632// PATTERN-O1: store i8 42, {{.*}} align 1
JF Bastien14daa202018-12-18 05:12:21 +0000633// ZERO-LABEL: @test_smallpartinit_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000634// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
635// ZERO-O1: store i16 0, i16* %uninit, align 2
JF Bastienc70f65e2018-08-07 03:12:52 +0000636
637TEST_BRACES(smallpartinit, smallpartinit);
638// CHECK-LABEL: @test_smallpartinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000639// CHECK: %braces = alloca %struct.smallpartinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000640// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000641// CHECK-NEXT: store i8 42, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000642// CHECK-NEXT: %[[D:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000643// CHECK-NEXT: store i8 0, i8* %[[D]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000644// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
645
646TEST_CUSTOM(smallpartinit, smallpartinit, { 100, 42 });
647// CHECK-LABEL: @test_smallpartinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000648// CHECK: %custom = alloca %struct.smallpartinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000649// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000650// CHECK-NEXT: store i8 100, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000651// CHECK-NEXT: %[[D:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000652// CHECK-NEXT: store i8 42, i8* %[[D]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000653// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
654
655TEST_UNINIT(nullinit, nullinit);
656// CHECK-LABEL: @test_nullinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000657// CHECK: %uninit = alloca %struct.nullinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000658// CHECK-NEXT: call void @{{.*}}nullinit{{.*}}%uninit)
659// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
660
661TEST_BRACES(nullinit, nullinit);
662// CHECK-LABEL: @test_nullinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000663// CHECK: %braces = alloca %struct.nullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000664// CHECK-NEXT: %[[N:[^ ]*]] = getelementptr inbounds %struct.nullinit, %struct.nullinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000665// CHECK-NEXT: store i8* null, i8** %[[N]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000666// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
667
668TEST_CUSTOM(nullinit, nullinit, { (char*)"derp" });
669// CHECK-LABEL: @test_nullinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000670// CHECK: %custom = alloca %struct.nullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000671// CHECK-NEXT: %[[N:[^ ]*]] = getelementptr inbounds %struct.nullinit, %struct.nullinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000672// CHECK-NEXT: store i8* getelementptr inbounds {{.*}}, i8** %[[N]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000673// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
674
675TEST_UNINIT(padded, padded);
676// CHECK-LABEL: @test_padded_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000677// CHECK: %uninit = alloca %struct.padded, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000678// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000679// PATTERN-LABEL: @test_padded_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000680// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_padded_uninit.uninit
681// PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8
JF Bastien14daa202018-12-18 05:12:21 +0000682// ZERO-LABEL: @test_padded_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000683// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
684// ZERO-O1: store i64 0, i64* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000685
686TEST_BRACES(padded, padded);
687// CHECK-LABEL: @test_padded_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000688// CHECK: %braces = alloca %struct.padded, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000689// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000690// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000691// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
692
693TEST_CUSTOM(padded, padded, { 42, 13371337 });
694// CHECK-LABEL: @test_padded_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000695// CHECK: %custom = alloca %struct.padded, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000696// CHECK-NEXT: bitcast
697// CHECK-NEXT: call void @llvm.memcpy
698// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
699
700TEST_UNINIT(paddednullinit, paddednullinit);
701// CHECK-LABEL: @test_paddednullinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000702// CHECK: %uninit = alloca %struct.paddednullinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000703// CHECK-NEXT: call void @{{.*}}paddednullinit{{.*}}%uninit)
704// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000705// PATTERN-LABEL: @test_paddednullinit_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000706// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddednullinit_uninit.uninit
707// PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8
JF Bastien14daa202018-12-18 05:12:21 +0000708// ZERO-LABEL: @test_paddednullinit_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000709// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
710// ZERO-O1: store i64 0, i64* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000711
712TEST_BRACES(paddednullinit, paddednullinit);
713// CHECK-LABEL: @test_paddednullinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000714// CHECK: %braces = alloca %struct.paddednullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000715// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000716// CHECK-NEXT: store i8 0, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000717// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000718// CHECK-NEXT: store i32 0, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000719// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
720
721TEST_CUSTOM(paddednullinit, paddednullinit, { 42, 13371337 });
722// CHECK-LABEL: @test_paddednullinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000723// CHECK: %custom = alloca %struct.paddednullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000724// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000725// CHECK-NEXT: store i8 42, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000726// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000727// CHECK-NEXT: store i32 13371337, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000728// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
729
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000730TEST_UNINIT(paddedpacked, paddedpacked);
731// CHECK-LABEL: @test_paddedpacked_uninit()
732// CHECK: %uninit = alloca %struct.paddedpacked, align
733// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
734// PATTERN-LABEL: @test_paddedpacked_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000735// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpacked_uninit.uninit
736// PATTERN-O1: %[[C:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 0
737// PATTERN-O1 store i8 -86, i8* %[[C]], align
738// PATTERN-O1: %[[I:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 1
739// PATTERN-O1: store i32 -1431655766, i32* %[[I]], align
740
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000741// ZERO-LABEL: @test_paddedpacked_uninit()
742// ZERO: call void @llvm.memset{{.*}}, i8 0,
743
744TEST_BRACES(paddedpacked, paddedpacked);
745// CHECK-LABEL: @test_paddedpacked_braces()
746// CHECK: %braces = alloca %struct.paddedpacked, align [[ALIGN:[0-9]*]]
747// CHECK-NEXT: bitcast
748// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 5, i1 false)
749// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
750
751TEST_CUSTOM(paddedpacked, paddedpacked, { 42, 13371337 });
752// CHECK-LABEL: @test_paddedpacked_custom()
753// CHECK: %custom = alloca %struct.paddedpacked, align
754// CHECK-NEXT: bitcast
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000755// CHECK-NEXT: call void @llvm.memcpy{{.*}}({{.*}}@__const.test_paddedpacked_custom.custom
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000756// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
757
758TEST_UNINIT(paddedpackedarray, paddedpackedarray);
759// CHECK-LABEL: @test_paddedpackedarray_uninit()
760// CHECK: %uninit = alloca %struct.paddedpackedarray, align
761// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
762// PATTERN-LABEL: @test_paddedpackedarray_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000763// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpackedarray_uninit.uninit
764// PATTERN-O1: getelementptr
765// PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}i8 -86, i64 10
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000766// ZERO-LABEL: @test_paddedpackedarray_uninit()
767// ZERO: call void @llvm.memset{{.*}}, i8 0,
768
769TEST_BRACES(paddedpackedarray, paddedpackedarray);
770// CHECK-LABEL: @test_paddedpackedarray_braces()
771// CHECK: %braces = alloca %struct.paddedpackedarray, align [[ALIGN:[0-9]*]]
772// CHECK-NEXT: bitcast
773// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 10, i1 false)
774// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
775
776TEST_CUSTOM(paddedpackedarray, paddedpackedarray, { {{ 42, 13371337 }, { 43, 13371338 }} });
777// CHECK-LABEL: @test_paddedpackedarray_custom()
778// CHECK: %custom = alloca %struct.paddedpackedarray, align
779// CHECK-NEXT: bitcast
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000780// CHECK-NEXT: call void @llvm.memcpy{{.*}}({{.*}}@__const.test_paddedpackedarray_custom.custom
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000781// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
782
Peter Collingbourne68b46732019-03-16 19:25:39 +0000783TEST_UNINIT(unpackedinpacked, unpackedinpacked);
784// CHECK-LABEL: @test_unpackedinpacked_uninit()
785// PATTERN-O0: call void @llvm.memcpy{{.*}}, i64 9, i1 false)
786
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000787TEST_UNINIT(paddednested, paddednested);
788// CHECK-LABEL: @test_paddednested_uninit()
789// CHECK: %uninit = alloca %struct.paddednested, align
790// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
791// PATTERN-LABEL: @test_paddednested_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000792// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddednested_uninit.uninit
793// PATTERN-O1: getelementptr
794// PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}, i8 -86, i64 16
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000795// ZERO-LABEL: @test_paddednested_uninit()
796// ZERO: call void @llvm.memset{{.*}}, i8 0,
797
798TEST_BRACES(paddednested, paddednested);
799// CHECK-LABEL: @test_paddednested_braces()
800// CHECK: %braces = alloca %struct.paddednested, align [[ALIGN:[0-9]*]]
801// CHECK-NEXT: bitcast
802// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 16, i1 false)
803// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
804
805TEST_CUSTOM(paddednested, paddednested, { { 42, 13371337 }, { 43, 13371338 } });
806// CHECK-LABEL: @test_paddednested_custom()
807// CHECK: %custom = alloca %struct.paddednested, align
808// CHECK-NEXT: bitcast
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000809// CHECK-NEXT: call void @llvm.memcpy{{.*}}({{.*}}@__const.test_paddednested_custom.custom
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000810// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
811
812TEST_UNINIT(paddedpackednested, paddedpackednested);
813// CHECK-LABEL: @test_paddedpackednested_uninit()
814// CHECK: %uninit = alloca %struct.paddedpackednested, align
815// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
816// PATTERN-LABEL: @test_paddedpackednested_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000817// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpackednested_uninit.uninit
818// PATTERN-O1: getelementptr
819// PATTERN-O1: call void @llvm.memset.p0i8.i64(i8* nonnull align 1 %0, i8 -86, i64 10, i1 false
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000820// ZERO-LABEL: @test_paddedpackednested_uninit()
821// ZERO: call void @llvm.memset{{.*}}, i8 0,
822
823TEST_BRACES(paddedpackednested, paddedpackednested);
824// CHECK-LABEL: @test_paddedpackednested_braces()
825// CHECK: %braces = alloca %struct.paddedpackednested, align [[ALIGN:[0-9]*]]
826// CHECK-NEXT: bitcast
827// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 10, i1 false)
828// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
829
830TEST_CUSTOM(paddedpackednested, paddedpackednested, { { 42, 13371337 }, { 43, 13371338 } });
831// CHECK-LABEL: @test_paddedpackednested_custom()
832// CHECK: %custom = alloca %struct.paddedpackednested, align
833// CHECK-NEXT: bitcast
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000834// CHECK-NEXT: call void @llvm.memcpy{{.*}}({{.*}}@__const.test_paddedpackednested_custom.custom
Alexander Potapenko4f7bc0e2019-02-26 10:46:21 +0000835// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
836
JF Bastienc70f65e2018-08-07 03:12:52 +0000837TEST_UNINIT(bitfield, bitfield);
838// CHECK-LABEL: @test_bitfield_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000839// CHECK: %uninit = alloca %struct.bitfield, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000840// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000841// PATTERN-LABEL: @test_bitfield_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000842// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_bitfield_uninit.uninit
843// PATTERN-O1: store i32 -1431655766, i32* %uninit, align 4
JF Bastien14daa202018-12-18 05:12:21 +0000844// ZERO-LABEL: @test_bitfield_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000845// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
846// ZERO-O1: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000847
848TEST_BRACES(bitfield, bitfield);
849// CHECK-LABEL: @test_bitfield_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000850// CHECK: %braces = alloca %struct.bitfield, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000851// CHECK-NEXT: bitcast
852// CHECK-NEXT: call void @llvm.memcpy
853// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
854
855TEST_CUSTOM(bitfield, bitfield, { 4, 1 });
856// CHECK-LABEL: @test_bitfield_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000857// CHECK: %custom = alloca %struct.bitfield, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000858// CHECK-NEXT: bitcast
859// CHECK-NEXT: call void @llvm.memcpy
860// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
861
862TEST_UNINIT(bitfieldaligned, bitfieldaligned);
863// CHECK-LABEL: @test_bitfieldaligned_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000864// CHECK: %uninit = alloca %struct.bitfieldaligned, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000865// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000866// PATTERN-LABEL: @test_bitfieldaligned_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000867// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_bitfieldaligned_uninit.uninit
868// PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8
JF Bastien14daa202018-12-18 05:12:21 +0000869// ZERO-LABEL: @test_bitfieldaligned_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000870// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
871// ZERO-O1: store i64 0, i64* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000872
873TEST_BRACES(bitfieldaligned, bitfieldaligned);
874// CHECK-LABEL: @test_bitfieldaligned_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000875// CHECK: %braces = alloca %struct.bitfieldaligned, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000876// CHECK-NEXT: bitcast
877// CHECK-NEXT: call void @llvm.memcpy
878// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
879
880TEST_CUSTOM(bitfieldaligned, bitfieldaligned, { 4, 1 });
881// CHECK-LABEL: @test_bitfieldaligned_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000882// CHECK: %custom = alloca %struct.bitfieldaligned, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000883// CHECK-NEXT: bitcast
884// CHECK-NEXT: call void @llvm.memcpy
885// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
886
887TEST_UNINIT(big, big);
888// CHECK-LABEL: @test_big_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000889// CHECK: %uninit = alloca %struct.big, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000890// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000891// PATTERN-LABEL: @test_big_uninit()
892// PATTERN: call void @llvm.memset{{.*}}, i8 -86,
893// ZERO-LABEL: @test_big_uninit()
894// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000895
896TEST_BRACES(big, big);
897// CHECK-LABEL: @test_big_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000898// CHECK: %braces = alloca %struct.big, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000899// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000900// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 104, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000901// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
902
903TEST_CUSTOM(big, big, { 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA });
904// CHECK-LABEL: @test_big_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000905// CHECK: %custom = alloca %struct.big, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000906// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000907// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 -86, i64 104, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000908// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
909
910TEST_UNINIT(arraytail, arraytail);
911// CHECK-LABEL: @test_arraytail_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000912// CHECK: %uninit = alloca %struct.arraytail, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000913// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000914// PATTERN-LABEL: @test_arraytail_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000915// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_arraytail_uninit.uninit
916// PATTERN-O1: store i32 -1431655766, {{.*}} align 4
JF Bastien14daa202018-12-18 05:12:21 +0000917// ZERO-LABEL: @test_arraytail_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000918// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
919// ZERO-O1: store i32 0, {{.*}} align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000920
921TEST_BRACES(arraytail, arraytail);
922// CHECK-LABEL: @test_arraytail_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000923// CHECK: %braces = alloca %struct.arraytail, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000924// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000925// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000926// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
927
928TEST_CUSTOM(arraytail, arraytail, { 0xdead });
929// CHECK-LABEL: @test_arraytail_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000930// CHECK: %custom = alloca %struct.arraytail, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000931// CHECK-NEXT: bitcast
932// CHECK-NEXT: call void @llvm.memcpy
933// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
934
935
936TEST_UNINIT(int0, int[0]);
937// CHECK-LABEL: @test_int0_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000938// CHECK: %uninit = alloca [0 x i32], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000939// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000940// PATTERN-LABEL: @test_int0_uninit()
941// PATTERN: %uninit = alloca [0 x i32], align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000942// PATTERN-O0-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000943// ZERO-LABEL: @test_int0_uninit()
944// ZERO: %uninit = alloca [0 x i32], align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000945// ZERO-O0-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastienc70f65e2018-08-07 03:12:52 +0000946
947TEST_BRACES(int0, int[0]);
948// CHECK-LABEL: @test_int0_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000949// CHECK: %braces = alloca [0 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000950// CHECK-NEXT: bitcast
JF Bastienc70f65e2018-08-07 03:12:52 +0000951// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
952
953TEST_UNINIT(int1, int[1]);
954// CHECK-LABEL: @test_int1_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000955// CHECK: %uninit = alloca [1 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000956// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000957// PATTERN-LABEL: @test_int1_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000958// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_int1_uninit.uninit
959// PATTERN-O1: store i32 -1431655766, {{.*}} align 4
JF Bastien14daa202018-12-18 05:12:21 +0000960// ZERO-LABEL: @test_int1_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +0000961// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
962// ZERO-O1: store i32 0, {{.*}} align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000963
964TEST_BRACES(int1, int[1]);
965// CHECK-LABEL: @test_int1_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000966// CHECK: %braces = alloca [1 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000967// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000968// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000969// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
970
971TEST_CUSTOM(int1, int[1], { 0x33333333 });
972// CHECK-LABEL: @test_int1_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000973// CHECK: %custom = alloca [1 x i32], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000974// CHECK-NEXT: bitcast
975// CHECK-NEXT: call void @llvm.memcpy
976// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
977
978TEST_UNINIT(int64, int[64]);
979// CHECK-LABEL: @test_int64_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000980// CHECK: %uninit = alloca [64 x i32], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000981// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000982// PATTERN-LABEL: @test_int64_uninit()
983// PATTERN: call void @llvm.memset{{.*}}, i8 -86,
984// ZERO-LABEL: @test_int64_uninit()
985// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000986
987TEST_BRACES(int64, int[64]);
988// CHECK-LABEL: @test_int64_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000989// CHECK: %braces = alloca [64 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000990// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000991// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 256, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000992// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
993
994TEST_CUSTOM(int64, int[64], = { 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111 });
995// CHECK-LABEL: @test_int64_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000996// CHECK: %custom = alloca [64 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000997// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000998// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 17, i64 256, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000999// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1000
1001TEST_UNINIT(bool4, bool[4]);
1002// CHECK-LABEL: @test_bool4_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001003// CHECK: %uninit = alloca [4 x i8], align
JF Bastienc70f65e2018-08-07 03:12:52 +00001004// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001005// PATTERN-LABEL: @test_bool4_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001006// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_bool4_uninit.uninit
1007// PATTERN-O1: store i32 -1431655766, i32* %uninit, align 4
JF Bastien14daa202018-12-18 05:12:21 +00001008// ZERO-LABEL: @test_bool4_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001009// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1010// ZERO-O1: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001011
1012TEST_BRACES(bool4, bool[4]);
1013// CHECK-LABEL: @test_bool4_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001014// CHECK: %braces = alloca [4 x i8], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001015// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001016// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001017// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1018
1019TEST_CUSTOM(bool4, bool[4], { true, true, true, true });
1020// CHECK-LABEL: @test_bool4_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001021// CHECK: %custom = alloca [4 x i8], align
JF Bastienc70f65e2018-08-07 03:12:52 +00001022// CHECK-NEXT: bitcast
1023// CHECK-NEXT: call void @llvm.memcpy
1024// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1025
1026TEST_UNINIT(intptr4, int*[4]);
JF Bastienb5e5bc72019-03-08 01:26:49 +00001027// CHECK-LABEL: @test_intptr4_uninit()
1028// CHECK: %uninit = alloca [4 x i32*], align
1029// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
1030// PATTERN-O1-LABEL: @test_intptr4_uninit()
1031// PATTERN-O1: %1 = getelementptr inbounds [4 x i32*], [4 x i32*]* %uninit, i64 0, i64 0
1032// PATTERN-O1-NEXT: store i32* inttoptr (i64 -6148914691236517206 to i32*), i32** %1, align 16
1033// PATTERN-O1-NEXT: %2 = getelementptr inbounds [4 x i32*], [4 x i32*]* %uninit, i64 0, i64 1
1034// PATTERN-O1-NEXT: store i32* inttoptr (i64 -6148914691236517206 to i32*), i32** %2, align 8
1035// PATTERN-O1-NEXT: %3 = getelementptr inbounds [4 x i32*], [4 x i32*]* %uninit, i64 0, i64 2
1036// PATTERN-O1-NEXT: store i32* inttoptr (i64 -6148914691236517206 to i32*), i32** %3, align 16
1037// PATTERN-O1-NEXT: %4 = getelementptr inbounds [4 x i32*], [4 x i32*]* %uninit, i64 0, i64 3
1038// PATTERN-O1-NEXT: store i32* inttoptr (i64 -6148914691236517206 to i32*), i32** %4, align 8
1039// ZERO-LABEL: @test_intptr4_uninit()
1040// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001041
1042TEST_BRACES(intptr4, int*[4]);
1043// CHECK-LABEL: @test_intptr4_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001044// CHECK: %braces = alloca [4 x i32*], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001045// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001046// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 32, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001047// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1048
1049 TEST_CUSTOM(intptr4, int*[4], = { (int*)0x22222222, (int*)0x22222222, (int*)0x22222222, (int*)0x22222222 });
1050// CHECK-LABEL: @test_intptr4_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001051// CHECK: %custom = alloca [4 x i32*], align
JF Bastienc70f65e2018-08-07 03:12:52 +00001052// CHECK-NEXT: bitcast
1053// CHECK-NEXT: call void @llvm.memcpy
1054// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1055
1056TEST_UNINIT(tailpad4, tailpad[4]);
1057// CHECK-LABEL: @test_tailpad4_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001058// CHECK: %uninit = alloca [4 x %struct.tailpad], align
JF Bastienc70f65e2018-08-07 03:12:52 +00001059// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001060// PATTERN-LABEL: @test_tailpad4_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001061// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_tailpad4_uninit.uninit
1062// PATTERN-O1: bitcast
1063// PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}0, i8 -86, i64 16
JF Bastien14daa202018-12-18 05:12:21 +00001064// ZERO-LABEL: @test_tailpad4_uninit()
1065// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001066
1067TEST_BRACES(tailpad4, tailpad[4]);
1068// CHECK-LABEL: @test_tailpad4_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001069// CHECK: %braces = alloca [4 x %struct.tailpad], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001070// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001071// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 16, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001072// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1073
JF Bastienfe2ea822018-08-08 17:05:17 +00001074TEST_CUSTOM(tailpad4, tailpad[4], { {257, 1}, {257, 1}, {257, 1}, {257, 1} });
JF Bastienc70f65e2018-08-07 03:12:52 +00001075// CHECK-LABEL: @test_tailpad4_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001076// CHECK: %custom = alloca [4 x %struct.tailpad], align
JF Bastienc70f65e2018-08-07 03:12:52 +00001077// CHECK-NEXT: bitcast
1078// CHECK-NEXT: call void @llvm.memcpy
1079// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1080
JF Bastienfe2ea822018-08-08 17:05:17 +00001081TEST_UNINIT(tailpad9, tailpad[9]);
1082// CHECK-LABEL: @test_tailpad9_uninit()
1083// CHECK: %uninit = alloca [9 x %struct.tailpad], align
1084// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001085// PATTERN-LABEL: @test_tailpad9_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001086// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86,
JF Bastien14daa202018-12-18 05:12:21 +00001087// ZERO-LABEL: @test_tailpad9_uninit()
1088// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienfe2ea822018-08-08 17:05:17 +00001089
1090TEST_BRACES(tailpad9, tailpad[9]);
1091// CHECK-LABEL: @test_tailpad9_braces()
1092// CHECK: %braces = alloca [9 x %struct.tailpad], align [[ALIGN:[0-9]*]]
1093// CHECK-NEXT: bitcast
1094// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 36, i1 false)
1095// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1096
1097TEST_CUSTOM(tailpad9, tailpad[9], { {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1} });
1098// CHECK-LABEL: @test_tailpad9_custom()
1099// CHECK: %custom = alloca [9 x %struct.tailpad], align [[ALIGN:[0-9]*]]
1100// CHECK-NEXT: bitcast
1101// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 1, i64 36, i1 false)
1102// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1103
JF Bastienc70f65e2018-08-07 03:12:52 +00001104
1105TEST_UNINIT(atomicbool, _Atomic(bool));
1106// CHECK-LABEL: @test_atomicbool_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001107// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001108// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001109// PATTERN-LABEL: @test_atomicbool_uninit()
1110// PATTERN: store i8 -86, i8* %uninit, align 1
1111// ZERO-LABEL: @test_atomicbool_uninit()
1112// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +00001113
1114TEST_UNINIT(atomicint, _Atomic(int));
1115// CHECK-LABEL: @test_atomicint_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001116// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001117// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001118// PATTERN-LABEL: @test_atomicint_uninit()
1119// PATTERN: store i32 -1431655766, i32* %uninit, align 4
1120// ZERO-LABEL: @test_atomicint_uninit()
1121// ZERO: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001122
1123TEST_UNINIT(atomicdouble, _Atomic(double));
1124// CHECK-LABEL: @test_atomicdouble_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001125// CHECK: %uninit = alloca double, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001126// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001127// PATTERN-LABEL: @test_atomicdouble_uninit()
1128// PATTERN: store double 0xFFFFFFFFFFFFFFFF, double* %uninit, align 8
1129// ZERO-LABEL: @test_atomicdouble_uninit()
1130// ZERO: store double 0.000000e+00, double* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001131
1132TEST_UNINIT(atomicnotlockfree, _Atomic(notlockfree));
1133// CHECK-LABEL: @test_atomicnotlockfree_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001134// CHECK: %uninit = alloca %struct.notlockfree, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001135// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001136// PATTERN-LABEL: @test_atomicnotlockfree_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001137// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomicnotlockfree_uninit.uninit
1138// PATTERN-O1: bitcast
JF Bastienb5e5bc72019-03-08 01:26:49 +00001139// PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}, i8 -86, i64 32
JF Bastien14daa202018-12-18 05:12:21 +00001140// ZERO-LABEL: @test_atomicnotlockfree_uninit()
1141// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001142
1143TEST_UNINIT(atomicpadded, _Atomic(padded));
1144// CHECK-LABEL: @test_atomicpadded_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001145// CHECK: %uninit = alloca %struct.padded, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001146// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001147// PATTERN-LABEL: @test_atomicpadded_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001148// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomicpadded_uninit.uninit
1149// PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8
JF Bastien14daa202018-12-18 05:12:21 +00001150// ZERO-LABEL: @test_atomicpadded_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001151// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1152// ZERO-O1: store i64 0, i64* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001153
1154TEST_UNINIT(atomictailpad, _Atomic(tailpad));
1155// CHECK-LABEL: @test_atomictailpad_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001156// CHECK: %uninit = alloca %struct.tailpad, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001157// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001158// PATTERN-LABEL: @test_atomictailpad_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001159// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomictailpad_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001160// ZERO-LABEL: @test_atomictailpad_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001161// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1162// ZERO-O1: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001163
1164TEST_UNINIT(complexfloat, _Complex float);
1165// CHECK-LABEL: @test_complexfloat_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001166// CHECK: %uninit = alloca { float, float }, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001167// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001168// PATTERN-LABEL: @test_complexfloat_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001169// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_complexfloat_uninit.uninit
1170// PATTERN-O1: %[[F1:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 0
1171// PATTERN-O1 store float 0xFFFFFFFFE0000000, float* %[[F1]], align
1172// PATTERN-O1: %[[F2:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 1
1173// PATTERN-O1: store float 0xFFFFFFFFE0000000, float* %[[F2]], align
1174
JF Bastien14daa202018-12-18 05:12:21 +00001175// ZERO-LABEL: @test_complexfloat_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001176// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1177// ZERO-O1: store i64 0, i64* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001178
1179TEST_BRACES(complexfloat, _Complex float);
1180// CHECK-LABEL: @test_complexfloat_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001181// CHECK: %braces = alloca { float, float }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001182// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %braces, i32 0, i32 0
1183// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001184// CHECK-NEXT: store float 0.000000e+00, float* %[[R]], align [[ALIGN]]
1185// CHECK-NEXT: store float 0.000000e+00, float* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001186// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1187
1188TEST_CUSTOM(complexfloat, _Complex float, { 3.1415926535897932384626433, 3.1415926535897932384626433 });
1189// CHECK-LABEL: @test_complexfloat_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001190// CHECK: %custom = alloca { float, float }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001191// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %custom, i32 0, i32 0
1192// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001193// CHECK-NEXT: store float 0x400921FB60000000, float* %[[R]], align [[ALIGN]]
1194// CHECK-NEXT: store float 0x400921FB60000000, float* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001195// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1196
1197TEST_UNINIT(complexdouble, _Complex double);
1198// CHECK-LABEL: @test_complexdouble_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001199// CHECK: %uninit = alloca { double, double }, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001200// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001201// PATTERN-LABEL: @test_complexdouble_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001202// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_complexdouble_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001203// ZERO-LABEL: @test_complexdouble_uninit()
1204// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001205
1206TEST_BRACES(complexdouble, _Complex double);
1207// CHECK-LABEL: @test_complexdouble_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001208// CHECK: %braces = alloca { double, double }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001209// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %braces, i32 0, i32 0
1210// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001211// CHECK-NEXT: store double 0.000000e+00, double* %[[R]], align [[ALIGN]]
1212// CHECK-NEXT: store double 0.000000e+00, double* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001213// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1214
1215TEST_CUSTOM(complexdouble, _Complex double, { 3.1415926535897932384626433, 3.1415926535897932384626433 });
1216// CHECK-LABEL: @test_complexdouble_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001217// CHECK: %custom = alloca { double, double }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001218// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %custom, i32 0, i32 0
1219// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001220// CHECK-NEXT: store double 0x400921FB54442D18, double* %[[R]], align [[ALIGN]]
1221// CHECK-NEXT: store double 0x400921FB54442D18, double* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001222// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1223
1224
1225TEST_UNINIT(volatileint, volatile int);
1226// CHECK-LABEL: @test_volatileint_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001227// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001228// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001229// PATTERN-LABEL: @test_volatileint_uninit()
1230// PATTERN: store volatile i32 -1431655766, i32* %uninit, align 4
1231// ZERO-LABEL: @test_volatileint_uninit()
1232// ZERO: store volatile i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001233
1234TEST_BRACES(volatileint, volatile int);
1235// CHECK-LABEL: @test_volatileint_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001236// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
1237// CHECK-NEXT: store volatile i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001238// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1239
1240TEST_UNINIT(semivolatile, semivolatile);
1241// CHECK-LABEL: @test_semivolatile_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001242// CHECK: %uninit = alloca %struct.semivolatile, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001243// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001244// PATTERN-LABEL: @test_semivolatile_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001245// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_semivolatile_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001246// ZERO-LABEL: @test_semivolatile_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001247// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1248// ZERO-O1: store i64 0, i64* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001249
1250TEST_BRACES(semivolatile, semivolatile);
1251// CHECK-LABEL: @test_semivolatile_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001252// CHECK: %braces = alloca %struct.semivolatile, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001253// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001254// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001255// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1256
1257TEST_CUSTOM(semivolatile, semivolatile, { 0x44444444, 0x44444444 });
1258// CHECK-LABEL: @test_semivolatile_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001259// CHECK: %custom = alloca %struct.semivolatile, align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001260// CHECK-O0: bitcast
1261// CHECK-O0: call void @llvm.memcpy
1262// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1263// CHECK-O1: store i64 4919131752989213764, i64* %custom, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001264
1265TEST_UNINIT(semivolatileinit, semivolatileinit);
1266// CHECK-LABEL: @test_semivolatileinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001267// CHECK: %uninit = alloca %struct.semivolatileinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001268// CHECK-NEXT: call void @{{.*}}semivolatileinit{{.*}}%uninit)
1269// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
1270
1271TEST_BRACES(semivolatileinit, semivolatileinit);
1272// CHECK-LABEL: @test_semivolatileinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001273// CHECK: %braces = alloca %struct.semivolatileinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001274// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +00001275// CHECK-NEXT: store i32 286331153, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001276// CHECK-NEXT: %[[VI:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001277// CHECK-NEXT: store volatile i32 286331153, i32* %[[VI]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001278// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1279
1280TEST_CUSTOM(semivolatileinit, semivolatileinit, { 0x44444444, 0x44444444 });
1281// CHECK-LABEL: @test_semivolatileinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001282// CHECK: %custom = alloca %struct.semivolatileinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001283// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +00001284// CHECK-NEXT: store i32 1145324612, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001285// CHECK-NEXT: %[[VI:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001286// CHECK-NEXT: store volatile i32 1145324612, i32* %[[VI]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001287// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1288
1289
1290TEST_UNINIT(base, base);
1291// CHECK-LABEL: @test_base_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001292// CHECK: %uninit = alloca %struct.base, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001293// CHECK-NEXT: call void @{{.*}}base{{.*}}%uninit)
1294// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001295// PATTERN-LABEL: @test_base_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001296// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_base_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001297// ZERO-LABEL: @test_base_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001298// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1299// ZERO-O1: store i64 0, {{.*}} align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001300
1301TEST_BRACES(base, base);
1302// CHECK-LABEL: @test_base_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001303// CHECK: %braces = alloca %struct.base, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001304// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001305// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001306// CHECK-NEXT: call void @{{.*}}base{{.*}}%braces)
1307// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1308
1309TEST_UNINIT(derived, derived);
1310// CHECK-LABEL: @test_derived_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001311// CHECK: %uninit = alloca %struct.derived, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001312// CHECK-NEXT: call void @{{.*}}derived{{.*}}%uninit)
1313// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001314// PATTERN-LABEL: @test_derived_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001315// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_derived_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001316// ZERO-LABEL: @test_derived_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001317// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1318// ZERO-O1: store i64 0, {{.*}} align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001319
1320TEST_BRACES(derived, derived);
1321// CHECK-LABEL: @test_derived_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001322// CHECK: %braces = alloca %struct.derived, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001323// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001324// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001325// CHECK-NEXT: call void @{{.*}}derived{{.*}}%braces)
1326// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1327
1328TEST_UNINIT(virtualderived, virtualderived);
1329// CHECK-LABEL: @test_virtualderived_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001330// CHECK: %uninit = alloca %struct.virtualderived, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001331// CHECK-NEXT: call void @{{.*}}virtualderived{{.*}}%uninit)
1332// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001333// PATTERN-LABEL: @test_virtualderived_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001334// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_virtualderived_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001335// ZERO-LABEL: @test_virtualderived_uninit()
1336// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001337
1338TEST_BRACES(virtualderived, virtualderived);
1339// CHECK-LABEL: @test_virtualderived_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001340// CHECK: %braces = alloca %struct.virtualderived, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001341// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001342// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 16, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001343// CHECK-NEXT: call void @{{.*}}virtualderived{{.*}}%braces)
1344// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1345
1346
1347TEST_UNINIT(matching, matching);
1348// CHECK-LABEL: @test_matching_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001349// CHECK: %uninit = alloca %union.matching, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001350// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001351// PATTERN-LABEL: @test_matching_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001352// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_matching_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001353// ZERO-LABEL: @test_matching_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001354// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1355// ZERO-O1: store i32 0, {{.*}} align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001356
1357TEST_BRACES(matching, matching);
1358// CHECK-LABEL: @test_matching_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001359// CHECK: %braces = alloca %union.matching, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001360// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001361// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001362// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1363
1364TEST_CUSTOM(matching, matching, { .f = 0xf00f });
1365// CHECK-LABEL: @test_matching_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001366// CHECK: %custom = alloca %union.matching, align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001367// CHECK-O0: bitcast
1368// CHECK-O0: call void @llvm.memcpy
1369// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1370// CHECK-O1: getelementptr
1371// CHECK-O1: store i32 1198526208, i32* {{.*}}, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001372
1373TEST_UNINIT(matchingreverse, matchingreverse);
1374// CHECK-LABEL: @test_matchingreverse_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001375// CHECK: %uninit = alloca %union.matchingreverse, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001376// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001377// PATTERN-LABEL: @test_matchingreverse_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001378// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_matchingreverse_uninit.uninit
1379// PATTERN-O1: store float 0xFFFFFFFFE0000000
JF Bastien14daa202018-12-18 05:12:21 +00001380// ZERO-LABEL: @test_matchingreverse_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001381// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1382// ZERO-O1: store i32 0, {{.*}} align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001383
1384TEST_BRACES(matchingreverse, matchingreverse);
1385// CHECK-LABEL: @test_matchingreverse_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001386// CHECK: %braces = alloca %union.matchingreverse, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001387// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001388// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001389// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1390
1391TEST_CUSTOM(matchingreverse, matchingreverse, { .i = 0xf00f });
1392// CHECK-LABEL: @test_matchingreverse_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001393// CHECK: %custom = alloca %union.matchingreverse, align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001394// CHECK-O0: bitcast
1395// CHECK-O0: call void @llvm.memcpy
1396// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1397// CHECK-O1: store i32 61455, i32* %1, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001398
1399TEST_UNINIT(unmatched, unmatched);
1400// CHECK-LABEL: @test_unmatched_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001401// CHECK: %uninit = alloca %union.unmatched, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001402// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001403// PATTERN-LABEL: @test_unmatched_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001404// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_unmatched_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001405// ZERO-LABEL: @test_unmatched_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001406// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1407// ZERO-O1: store i32 0, {{.*}} align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001408
1409TEST_BRACES(unmatched, unmatched);
1410// CHECK-LABEL: @test_unmatched_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001411// CHECK: %braces = alloca %union.unmatched, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001412// CHECK-NEXT: bitcast
1413// CHECK-NEXT: call void @llvm.memcpy
1414// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1415
1416TEST_CUSTOM(unmatched, unmatched, { .i = 0x3badbeef });
1417// CHECK-LABEL: @test_unmatched_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001418// CHECK: %custom = alloca %union.unmatched, align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001419// CHECK-O0: bitcast
1420// CHECK-O0: call void @llvm.memcpy
1421// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1422// CHECK-O1: store i32 1001242351, i32* {{.*}}, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001423
1424TEST_UNINIT(unmatchedreverse, unmatchedreverse);
1425// CHECK-LABEL: @test_unmatchedreverse_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001426// CHECK: %uninit = alloca %union.unmatchedreverse, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001427// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001428// PATTERN-LABEL: @test_unmatchedreverse_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001429// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_unmatchedreverse_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001430// ZERO-LABEL: @test_unmatchedreverse_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001431// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1432// ZERO-O1: store i32 0, {{.*}} align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001433
1434TEST_BRACES(unmatchedreverse, unmatchedreverse);
1435// CHECK-LABEL: @test_unmatchedreverse_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001436// CHECK: %braces = alloca %union.unmatchedreverse, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001437// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001438// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001439// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1440
1441TEST_CUSTOM(unmatchedreverse, unmatchedreverse, { .c = 42 });
1442// CHECK-LABEL: @test_unmatchedreverse_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001443// CHECK: %custom = alloca %union.unmatchedreverse, align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001444// CHECK-O0: bitcast
1445// CHECK-O0: call void @llvm.memcpy
1446// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1447// PATTERN-O1: store i32 -1431655894, i32* {{.*}}, align 4
1448// ZERO-O1: store i32 42, i32* {{.*}}, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001449
1450TEST_UNINIT(unmatchedfp, unmatchedfp);
1451// CHECK-LABEL: @test_unmatchedfp_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001452// CHECK: %uninit = alloca %union.unmatchedfp, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001453// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001454// PATTERN-LABEL: @test_unmatchedfp_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001455// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_unmatchedfp_uninit.uninit
JF Bastien14daa202018-12-18 05:12:21 +00001456// ZERO-LABEL: @test_unmatchedfp_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001457// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,
1458// ZERO-O1: store i64 0, {{.*}} align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001459
1460TEST_BRACES(unmatchedfp, unmatchedfp);
1461// CHECK-LABEL: @test_unmatchedfp_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001462// CHECK: %braces = alloca %union.unmatchedfp, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001463// CHECK-NEXT: bitcast
1464// CHECK-NEXT: call void @llvm.memcpy
1465// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1466
1467TEST_CUSTOM(unmatchedfp, unmatchedfp, { .d = 3.1415926535897932384626433 });
1468// CHECK-LABEL: @test_unmatchedfp_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001469// CHECK: %custom = alloca %union.unmatchedfp, align
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001470// CHECK-O0: bitcast
1471// CHECK-O0: call void @llvm.memcpy
1472// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1473// CHECK-O1: store i64 4614256656552045848, i64* %1, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +00001474
1475TEST_UNINIT(emptyenum, emptyenum);
1476// CHECK-LABEL: @test_emptyenum_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001477// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001478// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001479// PATTERN-LABEL: @test_emptyenum_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001480// PATTERN: store i32 -1431655766, i32* %uninit, align 4
JF Bastien14daa202018-12-18 05:12:21 +00001481// ZERO-LABEL: @test_emptyenum_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001482// ZERO: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001483
1484TEST_BRACES(emptyenum, emptyenum);
1485// CHECK-LABEL: @test_emptyenum_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001486// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
1487// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001488// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1489
1490TEST_CUSTOM(emptyenum, emptyenum, { (emptyenum)42 });
1491// CHECK-LABEL: @test_emptyenum_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001492// CHECK: %custom = alloca i32, align [[ALIGN:[0-9]*]]
1493// CHECK-NEXT: store i32 42, i32* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001494// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1495
1496TEST_UNINIT(smallenum, smallenum);
1497// CHECK-LABEL: @test_smallenum_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001498// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001499// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001500// PATTERN-LABEL: @test_smallenum_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001501// PATTERN: store i32 -1431655766, i32* %uninit, align 4
JF Bastien14daa202018-12-18 05:12:21 +00001502// ZERO-LABEL: @test_smallenum_uninit()
Alexander Potapenkofa61ddd2019-03-01 09:00:41 +00001503// ZERO: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001504
1505TEST_BRACES(smallenum, smallenum);
1506// CHECK-LABEL: @test_smallenum_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001507// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
1508// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001509// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1510
1511TEST_CUSTOM(smallenum, smallenum, { (smallenum)42 });
1512// CHECK-LABEL: @test_smallenum_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001513// CHECK: %custom = alloca i32, align [[ALIGN:[0-9]*]]
1514// CHECK-NEXT: store i32 42, i32* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001515// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1516
1517
1518TEST_UNINIT(intvec16, int __attribute__((vector_size(16))));
1519// CHECK-LABEL: @test_intvec16_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001520// CHECK: %uninit = alloca <4 x i32>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001521// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001522// PATTERN-LABEL: @test_intvec16_uninit()
1523// PATTERN: store <4 x i32> <i32 -1431655766, i32 -1431655766, i32 -1431655766, i32 -1431655766>, <4 x i32>* %uninit, align 16
1524// ZERO-LABEL: @test_intvec16_uninit()
1525// ZERO: store <4 x i32> zeroinitializer, <4 x i32>* %uninit, align 16
JF Bastienc70f65e2018-08-07 03:12:52 +00001526
1527TEST_BRACES(intvec16, int __attribute__((vector_size(16))));
1528// CHECK-LABEL: @test_intvec16_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001529// CHECK: %braces = alloca <4 x i32>, align [[ALIGN:[0-9]*]]
1530// CHECK-NEXT: store <4 x i32> zeroinitializer, <4 x i32>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001531// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1532
JF Bastien14daa202018-12-18 05:12:21 +00001533TEST_CUSTOM(intvec16, int __attribute__((vector_size(16))), { 0x44444444, 0x44444444, 0x44444444, 0x44444444 });
JF Bastienc70f65e2018-08-07 03:12:52 +00001534// CHECK-LABEL: @test_intvec16_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001535// CHECK: %custom = alloca <4 x i32>, align [[ALIGN:[0-9]*]]
1536// CHECK-NEXT: store <4 x i32> <i32 1145324612, i32 1145324612, i32 1145324612, i32 1145324612>, <4 x i32>* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001537// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1538
1539TEST_UNINIT(longlongvec32, long long __attribute__((vector_size(32))));
1540// CHECK-LABEL: @test_longlongvec32_uninit()
JF Bastien81377932018-08-07 04:44:13 +00001541// CHECK: %uninit = alloca <4 x i64>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001542// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001543// PATTERN-LABEL: @test_longlongvec32_uninit()
1544// PATTERN: store <4 x i64> <i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206>, <4 x i64>* %uninit, align 32
1545// ZERO-LABEL: @test_longlongvec32_uninit()
1546// ZERO: store <4 x i64> zeroinitializer, <4 x i64>* %uninit, align 32
JF Bastienc70f65e2018-08-07 03:12:52 +00001547
1548TEST_BRACES(longlongvec32, long long __attribute__((vector_size(32))));
1549// CHECK-LABEL: @test_longlongvec32_braces()
JF Bastien81377932018-08-07 04:44:13 +00001550// CHECK: %braces = alloca <4 x i64>, align [[ALIGN:[0-9]*]]
1551// CHECK-NEXT: store <4 x i64> zeroinitializer, <4 x i64>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001552// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1553
1554TEST_CUSTOM(longlongvec32, long long __attribute__((vector_size(32))), { 0x3333333333333333, 0x3333333333333333, 0x3333333333333333, 0x3333333333333333 });
1555// CHECK-LABEL: @test_longlongvec32_custom()
JF Bastien81377932018-08-07 04:44:13 +00001556// CHECK: %custom = alloca <4 x i64>, align [[ALIGN:[0-9]*]]
1557// CHECK-NEXT: store <4 x i64> <i64 3689348814741910323, i64 3689348814741910323, i64 3689348814741910323, i64 3689348814741910323>, <4 x i64>* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001558// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1559
1560TEST_UNINIT(floatvec16, float __attribute__((vector_size(16))));
1561// CHECK-LABEL: @test_floatvec16_uninit()
JF Bastien81377932018-08-07 04:44:13 +00001562// CHECK: %uninit = alloca <4 x float>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001563// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001564// PATTERN-LABEL: @test_floatvec16_uninit()
1565// PATTERN: store <4 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000>, <4 x float>* %uninit, align 16
1566// ZERO-LABEL: @test_floatvec16_uninit()
1567// ZERO: store <4 x float> zeroinitializer, <4 x float>* %uninit, align 16
JF Bastienc70f65e2018-08-07 03:12:52 +00001568
1569TEST_BRACES(floatvec16, float __attribute__((vector_size(16))));
1570// CHECK-LABEL: @test_floatvec16_braces()
JF Bastien81377932018-08-07 04:44:13 +00001571// CHECK: %braces = alloca <4 x float>, align [[ALIGN:[0-9]*]]
1572// CHECK-NEXT: store <4 x float> zeroinitializer, <4 x float>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001573// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1574
1575TEST_CUSTOM(floatvec16, float __attribute__((vector_size(16))), { 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433 });
1576// CHECK-LABEL: @test_floatvec16_custom()
JF Bastien81377932018-08-07 04:44:13 +00001577// CHECK: %custom = alloca <4 x float>, align [[ALIGN:[0-9]*]]
1578// CHECK-NEXT: store <4 x float> <float 0x400921FB60000000, float 0x400921FB60000000, float 0x400921FB60000000, float 0x400921FB60000000>, <4 x float>* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001579// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1580
1581TEST_UNINIT(doublevec32, double __attribute__((vector_size(32))));
1582// CHECK-LABEL: @test_doublevec32_uninit()
JF Bastien81377932018-08-07 04:44:13 +00001583// CHECK: %uninit = alloca <4 x double>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001584// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001585// PATTERN-LABEL: @test_doublevec32_uninit()
1586// PATTERN: store <4 x double> <double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF>, <4 x double>* %uninit, align 32
1587// ZERO-LABEL: @test_doublevec32_uninit()
1588// ZERO: store <4 x double> zeroinitializer, <4 x double>* %uninit, align 32
JF Bastienc70f65e2018-08-07 03:12:52 +00001589
1590TEST_BRACES(doublevec32, double __attribute__((vector_size(32))));
1591// CHECK-LABEL: @test_doublevec32_braces()
JF Bastien81377932018-08-07 04:44:13 +00001592// CHECK: %braces = alloca <4 x double>, align [[ALIGN:[0-9]*]]
1593// CHECK-NEXT: store <4 x double> zeroinitializer, <4 x double>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001594// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1595
1596TEST_CUSTOM(doublevec32, double __attribute__((vector_size(32))), { 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433 });
1597// CHECK-LABEL: @test_doublevec32_custom()
JF Bastien81377932018-08-07 04:44:13 +00001598// CHECK: %custom = alloca <4 x double>, align [[ALIGN:[0-9]*]]
1599// CHECK-NEXT: store <4 x double> <double 0x400921FB54442D18, double 0x400921FB54442D18, double 0x400921FB54442D18, double 0x400921FB54442D18>, <4 x double>* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001600// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1601
1602
1603} // extern "C"