diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -954,19 +954,8 @@ llvm::MostFrequentByte MFB = llvm::getMostFrequentByte(Init, CGM.getDataLayout()); - if (0) { - // TODO: Use this branch and remove 'else'. Now we can do that for any - // value, but it requires tests updates, so I'll enable it in a separate - // patch. - if (MFB.Value && !MFB.Other) - return MFB.Value; - } else { - if (isa(Init)) { - assert(MFB.Value); - assert(!MFB.Other); - return MFB.Value; - } - } + if (MFB.Value && !MFB.Other) + return MFB.Value; // TODO: Tweak these constants or use "density". uint64_t SizeLimit = 32; diff --git a/clang/test/CodeGen/arm-swiftcall.c b/clang/test/CodeGen/arm-swiftcall.c --- a/clang/test/CodeGen/arm-swiftcall.c +++ b/clang/test/CodeGen/arm-swiftcall.c @@ -168,7 +168,7 @@ TEST(struct_2); // CHECK-LABEL: define {{.*}} @return_struct_2() // CHECK: [[RET:%.*]] = alloca [[REC:%.*]], align 4 -// CHECK: @llvm.memcpy +// CHECK: @llvm.memset // CHECK: [[CAST_TMP:%.*]] = bitcast [[REC]]* [[RET]] to [[AGG:{ i32, i32, float, float }]]* // CHECK: [[T0:%.*]] = getelementptr inbounds [[AGG]], [[AGG]]* [[CAST_TMP]], i32 0, i32 0 // CHECK: [[FIRST:%.*]] = load i32, i32* [[T0]], align 4 @@ -276,7 +276,7 @@ TEST(union_het_fp) // CHECK-LABEL: define {{.*}} @return_union_het_fp() // CHECK: [[RET:%.*]] = alloca [[REC:%.*]], align {{(4|8)}} -// CHECK: @llvm.memcpy +// CHECK: @llvm.memset // CHECK: [[CAST_TMP:%.*]] = bitcast [[REC]]* [[RET]] to [[AGG:{ i32, i32 }]]* // CHECK: [[T0:%.*]] = getelementptr inbounds [[AGG]], [[AGG]]* [[CAST_TMP]], i32 0, i32 0 // CHECK: [[FIRST:%.*]] = load i32, i32* [[T0]], align {{(4|8)}} @@ -311,7 +311,6 @@ // CHECK: call [[SWIFTCC]] void @take_union_het_fp(i32 [[FIRST]], i32 [[SECOND]]) // CHECK: ret void - typedef union { float f1; float f2; diff --git a/clang/test/CodeGen/dump-struct-builtin.c b/clang/test/CodeGen/dump-struct-builtin.c --- a/clang/test/CodeGen/dump-struct-builtin.c +++ b/clang/test/CodeGen/dump-struct-builtin.c @@ -51,7 +51,6 @@ // CHECK-NEXT: [[FORMAT_U8:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%llu\0A\00" // CHECK-NEXT: [[END_STRUCT_U8:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" -// CHECK: @__const.unit9.a = private unnamed_addr constant %struct.U9A { i8 97 }, align 1 // CHECK-NEXT: [[STRUCT_STR_U9:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U9A {\0A\00" // CHECK-NEXT: [[FIELD_U9:@[0-9]+]] = private unnamed_addr constant [10 x i8] c"char a : \00" // CHECK-NEXT: [[FORMAT_U9:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%c\0A\00" @@ -95,13 +94,11 @@ // CHECK-NEXT: [[FORMAT_U15:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%p\0A\00" // CHECK-NEXT: [[END_STRUCT_U15:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" -// CHECK: @__const.unit16.a = private unnamed_addr constant %struct.U16A { i8 12 }, align 1 // CHECK-NEXT: [[STRUCT_STR_U16:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U16A {\0A\00" // CHECK-NEXT: [[FIELD_U16:@[0-9]+]] = private unnamed_addr constant [13 x i8] c"uint8_t a : \00" // CHECK-NEXT: [[FORMAT_U16:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%hhu\0A\00" // CHECK-NEXT: [[END_STRUCT_U16:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" -// CHECK: @__const.unit17.a = private unnamed_addr constant %struct.U17A { i8 12 }, align 1 // CHECK-NEXT: [[STRUCT_STR_U17:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U17A {\0A\00" // CHECK-NEXT: [[FIELD_U17:@[0-9]+]] = private unnamed_addr constant [12 x i8] c"int8_t a : \00" // CHECK-NEXT: [[FORMAT_U17:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%hhd\0A\00" diff --git a/clang/test/CodeGen/init-memset.c b/clang/test/CodeGen/init-memset.c --- a/clang/test/CodeGen/init-memset.c +++ b/clang/test/CodeGen/init-memset.c @@ -12,7 +12,7 @@ void test_small_same() { // CHECK-LABEL: define void @test_small_same() char a[] = {'a', 'a', 'a', 'a'}; - // CHECK: call void @llvm.memcpy.{{.*}} + // CHECK: call void @llvm.memset.{{.*}} use(a); } diff --git a/clang/test/CodeGen/windows-swiftcall.c b/clang/test/CodeGen/windows-swiftcall.c --- a/clang/test/CodeGen/windows-swiftcall.c +++ b/clang/test/CodeGen/windows-swiftcall.c @@ -5,8 +5,6 @@ #define ERROR __attribute__((swift_error_result)) #define CONTEXT __attribute__((swift_context)) -// CHECK: [[STRUCT2_RESULT:@.*]] = private {{.*}} constant [[STRUCT2_TYPE:%.*]] { i32 0, i8 0, i8 undef, i8 0, i32 0, i32 0 } - /*****************************************************************************/ /****************************** PARAMETER ABIS *******************************/ /*****************************************************************************/ @@ -146,9 +144,9 @@ } struct_2; TEST(struct_2); // CHECK-LABEL: define dso_local swiftcc { i64, i64 } @return_struct_2() {{.*}}{ -// CHECK: [[RET:%.*]] = alloca [[STRUCT2_TYPE]], align 4 +// CHECK: [[RET:%.*]] = alloca [[STRUCT2_TYPE:%.*]], align 4 // CHECK: [[CASTVAR:%.*]] = bitcast {{.*}} [[RET]] -// CHECK: call void @llvm.memcpy{{.*}}({{.*}}[[CASTVAR]], {{.*}}[[STRUCT2_RESULT]] +// CHECK: call void @llvm.memset{{.*}}({{.*}}[[CASTVAR]], {{.*}} // CHECK: [[CAST:%.*]] = bitcast [[STRUCT2_TYPE]]* [[RET]] to { i64, i64 }* // CHECK: [[GEP0:%.*]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* [[CAST]], i32 0, i32 0 // CHECK: [[T0:%.*]] = load i64, i64* [[GEP0]], align 4 @@ -249,7 +247,7 @@ // CHECK-LABEL: define dso_local swiftcc i64 @return_union_het_fp() // CHECK: [[RET:%.*]] = alloca [[UNION:%.*]], align 8 // CHECK: [[CAST:%.*]] = bitcast [[UNION]]* [[RET]] to i8* -// CHECK: call void @llvm.memcpy{{.*}}(i8* align {{[0-9]+}} [[CAST]] +// CHECK: call void @llvm.memset{{.*}}(i8* align {{[0-9]+}} [[CAST]] // CHECK: [[CAST:%.*]] = bitcast [[UNION]]* [[RET]] to { i64 }* // CHECK: [[GEP:%.*]] = getelementptr inbounds { i64 }, { i64 }* [[CAST]], i32 0, i32 0 // CHECK: [[R0:%.*]] = load i64, i64* [[GEP]], align 8 @@ -274,7 +272,6 @@ // CHECK: ret void // CHECK: } - typedef union { float f1; float f2; diff --git a/clang/test/CodeGenCXX/auto-var-init.cpp b/clang/test/CodeGenCXX/auto-var-init.cpp --- a/clang/test/CodeGenCXX/auto-var-init.cpp +++ b/clang/test/CodeGenCXX/auto-var-init.cpp @@ -34,193 +34,64 @@ // PATTERN-NOT: undef // ZERO-NOT: undef -// PATTERN-O0: @__const.test_empty_uninit.uninit = private unnamed_addr constant %struct.empty { i8 -86 }, align 1 -// PATTERN-O1-NOT: @__const.test_empty_uninit.uninit struct empty {}; -// PATTERN-O0: @__const.test_small_uninit.uninit = private unnamed_addr constant %struct.small { i8 -86 }, align 1 -// PATTERN-O0: @__const.test_small_custom.custom = private unnamed_addr constant %struct.small { i8 42 }, align 1 -// ZERO-O0: @__const.test_small_custom.custom = private unnamed_addr constant %struct.small { i8 42 }, align 1 -// PATTERN-O1-NOT: @__const.test_small_uninit.uninit -// PATTERN-O1-NOT: @__const.test_small_custom.custom -// ZERO-O1-NOT: @__const.test_small_custom.custom struct small { char c; }; -// PATTERN-O0: @__const.test_smallinit_uninit.uninit = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1 -// PATTERN-O0: @__const.test_smallinit_braces.braces = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1 -// PATTERN-O0: @__const.test_smallinit_custom.custom = private unnamed_addr constant %struct.smallinit { i8 -86 }, align 1 -// PATTERN-O1-NOT: @__const.test_smallinit_uninit.uninit -// PATTERN-O1-NOT: @__const.test_smallinit_braces.braces -// PATTERN-O1-NOT: @__const.test_smallinit_custom.custom struct smallinit { char c = 42; }; -// PATTERN-O0: @__const.test_smallpartinit_uninit.uninit = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1 -// PATTERN-O0: @__const.test_smallpartinit_braces.braces = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1 -// PATTERN-O0: @__const.test_smallpartinit_custom.custom = private unnamed_addr constant %struct.smallpartinit { i8 -86, i8 -86 }, align 1 -// PATTERN-O1-NOT: @__const.test_smallpartinit_uninit.uninit -// PATTERN-O1-NOT: @__const.test_smallpartinit_braces.braces -// PATTERN-O1-NOT: @__const.test_smallpartinit_custom.custom struct smallpartinit { char c = 42, d; }; -// PATTERN-O0: @__const.test_nullinit_uninit.uninit = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8 -// PATTERN-O0: @__const.test_nullinit_braces.braces = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8 -// PATTERN-O0: @__const.test_nullinit_custom.custom = private unnamed_addr constant %struct.nullinit { i8* inttoptr (i64 -6148914691236517206 to i8*) }, align 8 -// PATTERN-O1-NOT: @__const.test_nullinit_uninit.uninit -// PATTERN-O1-NOT: @__const.test_nullinit_braces.braces -// PATTERN-O1-NOT: @__const.test_nullinit_custom.custom struct nullinit { char* null = nullptr; }; -// PATTERN-O0: @__const.test_padded_uninit.uninit = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4 // PATTERN-O0: @__const.test_padded_custom.custom = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, align 4 // ZERO-O0: @__const.test_padded_custom.custom = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, align 4 -// PATTERN-O1-NOT: @__const.test_padded_uninit.uninit -// PATTERN-O1-NOT: @__const.test_padded_custom.custom -// ZERO-O1-NOT: @__const.test_padded_custom.custom struct padded { char c; int i; }; -// PATTERN-O0: @__const.test_paddednullinit_uninit.uninit = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4 -// PATTERN-O0: @__const.test_paddednullinit_braces.braces = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4 -// PATTERN-O0: @__const.test_paddednullinit_custom.custom = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_paddednullinit_uninit.uninit -// PATTERN-O1-NOT: @__const.test_paddednullinit_braces.braces -// PATTERN-O1-NOT: @__const.test_paddednullinit_custom.custom struct paddednullinit { char c = 0; int i = 0; }; -// PATTERN-O0: @__const.test_paddedpacked_uninit.uninit = private unnamed_addr constant %struct.paddedpacked <{ i8 -86, i32 -1431655766 }>, align 1 // PATTERN: @__const.test_paddedpacked_custom.custom = private unnamed_addr constant %struct.paddedpacked <{ i8 42, i32 13371337 }>, align 1 // ZERO: @__const.test_paddedpacked_custom.custom = private unnamed_addr constant %struct.paddedpacked <{ i8 42, i32 13371337 }>, align 1 struct paddedpacked { char c; int i; } __attribute__((packed)); -// PATTERN-O0: @__const.test_paddedpackedarray_uninit.uninit = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 -86, i32 -1431655766 }>, %struct.paddedpacked <{ i8 -86, i32 -1431655766 }>] }, align 1 // PATTERN: @__const.test_paddedpackedarray_custom.custom = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }>] }, align 1 // ZERO: @__const.test_paddedpackedarray_custom.custom = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }>] }, align 1 struct paddedpackedarray { struct paddedpacked p[2]; }; -// PATTERN-O0: @__const.test_unpackedinpacked_uninit.uninit = private unnamed_addr constant <{ { i8, [3 x i8], i32 }, i8 }> <{ { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, i8 -86 }>, align 1 struct unpackedinpacked { padded a; char b; } __attribute__((packed)); -// PATTERN-O0: @__const.test_paddednested_uninit.uninit = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 } }, align 4 // PATTERN: @__const.test_paddednested_custom.custom = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, { i8, [3 x i8], i32 } { i8 43, [3 x i8] zeroinitializer, i32 13371338 } }, align 4 // ZERO: @__const.test_paddednested_custom.custom = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, { i8, [3 x i8], i32 } { i8 43, [3 x i8] zeroinitializer, i32 13371338 } }, align 4 struct paddednested { struct padded p1, p2; }; -// PATTERN-O0: @__const.test_paddedpackednested_uninit.uninit = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 -86, i32 -1431655766 }>, %struct.paddedpacked <{ i8 -86, i32 -1431655766 }> }, align 1 // PATTERN: @__const.test_paddedpackednested_custom.custom = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }> }, align 1 // ZERO: @__const.test_paddedpackednested_custom.custom = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }> }, align 1 struct paddedpackednested { struct paddedpacked p1, p2; }; -// PATTERN-O0: @__const.test_bitfield_uninit.uninit = private unnamed_addr constant %struct.bitfield { i8 -86, [3 x i8] c"\AA\AA\AA" }, align 4 // PATTERN-O0: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] c"\AA\AA\AA" }, align 4 // ZERO-O0: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] zeroinitializer }, align 4 -// PATTERN-O1-NOT: @__const.test_bitfield_uninit.uninit -// PATTERN-O1-NOT: @__const.test_bitfield_custom.custom -// ZERO-O1-NOT: @__const.test_bitfield_custom.custom struct bitfield { int i : 4; int j : 2; }; -// PATTERN-O0: @__const.test_bitfieldaligned_uninit.uninit = private unnamed_addr constant %struct.bitfieldaligned { i8 -86, [3 x i8] c"\AA\AA\AA", i8 -86, [3 x i8] c"\AA\AA\AA" }, align 4 // PATTERN-O0: @__const.test_bitfieldaligned_custom.custom = private unnamed_addr constant %struct.bitfieldaligned { i8 4, [3 x i8] c"\AA\AA\AA", i8 1, [3 x i8] c"\AA\AA\AA" }, align 4 // ZERO-O0: @__const.test_bitfieldaligned_custom.custom = private unnamed_addr constant %struct.bitfieldaligned { i8 4, [3 x i8] zeroinitializer, i8 1, [3 x i8] zeroinitializer }, align 4 -// PATTERN-O1-NOT: @__const.test_bitfieldaligned_uninit.uninit -// PATTERN-O1-NOT: @__const.test_bitfieldaligned_custom.custom -// ZERO-O1-NOT: @__const.test_bitfieldaligned_custom.custom struct bitfieldaligned { int i : 4; int : 0; int j : 2; }; struct 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; }; -// PATTERN-O0: @__const.test_arraytail_uninit.uninit = private unnamed_addr constant %struct.arraytail { i32 -1431655766, [0 x i32] zeroinitializer }, align 4 // PATTERN-O0: @__const.test_arraytail_custom.custom = private unnamed_addr constant %struct.arraytail { i32 57005, [0 x i32] zeroinitializer }, align 4 // ZERO-O0: @__const.test_arraytail_custom.custom = private unnamed_addr constant %struct.arraytail { i32 57005, [0 x i32] zeroinitializer }, align 4 -// PATTERN-O1-NOT: @__const.test_arraytail_uninit.uninit -// PATTERN-O1-NOT: @__const.test_arraytail_custom.custom -// ZERO-O1-NOT: @__const.test_arraytail_custom.custom struct arraytail { int i; int arr[]; }; -// PATTERN-O0: @__const.test_int1_uninit.uninit = private unnamed_addr constant [1 x i32] [i32 -1431655766], align 4 -// PATTERN-O0: @__const.test_int1_custom.custom = private unnamed_addr constant [1 x i32] [i32 858993459], align 4 -// ZERO-O0: @__const.test_int1_custom.custom = private unnamed_addr constant [1 x i32] [i32 858993459], align 4 -// PATTERN-O1-NOT: @__const.test_int1_uninit.uninit -// PATTERN-O1-NOT: @__const.test_int1_custom.custom -// ZERO-O1-NOT: @__const.test_int1_custom.custom - -// PATTERN-O0: @__const.test_bool4_uninit.uninit = private unnamed_addr constant [4 x i8] c"\AA\AA\AA\AA", align 1 -// PATTERN-O0: @__const.test_bool4_custom.custom = private unnamed_addr constant [4 x i8] c"\01\01\01\01", align 1 -// ZERO-O0: @__const.test_bool4_custom.custom = private unnamed_addr constant [4 x i8] c"\01\01\01\01", align 1 -// PATTERN-O1-NOT: @__const.test_bool4_uninit.uninit -// PATTERN-O1-NOT: @__const.test_bool4_custom.custom -// ZERO-O1-NOT: @__const.test_bool4_custom.custom // 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 // 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 -// PATTERN-O0: @__const.test_tailpad4_uninit.uninit = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }], align 16 -// PATTERN-O1-NOT: @__const.test_tailpad4_uninit.uninit // PATTERN: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }], align 16 // ZERO: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }], align 16 struct tailpad { short s; char c; }; -// PATTERN-O0: @__const.test_atomicnotlockfree_uninit.uninit = private unnamed_addr constant %struct.notlockfree { [4 x i64] [i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206, i64 -6148914691236517206] }, align 8 -// PATTERN-O1-NOT: @__const.test_atomicnotlockfree_uninit.uninit struct notlockfree { long long a[4]; }; -// PATTERN-O0: @__const.test_atomicpadded_uninit.uninit = private unnamed_addr constant { i8, [3 x i8], i32 } { i8 -86, [3 x i8] c"\AA\AA\AA", i32 -1431655766 }, align 8 -// PATTERN-O1-NOT: @__const.test_atomicpadded_uninit.uninit -// PATTERN-O0: @__const.test_atomictailpad_uninit.uninit = private unnamed_addr constant { i16, i8, [1 x i8] } { i16 -21846, i8 -86, [1 x i8] c"\AA" }, align 4 -// PATTERN-O1-NOT: @__const.test_atomictailpad_uninit.uninit -// PATTERN-O0: @__const.test_complexfloat_uninit.uninit = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4 -// PATTERN-O1-NOT: @__const.test_complexfloat_uninit.uninit -// PATTERN-O0: @__const.test_complexfloat_braces.braces = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4 -// PATTERN-O1-NOT: @__const.test_complexfloat_braces.braces -// PATTERN-O0: @__const.test_complexfloat_custom.custom = private unnamed_addr constant { float, float } { float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000 }, align 4 -// PATTERN-O1-NOT: @__const.test_complexfloat_custom.custom -// PATTERN-O0: @__const.test_complexdouble_uninit.uninit = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8 -// PATTERN-O1-NOT: @__const.test_complexdouble_uninit.uninit -// PATTERN-O0: @__const.test_complexdouble_braces.braces = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8 -// PATTERN-O1-NOT: @__const.test_complexdouble_braces.braces -// PATTERN-O0: @__const.test_complexdouble_custom.custom = private unnamed_addr constant { double, double } { double 0xFFFFFFFFFFFFFFFF, double 0xFFFFFFFFFFFFFFFF }, align 8 -// PATTERN-O1-NOT: @__const.test_complexdouble_custom.custom -// PATTERN-O0: @__const.test_semivolatile_uninit.uninit = private unnamed_addr constant %struct.semivolatile { i32 -1431655766, i32 -1431655766 }, align 4 -// PATTERN-O0: @__const.test_semivolatile_custom.custom = private unnamed_addr constant %struct.semivolatile { i32 1145324612, i32 1145324612 }, align 4 -// PATTERN-O1-NOT: @__const.test_semivolatile_custom.custom struct semivolatile { int i; volatile int vi; }; -// PATTERN-O0: @__const.test_semivolatileinit_uninit.uninit = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_semivolatileinit_uninit.uninit -// PATTERN-O0: @__const.test_semivolatileinit_braces.braces = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_semivolatileinit_braces.braces -// PATTERN-O0: @__const.test_semivolatileinit_custom.custom = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_semivolatileinit_custom.custom = private unnamed_addr constant %struct.semivolatileinit { i32 -1431655766, i32 -1431655766 }, align 4 -// ZERO-O0: @__const.test_semivolatile_custom.custom = private unnamed_addr constant %struct.semivolatile { i32 1145324612, i32 1145324612 }, align 4 -// ZERO-O1-NOT: @__const.test_semivolatile_custom.custom struct semivolatileinit { int i = 0x11111111; volatile int vi = 0x11111111; }; -// PATTERN-O0: @__const.test_base_uninit.uninit = private unnamed_addr constant %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, align 8 -// PATTERN-O1-NOT: @__const.test_base_uninit.uninit -// PATTERN-O0: @__const.test_base_braces.braces = private unnamed_addr constant %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, align 8 -// PATTERN-O1-NOT: @__const.test_base_braces.braces struct base { virtual ~base(); }; -// PATTERN-O0: @__const.test_derived_uninit.uninit = private unnamed_addr constant %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } }, align 8 -// PATTERN-O1-NOT: @__const.test_derived_uninit.uninit -// PATTERN-O0: @__const.test_derived_braces.braces = private unnamed_addr constant %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } }, align 8 -// PATTERN-O1-NOT: @__const.test_derived_braces.braces struct derived : public base {}; -// PATTERN-O0: @__const.test_virtualderived_uninit.uninit = private unnamed_addr constant %struct.virtualderived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } } }, align 8 -// PATTERN-O1-NOT: @__const.test_virtualderived_uninit.uninit -// PATTERN-O0: @__const.test_virtualderived_braces.braces = private unnamed_addr constant %struct.virtualderived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) }, %struct.derived { %struct.base { i32 (...)** inttoptr (i64 -6148914691236517206 to i32 (...)**) } } }, align 8 -// PATTERN-O1-NOT: @__const.test_virtualderived_braces.braces struct virtualderived : public virtual base, public virtual derived {}; -// PATTERN-O0: @__const.test_matching_uninit.uninit = private unnamed_addr constant %union.matching { i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_matching_uninit.uninit // PATTERN-O0: @__const.test_matching_custom.custom = private unnamed_addr constant { float } { float 6.145500e+04 }, align 4 -// PATTERN-O1-NOT: @__const.test_matching_custom.custom // ZERO-O0: @__const.test_matching_custom.custom = private unnamed_addr constant { float } { float 6.145500e+04 }, align 4 -// ZERO-O1-NOT: @__const.test_matching_custom.custom union matching { int i; float f; }; -// PATTERN-O0: @__const.test_matchingreverse_uninit.uninit = private unnamed_addr constant %union.matchingreverse { float 0xFFFFFFFFE0000000 }, align 4 -// PATTERN-O1-NOT: @__const.test_matchingreverse_uninit.uninit // PATTERN-O0: @__const.test_matchingreverse_custom.custom = private unnamed_addr constant { i32 } { i32 61455 }, align 4 -// PATTERN-O1-NOT: @__const.test_matchingreverse_custom.custom // ZERO-O0: @__const.test_matchingreverse_custom.custom = private unnamed_addr constant { i32 } { i32 61455 }, align 4 -// ZERO-O1-NOT: @__const.test_matchingreverse_custom.custom union matchingreverse { float f; int i; }; -// PATTERN-O0: @__const.test_unmatched_uninit.uninit = private unnamed_addr constant %union.unmatched { i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_unmatched_uninit.uninit // PATTERN-O0: @__const.test_unmatched_custom.custom = private unnamed_addr constant %union.unmatched { i32 1001242351 }, align 4 -// PATTERN-O1-NOT: @__const.test_unmatched_custom.custom // ZERO-O0: @__const.test_unmatched_custom.custom = private unnamed_addr constant %union.unmatched { i32 1001242351 }, align 4 -// ZERO-O1-NOT: @__const.test_unmatched_custom.custom union unmatched { char c; int i; }; -// PATTERN-O0: @__const.test_unmatchedreverse_uninit.uninit = private unnamed_addr constant %union.unmatchedreverse { i32 -1431655766 }, align 4 -// PATTERN-O1-NOT: @__const.test_unmatchedreverse_uninit.uninit // PATTERN-O0: @__const.test_unmatchedreverse_custom.custom = private unnamed_addr constant { i8, [3 x i8] } { i8 42, [3 x i8] c"\AA\AA\AA" }, align 4 -// PATTERN-O1-NOT: @__const.test_unmatchedreverse_custom.custom // ZERO-O0: @__const.test_unmatchedreverse_custom.custom = private unnamed_addr constant { i8, [3 x i8] } { i8 42, [3 x i8] zeroinitializer }, align 4 -// ZERO-O1-NOT: @__const.test_unmatchedreverse_custom.custom union unmatchedreverse { int i; char c; }; -// PATTERN-O0: @__const.test_unmatchedfp_uninit.uninit = private unnamed_addr constant %union.unmatchedfp { double 0xFFFFFFFFFFFFFFFF }, align 8 -// PATTERN-O1-NOT: @__const.test_unmatchedfp_uninit.uninit // PATTERN-O0: @__const.test_unmatchedfp_custom.custom = private unnamed_addr constant %union.unmatchedfp { double 0x400921FB54442D18 }, align 8 -// PATTERN-O1-NOT: @__const.test_unmatchedfp_custom.custom // ZERO-O0: @__const.test_unmatchedfp_custom.custom = private unnamed_addr constant %union.unmatchedfp { double 0x400921FB54442D18 }, align 8 -// ZERO-O1-NOT: @__const.test_unmatchedfp_custom.custom union unmatchedfp { float f; double d; }; enum emptyenum {}; enum smallenum { VALUE }; @@ -565,7 +436,7 @@ // CHECK: %uninit = alloca %struct.empty, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_empty_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_empty_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 1, i1 false) // PATTERN-O1: store i8 -86, {{.*}} align 1 // ZERO-LABEL: @test_empty_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -575,7 +446,7 @@ // CHECK-LABEL: @test_empty_braces() // CHECK: %braces = alloca %struct.empty, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK1-NEXT: call void @llvm.memcpy // CHECK-NEXT: call void @{{.*}}used{{.*}}%braces) TEST_UNINIT(small, small); @@ -583,7 +454,7 @@ // CHECK: %uninit = alloca %struct.small, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_small_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_small_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 1, i1 false) // PATTERN-O1: store i8 -86, {{.*}} align 1 // ZERO-LABEL: @test_small_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -600,7 +471,7 @@ // CHECK-LABEL: @test_small_custom() // CHECK: %custom = alloca %struct.small, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%custom) TEST_UNINIT(smallinit, smallinit); @@ -629,9 +500,10 @@ // CHECK-NEXT: call void @{{.*}}smallpartinit{{.*}}%uninit) // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_smallpartinit_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_smallpartinit_uninit.uninit -// PATTERN-O1: store i8 -86, {{.*}} align 1 -// PATTERN-O1: store i8 42, {{.*}} align 1 +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 2, i1 false) +// PATTERN-O1-LEGACY: store i16 -21846, {{.*}} align 2 +// PATTERN-O1-LEGACY: call void @_ZN13smallpartinitC1Ev +// PATTERN-O1-NEWPM: store i16 -21974, {{.*}} align 2 // ZERO-LABEL: @test_smallpartinit_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1-LEGACY: store i16 0, i16* %uninit, align 2 @@ -680,7 +552,7 @@ // CHECK: %uninit = alloca %struct.padded, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_padded_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_padded_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8 // ZERO-LABEL: @test_padded_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -706,7 +578,7 @@ // CHECK-NEXT: call void @{{.*}}paddednullinit{{.*}}%uninit) // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_paddednullinit_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddednullinit_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // PATTERN-O1-LEGACY: store i64 -6148914691236517206, i64* %uninit, align 8 // PATTERN-O1-NEWPM: store i64 2863311360, i64* %uninit, align 8 // ZERO-LABEL: @test_paddednullinit_uninit() @@ -736,11 +608,8 @@ // CHECK: %uninit = alloca %struct.paddedpacked, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_paddedpacked_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpacked_uninit.uninit -// PATTERN-O1: %[[C:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 0 -// PATTERN-O1 store i8 -86, i8* %[[C]], align -// PATTERN-O1: %[[I:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 1 -// PATTERN-O1: store i32 -1431655766, i32* %[[I]], align +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 5, i1 false) +// PATTERN-O1: call void @llvm.memset{{.*}}, i8 -86, i64 5, i1 false) // ZERO-LABEL: @test_paddedpacked_uninit() // ZERO: call void @llvm.memset{{.*}}, i8 0, @@ -764,7 +633,7 @@ // CHECK: %uninit = alloca %struct.paddedpackedarray, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_paddedpackedarray_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpackedarray_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 10, i1 false) // PATTERN-O1: getelementptr // PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}i8 -86, i64 10 // ZERO-LABEL: @test_paddedpackedarray_uninit() @@ -786,14 +655,14 @@ TEST_UNINIT(unpackedinpacked, unpackedinpacked); // CHECK-LABEL: @test_unpackedinpacked_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}}, i64 9, i1 false) +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 9, i1 false) TEST_UNINIT(paddednested, paddednested); // CHECK-LABEL: @test_paddednested_uninit() // CHECK: %uninit = alloca %struct.paddednested, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_paddednested_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddednested_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 16, i1 false) // PATTERN-O1: getelementptr // PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}, i8 -86, i64 16 // ZERO-LABEL: @test_paddednested_uninit() @@ -818,7 +687,7 @@ // CHECK: %uninit = alloca %struct.paddedpackednested, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_paddedpackednested_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpackednested_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 10, i1 false) // PATTERN-O1: getelementptr // PATTERN-O1: call void @llvm.memset.p0i8.i64(i8* nonnull align 1 %0, i8 -86, i64 10, i1 false // ZERO-LABEL: @test_paddedpackednested_uninit() @@ -843,7 +712,7 @@ // CHECK: %uninit = alloca %struct.bitfield, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_bitfield_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_bitfield_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // PATTERN-O1: store i32 -1431655766, i32* %uninit, align 4 // ZERO-LABEL: @test_bitfield_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -853,14 +722,14 @@ // CHECK-LABEL: @test_bitfield_braces() // CHECK: %braces = alloca %struct.bitfield, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%braces) TEST_CUSTOM(bitfield, bitfield, { 4, 1 }); // CHECK-LABEL: @test_bitfield_custom() // CHECK: %custom = alloca %struct.bitfield, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%custom) TEST_UNINIT(bitfieldaligned, bitfieldaligned); @@ -868,7 +737,7 @@ // CHECK: %uninit = alloca %struct.bitfieldaligned, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_bitfieldaligned_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_bitfieldaligned_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8 // ZERO-LABEL: @test_bitfieldaligned_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -878,7 +747,7 @@ // CHECK-LABEL: @test_bitfieldaligned_braces() // CHECK: %braces = alloca %struct.bitfieldaligned, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%braces) TEST_CUSTOM(bitfieldaligned, bitfieldaligned, { 4, 1 }); @@ -916,7 +785,7 @@ // CHECK: %uninit = alloca %struct.arraytail, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_arraytail_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_arraytail_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // PATTERN-O1: store i32 -1431655766, {{.*}} align 4 // ZERO-LABEL: @test_arraytail_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -959,7 +828,7 @@ // CHECK: %uninit = alloca [1 x i32], align [[ALIGN:[0-9]*]] // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_int1_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_int1_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // PATTERN-O1: store i32 -1431655766, {{.*}} align 4 // ZERO-LABEL: @test_int1_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -976,7 +845,7 @@ // CHECK-LABEL: @test_int1_custom() // CHECK: %custom = alloca [1 x i32], align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%custom) TEST_UNINIT(int64, int[64]); @@ -1007,7 +876,7 @@ // CHECK: %uninit = alloca [4 x i8], align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_bool4_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_bool4_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // PATTERN-O1: store i32 -1431655766, i32* %uninit, align 4 // ZERO-LABEL: @test_bool4_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -1024,7 +893,7 @@ // CHECK-LABEL: @test_bool4_custom() // CHECK: %custom = alloca [4 x i8], align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%custom) TEST_UNINIT(intptr4, int*[4]); @@ -1032,8 +901,8 @@ // CHECK: %uninit = alloca [4 x i32*], align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-O1-LABEL: @test_intptr4_uninit() -// PATTERN-O1: %1 = bitcast [4 x i32*]* %uninit to i8* -// PATTERN-O1-NEXT: call void @llvm.memset.p0i8.i64(i8* nonnull align 16 %1, i8 -86, i64 32, i1 false) +// PATTERN-O1: [[C:%[0-9]+]] = bitcast [4 x i32*]* %uninit to i8* +// PATTERN-O1: call void @llvm.memset.p0i8.i64(i8* nonnull align 16 [[C]], i8 -86, i64 32, i1 false) // ZERO-LABEL: @test_intptr4_uninit() // ZERO: call void @llvm.memset{{.*}}, i8 0, @@ -1056,7 +925,7 @@ // CHECK: %uninit = alloca [4 x %struct.tailpad], align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_tailpad4_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_tailpad4_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 16, i1 false) // PATTERN-O1: bitcast // PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}0, i8 -86, i64 16 // ZERO-LABEL: @test_tailpad4_uninit() @@ -1073,7 +942,7 @@ // CHECK-LABEL: @test_tailpad4_custom() // CHECK: %custom = alloca [4 x %struct.tailpad], align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%custom) TEST_UNINIT(tailpad9, tailpad[9]); @@ -1132,7 +1001,7 @@ // CHECK: %uninit = alloca %struct.notlockfree, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_atomicnotlockfree_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomicnotlockfree_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 32, i1 false) // PATTERN-O1: bitcast // PATTERN-O1: call void @llvm.memset{{.*}}({{.*}}, i8 -86, i64 32 // ZERO-LABEL: @test_atomicnotlockfree_uninit() @@ -1143,7 +1012,7 @@ // CHECK: %uninit = alloca %struct.padded, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_atomicpadded_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomicpadded_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // PATTERN-O1: store i64 -6148914691236517206, i64* %uninit, align 8 // ZERO-LABEL: @test_atomicpadded_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -1154,7 +1023,7 @@ // CHECK: %uninit = alloca %struct.tailpad, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_atomictailpad_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomictailpad_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // ZERO-LABEL: @test_atomictailpad_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i32 0, i32* %uninit, align 4 @@ -1164,11 +1033,8 @@ // CHECK: %uninit = alloca { float, float }, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_complexfloat_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_complexfloat_uninit.uninit -// PATTERN-O1: %[[F1:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 0 -// PATTERN-O1 store float 0xFFFFFFFFE0000000, float* %[[F1]], align -// PATTERN-O1: %[[F2:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 1 -// PATTERN-O1: store float 0xFFFFFFFFE0000000, float* %[[F2]], align +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -1, i64 8, i1 false) +// PATTERN-O1: store i64 -1, i64* %uninit, align 8 // ZERO-LABEL: @test_complexfloat_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, @@ -1197,7 +1063,7 @@ // CHECK: %uninit = alloca { double, double }, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_complexdouble_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_complexdouble_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -1, i64 16, i1 false) // ZERO-LABEL: @test_complexdouble_uninit() // ZERO: call void @llvm.memset{{.*}}, i8 0, @@ -1240,7 +1106,7 @@ // CHECK: %uninit = alloca %struct.semivolatile, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_semivolatile_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_semivolatile_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // ZERO-LABEL: @test_semivolatile_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i64 0, i64* %uninit, align 8 @@ -1256,7 +1122,7 @@ // CHECK-LABEL: @test_semivolatile_custom() // CHECK: %custom = alloca %struct.semivolatile, align // CHECK-O0: bitcast -// CHECK-O0: call void @llvm.memcpy +// CHECK-O0: call void @llvm.memset // CHECK-O0: call void @{{.*}}used{{.*}}%custom) // CHECK-O1: store i64 4919131752989213764, i64* %custom, align 8 @@ -1291,7 +1157,7 @@ // CHECK-NEXT: call void @{{.*}}base{{.*}}%uninit) // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_base_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_base_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // ZERO-LABEL: @test_base_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1-LEGACY: store i64 0, {{.*}} align 8 @@ -1311,7 +1177,7 @@ // CHECK-NEXT: call void @{{.*}}derived{{.*}}%uninit) // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_derived_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_derived_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 8, i1 false) // ZERO-LABEL: @test_derived_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1-LEGACY: store i64 0, {{.*}} align 8 @@ -1331,7 +1197,7 @@ // CHECK-NEXT: call void @{{.*}}virtualderived{{.*}}%uninit) // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_virtualderived_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_virtualderived_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 16, i1 false) // ZERO-LABEL: @test_virtualderived_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1-LEGACY: call void @llvm.memset{{.*}}, i8 0, @@ -1354,7 +1220,7 @@ // CHECK: %uninit = alloca %union.matching, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_matching_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_matching_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // ZERO-LABEL: @test_matching_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i32 0, {{.*}} align 4 @@ -1380,8 +1246,9 @@ // CHECK: %uninit = alloca %union.matchingreverse, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_matchingreverse_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_matchingreverse_uninit.uninit -// PATTERN-O1: store float 0xFFFFFFFFE0000000 +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -1, i64 4, i1 false) +// PATTERN-O1: [[F:%[0-9]+]] = bitcast %union.matchingreverse* %uninit to i32* +// PATTERN-O1: store i32 -1, i32* [[F]], align 4 // ZERO-LABEL: @test_matchingreverse_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i32 0, {{.*}} align 4 @@ -1406,7 +1273,7 @@ // CHECK: %uninit = alloca %union.unmatched, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_unmatched_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_unmatched_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // ZERO-LABEL: @test_unmatched_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i32 0, {{.*}} align 4 @@ -1415,7 +1282,7 @@ // CHECK-LABEL: @test_unmatched_braces() // CHECK: %braces = alloca %union.unmatched, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%braces) TEST_CUSTOM(unmatched, unmatched, { .i = 0x3badbeef }); @@ -1431,7 +1298,7 @@ // CHECK: %uninit = alloca %union.unmatchedreverse, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_unmatchedreverse_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_unmatchedreverse_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -86, i64 4, i1 false) // ZERO-LABEL: @test_unmatchedreverse_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i32 0, {{.*}} align 4 @@ -1447,7 +1314,7 @@ // CHECK-LABEL: @test_unmatchedreverse_custom() // CHECK: %custom = alloca %union.unmatchedreverse, align // CHECK-O0: bitcast -// CHECK-O0: call void @llvm.memcpy +// CHECK-O0: call void @llvm.memset // CHECK-O0: call void @{{.*}}used{{.*}}%custom) // PATTERN-O1: store i32 -1431655894, i32* {{.*}}, align 4 // ZERO-O1: store i32 42, i32* {{.*}}, align 4 @@ -1457,7 +1324,7 @@ // CHECK: %uninit = alloca %union.unmatchedfp, align // CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit) // PATTERN-LABEL: @test_unmatchedfp_uninit() -// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_unmatchedfp_uninit.uninit +// PATTERN-O0: call void @llvm.memset{{.*}}, i8 -1, i64 8, i1 false) // ZERO-LABEL: @test_unmatchedfp_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, // ZERO-O1: store i64 0, {{.*}} align 8 @@ -1466,7 +1333,7 @@ // CHECK-LABEL: @test_unmatchedfp_braces() // CHECK: %braces = alloca %union.unmatchedfp, align // CHECK-NEXT: bitcast -// CHECK-NEXT: call void @llvm.memcpy +// CHECK-NEXT: call void @llvm.memset // CHECK-NEXT: call void @{{.*}}used{{.*}}%braces) TEST_CUSTOM(unmatchedfp, unmatchedfp, { .d = 3.1415926535897932384626433 }); diff --git a/clang/test/CodeGenCXX/references.cpp b/clang/test/CodeGenCXX/references.cpp --- a/clang/test/CodeGenCXX/references.cpp +++ b/clang/test/CodeGenCXX/references.cpp @@ -281,7 +281,7 @@ struct a { int a : 10, b : 10; }; // CHECK-LABEL: define void @_ZN6PR95651fEv() void f() { - // CHECK: call void @llvm.memcpy + // CHECK: call void @llvm.memset a x = { 0, 0 }; // CHECK: [[WITH_SEVENTEEN:%[.a-zA-Z0-9]+]] = or i32 [[WITHOUT_SEVENTEEN:%[.a-zA-Z0-9]+]], 17 // CHECK: store i32 [[WITH_SEVENTEEN]], i32* [[XA:%[.a-zA-Z0-9]+]]