]> granicus.if.org Git - clang/commitdiff
GodeGen, NFC: Add test to track emitStoresForConstant behavior
authorVitaly Buka <vitalybuka@google.com>
Wed, 10 Jul 2019 22:47:07 +0000 (22:47 +0000)
committerVitaly Buka <vitalybuka@google.com>
Wed, 10 Jul 2019 22:47:07 +0000 (22:47 +0000)
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

test/CodeGen/init-memset.c [new file with mode: 0644]

diff --git a/test/CodeGen/init-memset.c b/test/CodeGen/init-memset.c
new file mode 100644 (file)
index 0000000..f05c4f7
--- /dev/null
@@ -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);
+}