blob: 0d13c0af4e8f9b4417c47e17cf3d95ec73c2f351 [file] [log] [blame]
JF Bastien1b222ce2018-08-07 04:03:03 +00001// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fblocks %s -emit-llvm -o - | FileCheck %s
JF Bastien14daa202018-12-18 05:12:21 +00002// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=pattern %s -emit-llvm -o - | FileCheck %s -check-prefix=PATTERN
3// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=zero %s -emit-llvm -o - | FileCheck %s -check-prefix=ZERO
JF Bastienc70f65e2018-08-07 03:12:52 +00004
5template<typename T> void used(T &) noexcept;
6
7#define TEST_UNINIT(NAME, TYPE) \
8 using type_##NAME = TYPE; \
9 void test_##NAME##_uninit() { \
10 type_##NAME uninit; \
11 used(uninit); \
12 }
13
14// Value initialization on scalars, aggregate initialization on aggregates.
15#define TEST_BRACES(NAME, TYPE) \
16 using type_##NAME = TYPE; \
17 void test_##NAME##_braces() { \
18 type_##NAME braces = {}; \
19 used(braces); \
20 }
21
22#define TEST_CUSTOM(NAME, TYPE, ...) \
23 using type_##NAME = TYPE; \
24 void test_##NAME##_custom() { \
25 type_##NAME custom __VA_ARGS__; \
26 used(custom); \
27 }
28
JF Bastien14daa202018-12-18 05:12:21 +000029// None of the synthesized globals should contain `undef`.
30// PATTERN-NOT: undef
31// ZERO-NOT: undef
32
33// PATTERN: @__const.test_empty_uninit.uninit = private unnamed_addr constant %struct.empty { i8 -86 }, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +000034struct empty {};
JF Bastien14daa202018-12-18 05:12:21 +000035// PATTERN: @__const.test_small_uninit.uninit = private unnamed_addr constant %struct.small { i8 -86 }, align 1
36// PATTERN: @__const.test_small_custom.custom = private unnamed_addr constant %struct.small { i8 42 }, align 1
37// ZERO: @__const.test_small_custom.custom = private unnamed_addr constant %struct.small { i8 42 }, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +000038struct small { char c; };
JF Bastien14daa202018-12-18 05:12:21 +000039// PATTERN: @__const.test_smallinit_uninit.uninit = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1
40// PATTERN: @__const.test_smallinit_braces.braces = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1
41// PATTERN: @__const.test_smallinit_custom.custom = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +000042struct smallinit { char c = 42; };
JF Bastien14daa202018-12-18 05:12:21 +000043// PATTERN: @__const.test_smallpartinit_uninit.uninit = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1
44// PATTERN: @__const.test_smallpartinit_braces.braces = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1
45// PATTERN: @__const.test_smallpartinit_custom.custom = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +000046struct smallpartinit { char c = 42, d; };
JF Bastien14daa202018-12-18 05:12:21 +000047// PATTERN: @__const.test_nullinit_uninit.uninit = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8
48// PATTERN: @__const.test_nullinit_braces.braces = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8
49// PATTERN: @__const.test_nullinit_custom.custom = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +000050struct nullinit { char* null = nullptr; };
JF Bastien14daa202018-12-18 05:12:21 +000051// PATTERN: @__const.test_padded_uninit.uninit = private unnamed_addr constant %struct.padded { i8 -86, i32 -1431655766 }, align 4
52// PATTERN: @__const.test_padded_custom.custom = private unnamed_addr constant %struct.padded { i8 42, i32 13371337 }, align 4
53// ZERO: @__const.test_padded_custom.custom = private unnamed_addr constant %struct.padded { i8 42, i32 13371337 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +000054struct padded { char c; int i; };
JF Bastien14daa202018-12-18 05:12:21 +000055// PATTERN: @__const.test_paddednullinit_uninit.uninit = private unnamed_addr constant %struct.paddednullinit { i8 -86, i32 -1431655766 }, align 4
56// PATTERN: @__const.test_paddednullinit_braces.braces = private unnamed_addr constant %struct.paddednullinit { i8 -86, i32 -1431655766 }, align 4
57// PATTERN: @__const.test_paddednullinit_custom.custom = private unnamed_addr constant %struct.paddednullinit { i8 -86, i32 -1431655766 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +000058struct paddednullinit { char c = 0; int i = 0; };
JF Bastien14daa202018-12-18 05:12:21 +000059// PATTERN: @__const.test_bitfield_uninit.uninit = private unnamed_addr constant %struct.bitfield { i8 -86, [3 x i8] c"\AA\AA\AA" }, align 4
60// PATTERN: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] zeroinitializer }, align 4
61// ZERO: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] zeroinitializer }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +000062struct bitfield { int i : 4; int j : 2; };
JF Bastien14daa202018-12-18 05:12:21 +000063// PATTERN: @__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
64// PATTERN: @__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
65// ZERO: @__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
JF Bastienc70f65e2018-08-07 03:12:52 +000066struct bitfieldaligned { int i : 4; int : 0; int j : 2; };
67struct 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; };
JF Bastien14daa202018-12-18 05:12:21 +000068// PATTERN: @__const.test_arraytail_uninit.uninit = private unnamed_addr constant %struct.arraytail { i32 -1431655766, [0 x i32] zeroinitializer }, align 4
69// PATTERN: @__const.test_arraytail_custom.custom = private unnamed_addr constant %struct.arraytail { i32 57005, [0 x i32] zeroinitializer }, align 4
70// ZERO: @__const.test_arraytail_custom.custom = private unnamed_addr constant %struct.arraytail { i32 57005, [0 x i32] zeroinitializer }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +000071struct arraytail { int i; int arr[]; };
JF Bastien14daa202018-12-18 05:12:21 +000072// PATTERN: @__const.test_int1_uninit.uninit = private unnamed_addr constant [1 x i32] [i32 -1431655766], align 4
73// PATTERN: @__const.test_int1_custom.custom = private unnamed_addr constant [1 x i32] [i32 858993459], align 4
74// ZERO: @__const.test_int1_custom.custom = private unnamed_addr constant [1 x i32] [i32 858993459], align 4
75// PATTERN: @__const.test_bool4_uninit.uninit = private unnamed_addr constant [4 x i8] c"\AA\AA\AA\AA", align 1
76// PATTERN: @__const.test_bool4_custom.custom = private unnamed_addr constant [4 x i8] c"\01\01\01\01", align 1
77// ZERO: @__const.test_bool4_custom.custom = private unnamed_addr constant [4 x i8] c"\01\01\01\01", align 1
78// PATTERN: @__const.test_intptr4_uninit.uninit = private unnamed_addr constant [4 x i32*] [i32* inttoptr (i64 -6148914691236517206 to i32*), i32* inttoptr (i64 -6148914691236517206 to i32*), i32* inttoptr (i64 -6148914691236517206 to i32*), i32* inttoptr (i64 -6148914691236517206 to i32*)], align 16
79// 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
80// 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
81// PATTERN: @__const.test_tailpad4_uninit.uninit = private unnamed_addr constant [4 x %struct.tailpad] [%struct.tailpad { i16 -21846, i8 -86 }, %struct.tailpad { i16 -21846, i8 -86 }, %struct.tailpad { i16 -21846, i8 -86 }, %struct.tailpad { i16 -21846, i8 -86 }], align 16
82// PATTERN: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x %struct.tailpad] [%struct.tailpad { i16 257, i8 1 }, %struct.tailpad { i16 257, i8 1 }, %struct.tailpad { i16 257, i8 1 }, %struct.tailpad { i16 257, i8 1 }], align 16
83// ZERO: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x %struct.tailpad] [%struct.tailpad { i16 257, i8 1 }, %struct.tailpad { i16 257, i8 1 }, %struct.tailpad { i16 257, i8 1 }, %struct.tailpad { i16 257, i8 1 }], align 16
JF Bastienc70f65e2018-08-07 03:12:52 +000084struct tailpad { short s; char c; };
JF Bastien14daa202018-12-18 05:12:21 +000085// PATTERN: @__const.test_atomicnotlockfree_uninit.uninit = private unnamed_addr constant %struct.notlockfree { [4 x i64] [i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206] }, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +000086struct notlockfree { long long a[4]; };
JF Bastien14daa202018-12-18 05:12:21 +000087// PATTERN: @__const.test_atomicpadded_uninit.uninit = private unnamed_addr constant %struct.padded { i8 -86, i32 -1431655766 }, align 8
88// PATTERN: @__const.test_atomictailpad_uninit.uninit = private unnamed_addr constant %struct.tailpad { i16 -21846, i8 -86 }, align 4
89// PATTERN: @__const.test_complexfloat_uninit.uninit = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4
90// PATTERN: @__const.test_complexfloat_braces.braces = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4
91// PATTERN: @__const.test_complexfloat_custom.custom = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4
92// PATTERN: @__const.test_complexdouble_uninit.uninit = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8
93// PATTERN: @__const.test_complexdouble_braces.braces = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8
94// PATTERN: @__const.test_complexdouble_custom.custom = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8
95// PATTERN: @__const.test_semivolatile_uninit.uninit = private unnamed_addr constant %struct.semivolatile { i32 -1431655766, i32 -1431655766 }, align 4
96// PATTERN: @__const.test_semivolatile_custom.custom = private unnamed_addr constant %struct.semivolatile { i32 1145324612, i32 1145324612 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +000097struct semivolatile { int i; volatile int vi; };
JF Bastien14daa202018-12-18 05:12:21 +000098// PATTERN: @__const.test_semivolatileinit_uninit.uninit = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
99// PATTERN: @__const.test_semivolatileinit_braces.braces = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
100// PATTERN: @__const.test_semivolatileinit_custom.custom = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4
101// ZERO: @__const.test_semivolatile_custom.custom = private unnamed_addr constant %struct.semivolatile { i32 1145324612, i32 1145324612 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000102struct semivolatileinit { int i = 0x11111111; volatile int vi = 0x11111111; };
JF Bastien14daa202018-12-18 05:12:21 +0000103// PATTERN: @__const.test_base_uninit.uninit = private unnamed_addr constant %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, align 8
104// PATTERN: @__const.test_base_braces.braces = private unnamed_addr constant %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000105struct base { virtual ~base(); };
JF Bastien14daa202018-12-18 05:12:21 +0000106// PATTERN: @__const.test_derived_uninit.uninit = private unnamed_addr constant %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } }, align 8
107// PATTERN: @__const.test_derived_braces.braces = private unnamed_addr constant %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } }, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000108struct derived : public base {};
JF Bastien14daa202018-12-18 05:12:21 +0000109// PATTERN: @__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
110// PATTERN: @__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
JF Bastienc70f65e2018-08-07 03:12:52 +0000111struct virtualderived : public virtual base, public virtual derived {};
JF Bastien14daa202018-12-18 05:12:21 +0000112// PATTERN: @__const.test_matching_uninit.uninit = private unnamed_addr constant %union.matching { i32 -1431655766 }, align 4
113// PATTERN: @__const.test_matching_custom.custom = private unnamed_addr constant { float } { float 6.145500e+04 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000114union matching { int i; float f; };
JF Bastien14daa202018-12-18 05:12:21 +0000115// PATTERN: @__const.test_matchingreverse_uninit.uninit = private unnamed_addr constant %union.matchingreverse { float 0xFFFFFFFFE0000000 }, align 4
116// PATTERN: @__const.test_matchingreverse_custom.custom = private unnamed_addr constant { i32 } { i32 61455 }, align 4
117// ZERO: @__const.test_matching_custom.custom = private unnamed_addr constant { float } { float 6.145500e+04 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000118union matchingreverse { float f; int i; };
JF Bastien14daa202018-12-18 05:12:21 +0000119// PATTERN: @__const.test_unmatched_uninit.uninit = private unnamed_addr constant %union.unmatched { i32 -1431655766 }, align 4
120// PATTERN: @__const.test_unmatched_custom.custom = private unnamed_addr constant %union.unmatched { i32 1001242351 }, align 4
121// ZERO: @__const.test_matchingreverse_custom.custom = private unnamed_addr constant { i32 } { i32 61455 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000122union unmatched { char c; int i; };
JF Bastien14daa202018-12-18 05:12:21 +0000123// PATTERN: @__const.test_unmatchedreverse_uninit.uninit = private unnamed_addr constant %union.unmatchedreverse { i32 -1431655766 }, align 4
124// PATTERN: @__const.test_unmatchedreverse_custom.custom = private unnamed_addr constant { i8, [3 x i8] } { i8 42, [3 x i8] zeroinitializer }, align 4
125// ZERO: @__const.test_unmatched_custom.custom = private unnamed_addr constant %union.unmatched { i32 1001242351 }, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000126union unmatchedreverse { int i; char c; };
JF Bastien14daa202018-12-18 05:12:21 +0000127// PATTERN: @__const.test_unmatchedfp_uninit.uninit = private unnamed_addr constant %union.unmatchedfp { double 0xFFFFFFFFFFFFFFFF }, align 8
128// PATTERN: @__const.test_unmatchedfp_custom.custom = private unnamed_addr constant %union.unmatchedfp { double 0x400921FB54442D18 }, align 8
129// ZERO: @__const.test_unmatchedreverse_custom.custom = private unnamed_addr constant { i8, [3 x i8] } { i8 42, [3 x i8] zeroinitializer }, align 4
130// ZERO: @__const.test_unmatchedfp_custom.custom = private unnamed_addr constant %union.unmatchedfp { double 0x400921FB54442D18 }, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000131union unmatchedfp { float f; double d; };
132enum emptyenum {};
133enum smallenum { VALUE };
134
135extern "C" {
136
137TEST_UNINIT(char, char);
138// CHECK-LABEL: @test_char_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000139// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000140// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000141// PATTERN-LABEL: @test_char_uninit()
142// PATTERN: store i8 -86, i8* %uninit, align 1
143// ZERO-LABEL: @test_char_uninit()
144// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000145
146TEST_BRACES(char, char);
147// CHECK-LABEL: @test_char_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000148// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
149// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000150// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
151
152TEST_UNINIT(uchar, unsigned char);
153// CHECK-LABEL: @test_uchar_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000154// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000155// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000156// PATTERN-LABEL: @test_uchar_uninit()
157// PATTERN: store i8 -86, i8* %uninit, align 1
158// ZERO-LABEL: @test_uchar_uninit()
159// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000160
161TEST_BRACES(uchar, unsigned char);
162// CHECK-LABEL: @test_uchar_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000163// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
164// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000165// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
166
167TEST_UNINIT(schar, signed char);
168// CHECK-LABEL: @test_schar_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000169// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000170// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000171// PATTERN-LABEL: @test_schar_uninit()
172// PATTERN: store i8 -86, i8* %uninit, align 1
173// ZERO-LABEL: @test_schar_uninit()
174// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000175
176TEST_BRACES(schar, signed char);
177// CHECK-LABEL: @test_schar_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000178// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
179// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000180// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
181
182TEST_UNINIT(wchar_t, wchar_t);
183// CHECK-LABEL: @test_wchar_t_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000184// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000185// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000186// PATTERN-LABEL: @test_wchar_t_uninit()
187// PATTERN: store i32 -1431655766, i32* %uninit, align
188// ZERO-LABEL: @test_wchar_t_uninit()
189// ZERO: store i32 0, i32* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000190
191TEST_BRACES(wchar_t, wchar_t);
192// CHECK-LABEL: @test_wchar_t_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000193// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
194// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000195// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
196
197TEST_UNINIT(short, short);
198// CHECK-LABEL: @test_short_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000199// CHECK: %uninit = alloca i16, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000200// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000201// PATTERN-LABEL: @test_short_uninit()
202// PATTERN: store i16 -21846, i16* %uninit, align
203// ZERO-LABEL: @test_short_uninit()
204// ZERO: store i16 0, i16* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000205
206TEST_BRACES(short, short);
207// CHECK-LABEL: @test_short_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000208// CHECK: %braces = alloca i16, align [[ALIGN:[0-9]*]]
209// CHECK-NEXT: store i16 0, i16* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000210// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
211
212TEST_UNINIT(ushort, unsigned short);
213// CHECK-LABEL: @test_ushort_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000214// CHECK: %uninit = alloca i16, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000215// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000216// PATTERN-LABEL: @test_ushort_uninit()
217// PATTERN: store i16 -21846, i16* %uninit, align
218// ZERO-LABEL: @test_ushort_uninit()
219// ZERO: store i16 0, i16* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000220
221TEST_BRACES(ushort, unsigned short);
222// CHECK-LABEL: @test_ushort_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000223// CHECK: %braces = alloca i16, align [[ALIGN:[0-9]*]]
224// CHECK-NEXT: store i16 0, i16* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000225// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
226
227TEST_UNINIT(int, int);
228// CHECK-LABEL: @test_int_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000229// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000230// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000231// PATTERN-LABEL: @test_int_uninit()
232// PATTERN: store i32 -1431655766, i32* %uninit, align
233// ZERO-LABEL: @test_int_uninit()
234// ZERO: store i32 0, i32* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000235
236TEST_BRACES(int, int);
237// CHECK-LABEL: @test_int_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000238// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
239// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000240// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
241
242TEST_UNINIT(unsigned, unsigned);
243// CHECK-LABEL: @test_unsigned_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000244// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000245// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000246// PATTERN-LABEL: @test_unsigned_uninit()
247// PATTERN: store i32 -1431655766, i32* %uninit, align
248// ZERO-LABEL: @test_unsigned_uninit()
249// ZERO: store i32 0, i32* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000250
251TEST_BRACES(unsigned, unsigned);
252// CHECK-LABEL: @test_unsigned_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000253// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
254// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000255// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
256
257TEST_UNINIT(long, long);
258// CHECK-LABEL: @test_long_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000259// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000260// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000261// PATTERN-LABEL: @test_long_uninit()
262// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
263// ZERO-LABEL: @test_long_uninit()
264// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000265
266TEST_BRACES(long, long);
267// CHECK-LABEL: @test_long_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000268// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
269// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000270// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
271
272TEST_UNINIT(ulong, unsigned long);
273// CHECK-LABEL: @test_ulong_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000274// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000275// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000276// PATTERN-LABEL: @test_ulong_uninit()
277// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
278// ZERO-LABEL: @test_ulong_uninit()
279// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000280
281TEST_BRACES(ulong, unsigned long);
282// CHECK-LABEL: @test_ulong_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000283// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
284// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000285// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
286
287TEST_UNINIT(longlong, long long);
288// CHECK-LABEL: @test_longlong_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000289// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000290// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000291// PATTERN-LABEL: @test_longlong_uninit()
292// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
293// ZERO-LABEL: @test_longlong_uninit()
294// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000295
296TEST_BRACES(longlong, long long);
297// CHECK-LABEL: @test_longlong_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000298// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
299// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000300// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
301
302TEST_UNINIT(ulonglong, unsigned long long);
303// CHECK-LABEL: @test_ulonglong_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000304// CHECK: %uninit = alloca i64, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000305// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000306// PATTERN-LABEL: @test_ulonglong_uninit()
307// PATTERN: store i64 -6148914691236517206, i64* %uninit, align
308// ZERO-LABEL: @test_ulonglong_uninit()
309// ZERO: store i64 0, i64* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000310
311TEST_BRACES(ulonglong, unsigned long long);
312// CHECK-LABEL: @test_ulonglong_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000313// CHECK: %braces = alloca i64, align [[ALIGN:[0-9]*]]
314// CHECK-NEXT: store i64 0, i64* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000315// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
316
317TEST_UNINIT(int128, __int128);
318// CHECK-LABEL: @test_int128_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000319// CHECK: %uninit = alloca i128, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000320// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000321// PATTERN-LABEL: @test_int128_uninit()
322// PATTERN: store i128 -113427455640312821154458202477256070486, i128* %uninit, align
323// ZERO-LABEL: @test_int128_uninit()
324// ZERO: store i128 0, i128* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000325
326TEST_BRACES(int128, __int128);
327// CHECK-LABEL: @test_int128_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000328// CHECK: %braces = alloca i128, align [[ALIGN:[0-9]*]]
329// CHECK-NEXT: store i128 0, i128* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000330// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
331
332TEST_UNINIT(uint128, unsigned __int128);
333// CHECK-LABEL: @test_uint128_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000334// CHECK: %uninit = alloca i128, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000335// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000336// PATTERN-LABEL: @test_uint128_uninit()
337// PATTERN: store i128 -113427455640312821154458202477256070486, i128* %uninit, align
338// ZERO-LABEL: @test_uint128_uninit()
339// ZERO: store i128 0, i128* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000340
341TEST_BRACES(uint128, unsigned __int128);
342// CHECK-LABEL: @test_uint128_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000343// CHECK: %braces = alloca i128, align [[ALIGN:[0-9]*]]
344// CHECK-NEXT: store i128 0, i128* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000345// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
346
347
348TEST_UNINIT(fp16, __fp16);
349// CHECK-LABEL: @test_fp16_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000350// CHECK: %uninit = alloca half, 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_fp16_uninit()
353// PATTERN: store half 0xHFFFF, half* %uninit, align
354// ZERO-LABEL: @test_fp16_uninit()
355// ZERO: store half 0xH0000, half* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000356
357TEST_BRACES(fp16, __fp16);
358// CHECK-LABEL: @test_fp16_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000359// CHECK: %braces = alloca half, align [[ALIGN:[0-9]*]]
360// CHECK-NEXT: store half 0xH0000, half* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000361// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
362
363TEST_UNINIT(float, float);
364// CHECK-LABEL: @test_float_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000365// CHECK: %uninit = alloca float, 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_float_uninit()
368// PATTERN: store float 0xFFFFFFFFE0000000, float* %uninit, align
369// ZERO-LABEL: @test_float_uninit()
370// ZERO: store float 0.000000e+00, float* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000371
372TEST_BRACES(float, float);
373// CHECK-LABEL: @test_float_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000374// CHECK: %braces = alloca float, align [[ALIGN:[0-9]*]]
375// CHECK-NEXT: store float 0.000000e+00, float* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000376// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
377
378TEST_UNINIT(double, double);
379// CHECK-LABEL: @test_double_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000380// CHECK: %uninit = alloca double, 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_double_uninit()
383// PATTERN: store double 0xFFFFFFFFFFFFFFFF, double* %uninit, align
384// ZERO-LABEL: @test_double_uninit()
385// ZERO: store double 0.000000e+00, double* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000386
387TEST_BRACES(double, double);
388// CHECK-LABEL: @test_double_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000389// CHECK: %braces = alloca double, align [[ALIGN:[0-9]*]]
390// CHECK-NEXT: store double 0.000000e+00, double* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000391// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
392
393TEST_UNINIT(longdouble, long double);
394// CHECK-LABEL: @test_longdouble_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000395// CHECK: %uninit = alloca x86_fp80, 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_longdouble_uninit()
398// PATTERN: store x86_fp80 0xKFFFFFFFFFFFFFFFFFFFF, x86_fp80* %uninit, align
399// ZERO-LABEL: @test_longdouble_uninit()
400// ZERO: store x86_fp80 0xK00000000000000000000, x86_fp80* %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000401
402TEST_BRACES(longdouble, long double);
403// CHECK-LABEL: @test_longdouble_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000404// CHECK: %braces = alloca x86_fp80, align [[ALIGN:[0-9]*]]
405// CHECK-NEXT: store x86_fp80 0xK00000000000000000000, x86_fp80* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000406// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
407
408
409TEST_UNINIT(intptr, int*);
410// CHECK-LABEL: @test_intptr_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000411// CHECK: %uninit = alloca i32*, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000412// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000413// PATTERN-LABEL: @test_intptr_uninit()
414// PATTERN: store i32* inttoptr (i64 -6148914691236517206 to i32*), i32** %uninit, align
415// ZERO-LABEL: @test_intptr_uninit()
416// ZERO: store i32* null, i32** %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000417
418TEST_BRACES(intptr, int*);
419// CHECK-LABEL: @test_intptr_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000420// CHECK: %braces = alloca i32*, align [[ALIGN:[0-9]*]]
421// CHECK-NEXT: store i32* null, i32** %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000422// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
423
424TEST_UNINIT(intptrptr, int**);
425// CHECK-LABEL: @test_intptrptr_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000426// CHECK: %uninit = alloca i32**, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000427// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000428// PATTERN-LABEL: @test_intptrptr_uninit()
429// PATTERN: store i32** inttoptr (i64 -6148914691236517206 to i32**), i32*** %uninit, align
430// ZERO-LABEL: @test_intptrptr_uninit()
431// ZERO: store i32** null, i32*** %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000432
433TEST_BRACES(intptrptr, int**);
434// CHECK-LABEL: @test_intptrptr_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000435// CHECK: %braces = alloca i32**, align [[ALIGN:[0-9]*]]
436// CHECK-NEXT: store i32** null, i32*** %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000437// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
438
439TEST_UNINIT(function, void(*)());
440// CHECK-LABEL: @test_function_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000441// CHECK: %uninit = alloca void ()*, 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_function_uninit()
444// PATTERN: store void ()* inttoptr (i64 -6148914691236517206 to void ()*), void ()** %uninit, align
445// ZERO-LABEL: @test_function_uninit()
446// ZERO: store void ()* null, void ()** %uninit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000447
448TEST_BRACES(function, void(*)());
449// CHECK-LABEL: @test_function_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000450// CHECK: %braces = alloca void ()*, align [[ALIGN:[0-9]*]]
451// CHECK-NEXT: store void ()* null, void ()** %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000452// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
453
454TEST_UNINIT(bool, bool);
455// CHECK-LABEL: @test_bool_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000456// CHECK: %uninit = alloca i8, 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_bool_uninit()
459// PATTERN: store i8 -86, i8* %uninit, align 1
460// ZERO-LABEL: @test_bool_uninit()
461// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000462
463TEST_BRACES(bool, bool);
464// CHECK-LABEL: @test_bool_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000465// CHECK: %braces = alloca i8, align [[ALIGN:[0-9]*]]
466// CHECK-NEXT: store i8 0, i8* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000467// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
468
469
470TEST_UNINIT(empty, empty);
471// CHECK-LABEL: @test_empty_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000472// CHECK: %uninit = alloca %struct.empty, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000473// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000474// PATTERN-LABEL: @test_empty_uninit()
475// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_empty_uninit.uninit
476// ZERO-LABEL: @test_empty_uninit()
477// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000478
479TEST_BRACES(empty, empty);
480// CHECK-LABEL: @test_empty_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000481// CHECK: %braces = alloca %struct.empty, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000482// CHECK-NEXT: bitcast
483// CHECK-NEXT: call void @llvm.memcpy
484// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
485
486TEST_UNINIT(small, small);
487// CHECK-LABEL: @test_small_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000488// CHECK: %uninit = alloca %struct.small, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000489// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000490// PATTERN-LABEL: @test_small_uninit()
491// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_small_uninit.uninit
492// ZERO-LABEL: @test_small_uninit()
493// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000494
495TEST_BRACES(small, small);
496// CHECK-LABEL: @test_small_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000497// CHECK: %braces = alloca %struct.small, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000498// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000499// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 1, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000500// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
501
JF Bastien14daa202018-12-18 05:12:21 +0000502TEST_CUSTOM(small, small, { 42 });
JF Bastienc70f65e2018-08-07 03:12:52 +0000503// CHECK-LABEL: @test_small_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000504// CHECK: %custom = alloca %struct.small, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000505// CHECK-NEXT: bitcast
506// CHECK-NEXT: call void @llvm.memcpy
507// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
508
509TEST_UNINIT(smallinit, smallinit);
510// CHECK-LABEL: @test_smallinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000511// CHECK: %uninit = alloca %struct.smallinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000512// CHECK-NEXT: call void @{{.*}}smallinit{{.*}}%uninit)
513// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
514
515TEST_BRACES(smallinit, smallinit);
516// CHECK-LABEL: @test_smallinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000517// CHECK: %braces = alloca %struct.smallinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000518// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallinit, %struct.smallinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000519// CHECK-NEXT: store i8 42, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000520// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
521
522TEST_CUSTOM(smallinit, smallinit, { 100 });
523// CHECK-LABEL: @test_smallinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000524// CHECK: %custom = alloca %struct.smallinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000525// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallinit, %struct.smallinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000526// CHECK-NEXT: store i8 100, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000527// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
528
529TEST_UNINIT(smallpartinit, smallpartinit);
530// CHECK-LABEL: @test_smallpartinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000531// CHECK: %uninit = alloca %struct.smallpartinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000532// CHECK-NEXT: call void @{{.*}}smallpartinit{{.*}}%uninit)
533// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000534// PATTERN-LABEL: @test_smallpartinit_uninit()
535// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_smallpartinit_uninit.uninit
536// ZERO-LABEL: @test_smallpartinit_uninit()
537// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000538
539TEST_BRACES(smallpartinit, smallpartinit);
540// CHECK-LABEL: @test_smallpartinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000541// CHECK: %braces = alloca %struct.smallpartinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000542// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000543// CHECK-NEXT: store i8 42, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000544// CHECK-NEXT: %[[D:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000545// CHECK-NEXT: store i8 0, i8* %[[D]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000546// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
547
548TEST_CUSTOM(smallpartinit, smallpartinit, { 100, 42 });
549// CHECK-LABEL: @test_smallpartinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000550// CHECK: %custom = alloca %struct.smallpartinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000551// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000552// CHECK-NEXT: store i8 100, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000553// CHECK-NEXT: %[[D:[^ ]*]] = getelementptr inbounds %struct.smallpartinit, %struct.smallpartinit* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000554// CHECK-NEXT: store i8 42, i8* %[[D]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000555// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
556
557TEST_UNINIT(nullinit, nullinit);
558// CHECK-LABEL: @test_nullinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000559// CHECK: %uninit = alloca %struct.nullinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000560// CHECK-NEXT: call void @{{.*}}nullinit{{.*}}%uninit)
561// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
562
563TEST_BRACES(nullinit, nullinit);
564// CHECK-LABEL: @test_nullinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000565// CHECK: %braces = alloca %struct.nullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000566// CHECK-NEXT: %[[N:[^ ]*]] = getelementptr inbounds %struct.nullinit, %struct.nullinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000567// CHECK-NEXT: store i8* null, i8** %[[N]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000568// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
569
570TEST_CUSTOM(nullinit, nullinit, { (char*)"derp" });
571// CHECK-LABEL: @test_nullinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000572// CHECK: %custom = alloca %struct.nullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000573// CHECK-NEXT: %[[N:[^ ]*]] = getelementptr inbounds %struct.nullinit, %struct.nullinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000574// CHECK-NEXT: store i8* getelementptr inbounds {{.*}}, i8** %[[N]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000575// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
576
577TEST_UNINIT(padded, padded);
578// CHECK-LABEL: @test_padded_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000579// CHECK: %uninit = alloca %struct.padded, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000580// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000581// PATTERN-LABEL: @test_padded_uninit()
582// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_padded_uninit.uninit
583// ZERO-LABEL: @test_padded_uninit()
584// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000585
586TEST_BRACES(padded, padded);
587// CHECK-LABEL: @test_padded_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000588// CHECK: %braces = alloca %struct.padded, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000589// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000590// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000591// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
592
593TEST_CUSTOM(padded, padded, { 42, 13371337 });
594// CHECK-LABEL: @test_padded_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000595// CHECK: %custom = alloca %struct.padded, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000596// CHECK-NEXT: bitcast
597// CHECK-NEXT: call void @llvm.memcpy
598// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
599
600TEST_UNINIT(paddednullinit, paddednullinit);
601// CHECK-LABEL: @test_paddednullinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000602// CHECK: %uninit = alloca %struct.paddednullinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000603// CHECK-NEXT: call void @{{.*}}paddednullinit{{.*}}%uninit)
604// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000605// PATTERN-LABEL: @test_paddednullinit_uninit()
606// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_paddednullinit_uninit.uninit
607// ZERO-LABEL: @test_paddednullinit_uninit()
608// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000609
610TEST_BRACES(paddednullinit, paddednullinit);
611// CHECK-LABEL: @test_paddednullinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000612// CHECK: %braces = alloca %struct.paddednullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000613// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000614// CHECK-NEXT: store i8 0, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000615// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000616// CHECK-NEXT: store i32 0, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000617// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
618
619TEST_CUSTOM(paddednullinit, paddednullinit, { 42, 13371337 });
620// CHECK-LABEL: @test_paddednullinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000621// CHECK: %custom = alloca %struct.paddednullinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000622// CHECK-NEXT: %[[C:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +0000623// CHECK-NEXT: store i8 42, i8* %[[C]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000624// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.paddednullinit, %struct.paddednullinit* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000625// CHECK-NEXT: store i32 13371337, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000626// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
627
628TEST_UNINIT(bitfield, bitfield);
629// CHECK-LABEL: @test_bitfield_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000630// CHECK: %uninit = alloca %struct.bitfield, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000631// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000632// PATTERN-LABEL: @test_bitfield_uninit()
633// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_bitfield_uninit.uninit
634// ZERO-LABEL: @test_bitfield_uninit()
635// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000636
637TEST_BRACES(bitfield, bitfield);
638// CHECK-LABEL: @test_bitfield_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000639// CHECK: %braces = alloca %struct.bitfield, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000640// CHECK-NEXT: bitcast
641// CHECK-NEXT: call void @llvm.memcpy
642// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
643
644TEST_CUSTOM(bitfield, bitfield, { 4, 1 });
645// CHECK-LABEL: @test_bitfield_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000646// CHECK: %custom = alloca %struct.bitfield, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000647// CHECK-NEXT: bitcast
648// CHECK-NEXT: call void @llvm.memcpy
649// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
650
651TEST_UNINIT(bitfieldaligned, bitfieldaligned);
652// CHECK-LABEL: @test_bitfieldaligned_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000653// CHECK: %uninit = alloca %struct.bitfieldaligned, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000654// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000655// PATTERN-LABEL: @test_bitfieldaligned_uninit()
656// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_bitfieldaligned_uninit.uninit
657// ZERO-LABEL: @test_bitfieldaligned_uninit()
658// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000659
660TEST_BRACES(bitfieldaligned, bitfieldaligned);
661// CHECK-LABEL: @test_bitfieldaligned_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000662// CHECK: %braces = alloca %struct.bitfieldaligned, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000663// CHECK-NEXT: bitcast
664// CHECK-NEXT: call void @llvm.memcpy
665// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
666
667TEST_CUSTOM(bitfieldaligned, bitfieldaligned, { 4, 1 });
668// CHECK-LABEL: @test_bitfieldaligned_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000669// CHECK: %custom = alloca %struct.bitfieldaligned, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000670// CHECK-NEXT: bitcast
671// CHECK-NEXT: call void @llvm.memcpy
672// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
673
674TEST_UNINIT(big, big);
675// CHECK-LABEL: @test_big_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000676// CHECK: %uninit = alloca %struct.big, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000677// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000678// PATTERN-LABEL: @test_big_uninit()
679// PATTERN: call void @llvm.memset{{.*}}, i8 -86,
680// ZERO-LABEL: @test_big_uninit()
681// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000682
683TEST_BRACES(big, big);
684// CHECK-LABEL: @test_big_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000685// CHECK: %braces = alloca %struct.big, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000686// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000687// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 104, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000688// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
689
690TEST_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 });
691// CHECK-LABEL: @test_big_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000692// CHECK: %custom = alloca %struct.big, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000693// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000694// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 -86, i64 104, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000695// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
696
697TEST_UNINIT(arraytail, arraytail);
698// CHECK-LABEL: @test_arraytail_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000699// CHECK: %uninit = alloca %struct.arraytail, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000700// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000701// PATTERN-LABEL: @test_arraytail_uninit()
702// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_arraytail_uninit.uninit
703// ZERO-LABEL: @test_arraytail_uninit()
704// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000705
706TEST_BRACES(arraytail, arraytail);
707// CHECK-LABEL: @test_arraytail_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000708// CHECK: %braces = alloca %struct.arraytail, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000709// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000710// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000711// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
712
713TEST_CUSTOM(arraytail, arraytail, { 0xdead });
714// CHECK-LABEL: @test_arraytail_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000715// CHECK: %custom = alloca %struct.arraytail, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000716// CHECK-NEXT: bitcast
717// CHECK-NEXT: call void @llvm.memcpy
718// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
719
720
721TEST_UNINIT(int0, int[0]);
722// CHECK-LABEL: @test_int0_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000723// CHECK: %uninit = alloca [0 x i32], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000724// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000725// PATTERN-LABEL: @test_int0_uninit()
726// PATTERN: %uninit = alloca [0 x i32], align
727// PATTERN-NEXT: call void @{{.*}}used{{.*}}%uninit)
728// ZERO-LABEL: @test_int0_uninit()
729// ZERO: %uninit = alloca [0 x i32], align
730// ZERO-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastienc70f65e2018-08-07 03:12:52 +0000731
732TEST_BRACES(int0, int[0]);
733// CHECK-LABEL: @test_int0_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000734// CHECK: %braces = alloca [0 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000735// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000736// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 0, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000737// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
738
739TEST_UNINIT(int1, int[1]);
740// CHECK-LABEL: @test_int1_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000741// CHECK: %uninit = alloca [1 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000742// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000743// PATTERN-LABEL: @test_int1_uninit()
744// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_int1_uninit.uninit
745// ZERO-LABEL: @test_int1_uninit()
746// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000747
748TEST_BRACES(int1, int[1]);
749// CHECK-LABEL: @test_int1_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000750// CHECK: %braces = alloca [1 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000751// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000752// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000753// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
754
755TEST_CUSTOM(int1, int[1], { 0x33333333 });
756// CHECK-LABEL: @test_int1_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000757// CHECK: %custom = alloca [1 x i32], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000758// CHECK-NEXT: bitcast
759// CHECK-NEXT: call void @llvm.memcpy
760// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
761
762TEST_UNINIT(int64, int[64]);
763// CHECK-LABEL: @test_int64_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000764// CHECK: %uninit = alloca [64 x i32], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000765// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000766// PATTERN-LABEL: @test_int64_uninit()
767// PATTERN: call void @llvm.memset{{.*}}, i8 -86,
768// ZERO-LABEL: @test_int64_uninit()
769// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000770
771TEST_BRACES(int64, int[64]);
772// CHECK-LABEL: @test_int64_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000773// CHECK: %braces = alloca [64 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000774// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000775// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 256, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000776// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
777
778TEST_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 });
779// CHECK-LABEL: @test_int64_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000780// CHECK: %custom = alloca [64 x i32], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000781// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000782// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 17, i64 256, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000783// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
784
785TEST_UNINIT(bool4, bool[4]);
786// CHECK-LABEL: @test_bool4_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000787// CHECK: %uninit = alloca [4 x i8], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000788// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000789// PATTERN-LABEL: @test_bool4_uninit()
790// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_bool4_uninit.uninit
791// ZERO-LABEL: @test_bool4_uninit()
792// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000793
794TEST_BRACES(bool4, bool[4]);
795// CHECK-LABEL: @test_bool4_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000796// CHECK: %braces = alloca [4 x i8], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000797// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000798// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000799// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
800
801TEST_CUSTOM(bool4, bool[4], { true, true, true, true });
802// CHECK-LABEL: @test_bool4_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000803// CHECK: %custom = alloca [4 x i8], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000804// CHECK-NEXT: bitcast
805// CHECK-NEXT: call void @llvm.memcpy
806// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
807
808TEST_UNINIT(intptr4, int*[4]);
809// CHECK-LABEL: @test_intptr4_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000810// CHECK: %uninit = alloca [4 x i32*], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000811// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000812// PATTERN-LABEL: @test_intptr4_uninit()
813// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_intptr4_uninit.uninit
814// ZERO-LABEL: @test_intptr4_uninit()
815// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000816
817TEST_BRACES(intptr4, int*[4]);
818// CHECK-LABEL: @test_intptr4_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000819// CHECK: %braces = alloca [4 x i32*], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000820// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000821// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 32, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000822// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
823
824 TEST_CUSTOM(intptr4, int*[4], = { (int*)0x22222222, (int*)0x22222222, (int*)0x22222222, (int*)0x22222222 });
825// CHECK-LABEL: @test_intptr4_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000826// CHECK: %custom = alloca [4 x i32*], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000827// CHECK-NEXT: bitcast
828// CHECK-NEXT: call void @llvm.memcpy
829// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
830
831TEST_UNINIT(tailpad4, tailpad[4]);
832// CHECK-LABEL: @test_tailpad4_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000833// CHECK: %uninit = alloca [4 x %struct.tailpad], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000834// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000835// PATTERN-LABEL: @test_tailpad4_uninit()
836// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_tailpad4_uninit.uninit
837// ZERO-LABEL: @test_tailpad4_uninit()
838// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000839
840TEST_BRACES(tailpad4, tailpad[4]);
841// CHECK-LABEL: @test_tailpad4_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000842// CHECK: %braces = alloca [4 x %struct.tailpad], align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000843// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +0000844// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 16, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +0000845// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
846
JF Bastienfe2ea822018-08-08 17:05:17 +0000847TEST_CUSTOM(tailpad4, tailpad[4], { {257, 1}, {257, 1}, {257, 1}, {257, 1} });
JF Bastienc70f65e2018-08-07 03:12:52 +0000848// CHECK-LABEL: @test_tailpad4_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000849// CHECK: %custom = alloca [4 x %struct.tailpad], align
JF Bastienc70f65e2018-08-07 03:12:52 +0000850// CHECK-NEXT: bitcast
851// CHECK-NEXT: call void @llvm.memcpy
852// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
853
JF Bastienfe2ea822018-08-08 17:05:17 +0000854TEST_UNINIT(tailpad9, tailpad[9]);
855// CHECK-LABEL: @test_tailpad9_uninit()
856// CHECK: %uninit = alloca [9 x %struct.tailpad], align
857// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000858// PATTERN-LABEL: @test_tailpad9_uninit()
859// PATTERN: call void @llvm.memset{{.*}}, i8 -86,
860// ZERO-LABEL: @test_tailpad9_uninit()
861// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienfe2ea822018-08-08 17:05:17 +0000862
863TEST_BRACES(tailpad9, tailpad[9]);
864// CHECK-LABEL: @test_tailpad9_braces()
865// CHECK: %braces = alloca [9 x %struct.tailpad], align [[ALIGN:[0-9]*]]
866// CHECK-NEXT: bitcast
867// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 36, i1 false)
868// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
869
870TEST_CUSTOM(tailpad9, tailpad[9], { {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1}, {257, 1} });
871// CHECK-LABEL: @test_tailpad9_custom()
872// CHECK: %custom = alloca [9 x %struct.tailpad], align [[ALIGN:[0-9]*]]
873// CHECK-NEXT: bitcast
874// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 1, i64 36, i1 false)
875// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
876
JF Bastienc70f65e2018-08-07 03:12:52 +0000877
878TEST_UNINIT(atomicbool, _Atomic(bool));
879// CHECK-LABEL: @test_atomicbool_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000880// CHECK: %uninit = alloca i8, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000881// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000882// PATTERN-LABEL: @test_atomicbool_uninit()
883// PATTERN: store i8 -86, i8* %uninit, align 1
884// ZERO-LABEL: @test_atomicbool_uninit()
885// ZERO: store i8 0, i8* %uninit, align 1
JF Bastienc70f65e2018-08-07 03:12:52 +0000886
887TEST_UNINIT(atomicint, _Atomic(int));
888// CHECK-LABEL: @test_atomicint_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000889// CHECK: %uninit = alloca i32, 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_atomicint_uninit()
892// PATTERN: store i32 -1431655766, i32* %uninit, align 4
893// ZERO-LABEL: @test_atomicint_uninit()
894// ZERO: store i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000895
896TEST_UNINIT(atomicdouble, _Atomic(double));
897// CHECK-LABEL: @test_atomicdouble_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000898// CHECK: %uninit = alloca double, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000899// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000900// PATTERN-LABEL: @test_atomicdouble_uninit()
901// PATTERN: store double 0xFFFFFFFFFFFFFFFF, double* %uninit, align 8
902// ZERO-LABEL: @test_atomicdouble_uninit()
903// ZERO: store double 0.000000e+00, double* %uninit, align 8
JF Bastienc70f65e2018-08-07 03:12:52 +0000904
905TEST_UNINIT(atomicnotlockfree, _Atomic(notlockfree));
906// CHECK-LABEL: @test_atomicnotlockfree_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000907// CHECK: %uninit = alloca %struct.notlockfree, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000908// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000909// PATTERN-LABEL: @test_atomicnotlockfree_uninit()
910// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_atomicnotlockfree_uninit.uninit
911// ZERO-LABEL: @test_atomicnotlockfree_uninit()
912// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000913
914TEST_UNINIT(atomicpadded, _Atomic(padded));
915// CHECK-LABEL: @test_atomicpadded_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000916// CHECK: %uninit = alloca %struct.padded, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000917// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000918// PATTERN-LABEL: @test_atomicpadded_uninit()
919// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_atomicpadded_uninit.uninit
920// ZERO-LABEL: @test_atomicpadded_uninit()
921// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000922
923TEST_UNINIT(atomictailpad, _Atomic(tailpad));
924// CHECK-LABEL: @test_atomictailpad_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000925// CHECK: %uninit = alloca %struct.tailpad, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000926// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000927// PATTERN-LABEL: @test_atomictailpad_uninit()
928// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_atomictailpad_uninit.uninit
929// ZERO-LABEL: @test_atomictailpad_uninit()
930// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000931
932
933TEST_UNINIT(complexfloat, _Complex float);
934// CHECK-LABEL: @test_complexfloat_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000935// CHECK: %uninit = alloca { float, float }, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000936// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000937// PATTERN-LABEL: @test_complexfloat_uninit()
938// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_complexfloat_uninit.uninit
939// ZERO-LABEL: @test_complexfloat_uninit()
940// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000941
942TEST_BRACES(complexfloat, _Complex float);
943// CHECK-LABEL: @test_complexfloat_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000944// CHECK: %braces = alloca { float, float }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000945// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %braces, i32 0, i32 0
946// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000947// CHECK-NEXT: store float 0.000000e+00, float* %[[R]], align [[ALIGN]]
948// CHECK-NEXT: store float 0.000000e+00, float* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000949// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
950
951TEST_CUSTOM(complexfloat, _Complex float, { 3.1415926535897932384626433, 3.1415926535897932384626433 });
952// CHECK-LABEL: @test_complexfloat_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000953// CHECK: %custom = alloca { float, float }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000954// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %custom, i32 0, i32 0
955// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { float, float }, { float, float }* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000956// CHECK-NEXT: store float 0x400921FB60000000, float* %[[R]], align [[ALIGN]]
957// CHECK-NEXT: store float 0x400921FB60000000, float* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000958// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
959
960TEST_UNINIT(complexdouble, _Complex double);
961// CHECK-LABEL: @test_complexdouble_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000962// CHECK: %uninit = alloca { double, double }, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000963// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000964// PATTERN-LABEL: @test_complexdouble_uninit()
965// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_complexdouble_uninit.uninit
966// ZERO-LABEL: @test_complexdouble_uninit()
967// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +0000968
969TEST_BRACES(complexdouble, _Complex double);
970// CHECK-LABEL: @test_complexdouble_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000971// CHECK: %braces = alloca { double, double }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000972// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %braces, i32 0, i32 0
973// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000974// CHECK-NEXT: store double 0.000000e+00, double* %[[R]], align [[ALIGN]]
975// CHECK-NEXT: store double 0.000000e+00, double* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000976// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
977
978TEST_CUSTOM(complexdouble, _Complex double, { 3.1415926535897932384626433, 3.1415926535897932384626433 });
979// CHECK-LABEL: @test_complexdouble_custom()
JF Bastiencc365c32018-08-07 22:43:44 +0000980// CHECK: %custom = alloca { double, double }, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000981// CHECK-NEXT: %[[R:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %custom, i32 0, i32 0
982// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds { double, double }, { double, double }* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +0000983// CHECK-NEXT: store double 0x400921FB54442D18, double* %[[R]], align [[ALIGN]]
984// CHECK-NEXT: store double 0x400921FB54442D18, double* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +0000985// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
986
987
988TEST_UNINIT(volatileint, volatile int);
989// CHECK-LABEL: @test_volatileint_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +0000990// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +0000991// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +0000992// PATTERN-LABEL: @test_volatileint_uninit()
993// PATTERN: store volatile i32 -1431655766, i32* %uninit, align 4
994// ZERO-LABEL: @test_volatileint_uninit()
995// ZERO: store volatile i32 0, i32* %uninit, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +0000996
997TEST_BRACES(volatileint, volatile int);
998// CHECK-LABEL: @test_volatileint_braces()
JF Bastiencc365c32018-08-07 22:43:44 +0000999// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
1000// CHECK-NEXT: store volatile i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001001// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1002
1003TEST_UNINIT(semivolatile, semivolatile);
1004// CHECK-LABEL: @test_semivolatile_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001005// CHECK: %uninit = alloca %struct.semivolatile, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001006// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001007// PATTERN-LABEL: @test_semivolatile_uninit()
1008// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_semivolatile_uninit.uninit
1009// ZERO-LABEL: @test_semivolatile_uninit()
1010// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001011
1012TEST_BRACES(semivolatile, semivolatile);
1013// CHECK-LABEL: @test_semivolatile_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001014// CHECK: %braces = alloca %struct.semivolatile, 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 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001017// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1018
1019TEST_CUSTOM(semivolatile, semivolatile, { 0x44444444, 0x44444444 });
1020// CHECK-LABEL: @test_semivolatile_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001021// CHECK: %custom = alloca %struct.semivolatile, 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(semivolatileinit, semivolatileinit);
1027// CHECK-LABEL: @test_semivolatileinit_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001028// CHECK: %uninit = alloca %struct.semivolatileinit, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001029// CHECK-NEXT: call void @{{.*}}semivolatileinit{{.*}}%uninit)
1030// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
1031
1032TEST_BRACES(semivolatileinit, semivolatileinit);
1033// CHECK-LABEL: @test_semivolatileinit_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001034// CHECK: %braces = alloca %struct.semivolatileinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001035// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %braces, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +00001036// CHECK-NEXT: store i32 286331153, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001037// CHECK-NEXT: %[[VI:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %braces, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001038// CHECK-NEXT: store volatile i32 286331153, i32* %[[VI]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001039// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1040
1041TEST_CUSTOM(semivolatileinit, semivolatileinit, { 0x44444444, 0x44444444 });
1042// CHECK-LABEL: @test_semivolatileinit_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001043// CHECK: %custom = alloca %struct.semivolatileinit, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001044// CHECK-NEXT: %[[I:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %custom, i32 0, i32 0
JF Bastiencc365c32018-08-07 22:43:44 +00001045// CHECK-NEXT: store i32 1145324612, i32* %[[I]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001046// CHECK-NEXT: %[[VI:[^ ]*]] = getelementptr inbounds %struct.semivolatileinit, %struct.semivolatileinit* %custom, i32 0, i32 1
JF Bastiencc365c32018-08-07 22:43:44 +00001047// CHECK-NEXT: store volatile i32 1145324612, i32* %[[VI]], align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001048// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1049
1050
1051TEST_UNINIT(base, base);
1052// CHECK-LABEL: @test_base_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001053// CHECK: %uninit = alloca %struct.base, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001054// CHECK-NEXT: call void @{{.*}}base{{.*}}%uninit)
1055// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001056// PATTERN-LABEL: @test_base_uninit()
1057// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_base_uninit.uninit
1058// ZERO-LABEL: @test_base_uninit()
1059// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001060
1061TEST_BRACES(base, base);
1062// CHECK-LABEL: @test_base_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001063// CHECK: %braces = alloca %struct.base, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001064// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001065// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001066// CHECK-NEXT: call void @{{.*}}base{{.*}}%braces)
1067// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1068
1069TEST_UNINIT(derived, derived);
1070// CHECK-LABEL: @test_derived_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001071// CHECK: %uninit = alloca %struct.derived, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001072// CHECK-NEXT: call void @{{.*}}derived{{.*}}%uninit)
1073// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001074// PATTERN-LABEL: @test_derived_uninit()
1075// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_derived_uninit.uninit
1076// ZERO-LABEL: @test_derived_uninit()
1077// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001078
1079TEST_BRACES(derived, derived);
1080// CHECK-LABEL: @test_derived_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001081// CHECK: %braces = alloca %struct.derived, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001082// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001083// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 8, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001084// CHECK-NEXT: call void @{{.*}}derived{{.*}}%braces)
1085// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1086
1087TEST_UNINIT(virtualderived, virtualderived);
1088// CHECK-LABEL: @test_virtualderived_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001089// CHECK: %uninit = alloca %struct.virtualderived, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001090// CHECK-NEXT: call void @{{.*}}virtualderived{{.*}}%uninit)
1091// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001092// PATTERN-LABEL: @test_virtualderived_uninit()
1093// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_virtualderived_uninit.uninit
1094// ZERO-LABEL: @test_virtualderived_uninit()
1095// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001096
1097TEST_BRACES(virtualderived, virtualderived);
1098// CHECK-LABEL: @test_virtualderived_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001099// CHECK: %braces = alloca %struct.virtualderived, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001100// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001101// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 16, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001102// CHECK-NEXT: call void @{{.*}}virtualderived{{.*}}%braces)
1103// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1104
1105
1106TEST_UNINIT(matching, matching);
1107// CHECK-LABEL: @test_matching_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001108// CHECK: %uninit = alloca %union.matching, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001109// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001110// PATTERN-LABEL: @test_matching_uninit()
1111// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_matching_uninit.uninit
1112// ZERO-LABEL: @test_matching_uninit()
1113// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001114
1115TEST_BRACES(matching, matching);
1116// CHECK-LABEL: @test_matching_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001117// CHECK: %braces = alloca %union.matching, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001118// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001119// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001120// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1121
1122TEST_CUSTOM(matching, matching, { .f = 0xf00f });
1123// CHECK-LABEL: @test_matching_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001124// CHECK: %custom = alloca %union.matching, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001125// CHECK-NEXT: bitcast
1126// CHECK-NEXT: call void @llvm.memcpy
1127// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1128
1129TEST_UNINIT(matchingreverse, matchingreverse);
1130// CHECK-LABEL: @test_matchingreverse_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001131// CHECK: %uninit = alloca %union.matchingreverse, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001132// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001133// PATTERN-LABEL: @test_matchingreverse_uninit()
1134// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_matchingreverse_uninit.uninit
1135// ZERO-LABEL: @test_matchingreverse_uninit()
1136// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001137
1138TEST_BRACES(matchingreverse, matchingreverse);
1139// CHECK-LABEL: @test_matchingreverse_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001140// CHECK: %braces = alloca %union.matchingreverse, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001141// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001142// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001143// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1144
1145TEST_CUSTOM(matchingreverse, matchingreverse, { .i = 0xf00f });
1146// CHECK-LABEL: @test_matchingreverse_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001147// CHECK: %custom = alloca %union.matchingreverse, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001148// CHECK-NEXT: bitcast
1149// CHECK-NEXT: call void @llvm.memcpy
1150// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1151
1152TEST_UNINIT(unmatched, unmatched);
1153// CHECK-LABEL: @test_unmatched_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001154// CHECK: %uninit = alloca %union.unmatched, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001155// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001156// PATTERN-LABEL: @test_unmatched_uninit()
1157// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_unmatched_uninit.uninit
1158// ZERO-LABEL: @test_unmatched_uninit()
1159// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001160
1161TEST_BRACES(unmatched, unmatched);
1162// CHECK-LABEL: @test_unmatched_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001163// CHECK: %braces = alloca %union.unmatched, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001164// CHECK-NEXT: bitcast
1165// CHECK-NEXT: call void @llvm.memcpy
1166// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1167
1168TEST_CUSTOM(unmatched, unmatched, { .i = 0x3badbeef });
1169// CHECK-LABEL: @test_unmatched_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001170// CHECK: %custom = alloca %union.unmatched, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001171// CHECK-NEXT: bitcast
1172// CHECK-NEXT: call void @llvm.memcpy
1173// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1174
1175TEST_UNINIT(unmatchedreverse, unmatchedreverse);
1176// CHECK-LABEL: @test_unmatchedreverse_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001177// CHECK: %uninit = alloca %union.unmatchedreverse, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001178// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001179// PATTERN-LABEL: @test_unmatchedreverse_uninit()
1180// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_unmatchedreverse_uninit.uninit
1181// ZERO-LABEL: @test_unmatchedreverse_uninit()
1182// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001183
1184TEST_BRACES(unmatchedreverse, unmatchedreverse);
1185// CHECK-LABEL: @test_unmatchedreverse_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001186// CHECK: %braces = alloca %union.unmatchedreverse, align [[ALIGN:[0-9]*]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001187// CHECK-NEXT: bitcast
JF Bastiencc365c32018-08-07 22:43:44 +00001188// CHECK-NEXT: call void @llvm.memset{{.*}}(i8* align [[ALIGN]] %{{.*}}, i8 0, i64 4, i1 false)
JF Bastienc70f65e2018-08-07 03:12:52 +00001189// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1190
1191TEST_CUSTOM(unmatchedreverse, unmatchedreverse, { .c = 42 });
1192// CHECK-LABEL: @test_unmatchedreverse_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001193// CHECK: %custom = alloca %union.unmatchedreverse, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001194// CHECK-NEXT: bitcast
1195// CHECK-NEXT: call void @llvm.memcpy
1196// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1197
1198TEST_UNINIT(unmatchedfp, unmatchedfp);
1199// CHECK-LABEL: @test_unmatchedfp_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001200// CHECK: %uninit = alloca %union.unmatchedfp, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001201// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001202// PATTERN-LABEL: @test_unmatchedfp_uninit()
1203// PATTERN: call void @llvm.memcpy{{.*}} @__const.test_unmatchedfp_uninit.uninit
1204// ZERO-LABEL: @test_unmatchedfp_uninit()
1205// ZERO: call void @llvm.memset{{.*}}, i8 0,
JF Bastienc70f65e2018-08-07 03:12:52 +00001206
1207TEST_BRACES(unmatchedfp, unmatchedfp);
1208// CHECK-LABEL: @test_unmatchedfp_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001209// CHECK: %braces = alloca %union.unmatchedfp, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001210// CHECK-NEXT: bitcast
1211// CHECK-NEXT: call void @llvm.memcpy
1212// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1213
1214TEST_CUSTOM(unmatchedfp, unmatchedfp, { .d = 3.1415926535897932384626433 });
1215// CHECK-LABEL: @test_unmatchedfp_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001216// CHECK: %custom = alloca %union.unmatchedfp, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001217// CHECK-NEXT: bitcast
1218// CHECK-NEXT: call void @llvm.memcpy
1219// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1220
1221
1222TEST_UNINIT(emptyenum, emptyenum);
1223// CHECK-LABEL: @test_emptyenum_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001224// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001225// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001226// PATTERN-LABEL: @test_emptyenum_uninit()
1227// PATTERN: store i32 -1431655766, i32* %braces, align 4
1228// ZERO-LABEL: @test_emptyenum_uninit()
1229// ZERO: store i32 0, i32* %braces, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001230
1231TEST_BRACES(emptyenum, emptyenum);
1232// CHECK-LABEL: @test_emptyenum_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001233// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
1234// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001235// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1236
1237TEST_CUSTOM(emptyenum, emptyenum, { (emptyenum)42 });
1238// CHECK-LABEL: @test_emptyenum_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001239// CHECK: %custom = alloca i32, align [[ALIGN:[0-9]*]]
1240// CHECK-NEXT: store i32 42, i32* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001241// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1242
1243TEST_UNINIT(smallenum, smallenum);
1244// CHECK-LABEL: @test_smallenum_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001245// CHECK: %uninit = alloca i32, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001246// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001247// PATTERN-LABEL: @test_smallenum_uninit()
1248// PATTERN: store i32 -1431655766, i32* %braces, align 4
1249// ZERO-LABEL: @test_smallenum_uninit()
1250// ZERO: store i32 0, i32* %braces, align 4
JF Bastienc70f65e2018-08-07 03:12:52 +00001251
1252TEST_BRACES(smallenum, smallenum);
1253// CHECK-LABEL: @test_smallenum_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001254// CHECK: %braces = alloca i32, align [[ALIGN:[0-9]*]]
1255// CHECK-NEXT: store i32 0, i32* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001256// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1257
1258TEST_CUSTOM(smallenum, smallenum, { (smallenum)42 });
1259// CHECK-LABEL: @test_smallenum_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001260// CHECK: %custom = alloca i32, align [[ALIGN:[0-9]*]]
1261// CHECK-NEXT: store i32 42, i32* %custom, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001262// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1263
1264
1265TEST_UNINIT(intvec16, int __attribute__((vector_size(16))));
1266// CHECK-LABEL: @test_intvec16_uninit()
JF Bastiencc365c32018-08-07 22:43:44 +00001267// CHECK: %uninit = alloca <4 x i32>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001268// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001269// PATTERN-LABEL: @test_intvec16_uninit()
1270// PATTERN: store <4 x i32> <i32 -1431655766, i32 -1431655766, i32 -1431655766, i32 -1431655766>, <4 x i32>* %uninit, align 16
1271// ZERO-LABEL: @test_intvec16_uninit()
1272// ZERO: store <4 x i32> zeroinitializer, <4 x i32>* %uninit, align 16
JF Bastienc70f65e2018-08-07 03:12:52 +00001273
1274TEST_BRACES(intvec16, int __attribute__((vector_size(16))));
1275// CHECK-LABEL: @test_intvec16_braces()
JF Bastiencc365c32018-08-07 22:43:44 +00001276// CHECK: %braces = alloca <4 x i32>, align [[ALIGN:[0-9]*]]
1277// CHECK-NEXT: store <4 x i32> zeroinitializer, <4 x i32>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001278// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1279
JF Bastien14daa202018-12-18 05:12:21 +00001280TEST_CUSTOM(intvec16, int __attribute__((vector_size(16))), { 0x44444444, 0x44444444, 0x44444444, 0x44444444 });
JF Bastienc70f65e2018-08-07 03:12:52 +00001281// CHECK-LABEL: @test_intvec16_custom()
JF Bastiencc365c32018-08-07 22:43:44 +00001282// CHECK: %custom = alloca <4 x i32>, align [[ALIGN:[0-9]*]]
1283// 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 +00001284// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1285
1286TEST_UNINIT(longlongvec32, long long __attribute__((vector_size(32))));
1287// CHECK-LABEL: @test_longlongvec32_uninit()
JF Bastien81377932018-08-07 04:44:13 +00001288// CHECK: %uninit = alloca <4 x i64>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001289// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001290// PATTERN-LABEL: @test_longlongvec32_uninit()
1291// PATTERN: store <4 x i64> <i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206>, <4 x i64>* %uninit, align 32
1292// ZERO-LABEL: @test_longlongvec32_uninit()
1293// ZERO: store <4 x i64> zeroinitializer, <4 x i64>* %uninit, align 32
JF Bastienc70f65e2018-08-07 03:12:52 +00001294
1295TEST_BRACES(longlongvec32, long long __attribute__((vector_size(32))));
1296// CHECK-LABEL: @test_longlongvec32_braces()
JF Bastien81377932018-08-07 04:44:13 +00001297// CHECK: %braces = alloca <4 x i64>, align [[ALIGN:[0-9]*]]
1298// CHECK-NEXT: store <4 x i64> zeroinitializer, <4 x i64>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001299// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1300
1301TEST_CUSTOM(longlongvec32, long long __attribute__((vector_size(32))), { 0x3333333333333333, 0x3333333333333333, 0x3333333333333333, 0x3333333333333333 });
1302// CHECK-LABEL: @test_longlongvec32_custom()
JF Bastien81377932018-08-07 04:44:13 +00001303// CHECK: %custom = alloca <4 x i64>, align [[ALIGN:[0-9]*]]
1304// 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 +00001305// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1306
1307TEST_UNINIT(floatvec16, float __attribute__((vector_size(16))));
1308// CHECK-LABEL: @test_floatvec16_uninit()
JF Bastien81377932018-08-07 04:44:13 +00001309// CHECK: %uninit = alloca <4 x float>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001310// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001311// PATTERN-LABEL: @test_floatvec16_uninit()
1312// PATTERN: store <4 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000>, <4 x float>* %uninit, align 16
1313// ZERO-LABEL: @test_floatvec16_uninit()
1314// ZERO: store <4 x float> zeroinitializer, <4 x float>* %uninit, align 16
JF Bastienc70f65e2018-08-07 03:12:52 +00001315
1316TEST_BRACES(floatvec16, float __attribute__((vector_size(16))));
1317// CHECK-LABEL: @test_floatvec16_braces()
JF Bastien81377932018-08-07 04:44:13 +00001318// CHECK: %braces = alloca <4 x float>, align [[ALIGN:[0-9]*]]
1319// CHECK-NEXT: store <4 x float> zeroinitializer, <4 x float>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001320// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1321
1322TEST_CUSTOM(floatvec16, float __attribute__((vector_size(16))), { 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433 });
1323// CHECK-LABEL: @test_floatvec16_custom()
JF Bastien81377932018-08-07 04:44:13 +00001324// CHECK: %custom = alloca <4 x float>, align [[ALIGN:[0-9]*]]
1325// 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 +00001326// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1327
1328TEST_UNINIT(doublevec32, double __attribute__((vector_size(32))));
1329// CHECK-LABEL: @test_doublevec32_uninit()
JF Bastien81377932018-08-07 04:44:13 +00001330// CHECK: %uninit = alloca <4 x double>, align
JF Bastienc70f65e2018-08-07 03:12:52 +00001331// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
JF Bastien14daa202018-12-18 05:12:21 +00001332// PATTERN-LABEL: @test_doublevec32_uninit()
1333// PATTERN: store <4 x double> <double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF>, <4 x double>* %uninit, align 32
1334// ZERO-LABEL: @test_doublevec32_uninit()
1335// ZERO: store <4 x double> zeroinitializer, <4 x double>* %uninit, align 32
JF Bastienc70f65e2018-08-07 03:12:52 +00001336
1337TEST_BRACES(doublevec32, double __attribute__((vector_size(32))));
1338// CHECK-LABEL: @test_doublevec32_braces()
JF Bastien81377932018-08-07 04:44:13 +00001339// CHECK: %braces = alloca <4 x double>, align [[ALIGN:[0-9]*]]
1340// CHECK-NEXT: store <4 x double> zeroinitializer, <4 x double>* %braces, align [[ALIGN]]
JF Bastienc70f65e2018-08-07 03:12:52 +00001341// CHECK-NEXT: call void @{{.*}}used{{.*}}%braces)
1342
1343TEST_CUSTOM(doublevec32, double __attribute__((vector_size(32))), { 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433, 3.1415926535897932384626433 });
1344// CHECK-LABEL: @test_doublevec32_custom()
JF Bastien81377932018-08-07 04:44:13 +00001345// CHECK: %custom = alloca <4 x double>, align [[ALIGN:[0-9]*]]
1346// 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 +00001347// CHECK-NEXT: call void @{{.*}}used{{.*}}%custom)
1348
1349
1350} // extern "C"