From: Vitaly Buka Date: Wed, 10 Jul 2019 22:47:07 +0000 (+0000) Subject: GodeGen, NFC: Add test to track emitStoresForConstant behavior X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=28c1cd9da353c3d0e87eb5acf355e2a542199055;p=clang GodeGen, NFC: Add test to track emitStoresForConstant behavior Reviewers: eugenis, pcc Reviewed By: eugenis Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D64385 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@365706 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/init-memset.c b/test/CodeGen/init-memset.c new file mode 100644 index 0000000000..f05c4f783f --- /dev/null +++ b/test/CodeGen/init-memset.c @@ -0,0 +1,66 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O0 -emit-llvm -o - %s | FileCheck %s + +void use(void *); + +void test_small() { + // CHECK-LABEL: define void @test_small() + int a[] = {1, 2, 3, 4}; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_small_same() { + // CHECK-LABEL: define void @test_small_same() + char a[] = {'a', 'a', 'a', 'a'}; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_different() { + // CHECK-LABEL: define void @test_different() + int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_all_zeros() { + // CHECK-LABEL: define void @test_all_zeros() + int a[16] = {}; + // CHECK: call void @llvm.memset.{{.*}} + use(a); +} + +void test_all_a() { + // CHECK-LABEL: define void @test_all_a() + char a[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_most_zeros() { + // CHECK-LABEL: define void @test_most_zeros() + int a[16] = {0, 0, 1}; + // CHECK: call void @llvm.memset.{{.*}} + // CHECK: store i32 1 + use(a); +} + +void test_most_a() { + // CHECK-LABEL: define void @test_most_a() + char a[] = "aaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_pointers() { + // CHECK-LABEL: define void @test_pointers() + void *a[] = {&use, &use, &use, &use, &use, &use}; + // CHECK: call void @llvm.memset.{{.*}} + // CHECK: store i8* + // CHECK: store i8* + // CHECK: store i8* + // CHECK: store i8* + // CHECK: store i8* + // CHECK: store i8* + use(a); +}