blob: f05c4f783fb9f8105cb18427a7d92c13f6d3607f [file] [log] [blame]
Vitaly Bukae2639882019-07-10 22:47:07 +00001// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O0 -emit-llvm -o - %s | FileCheck %s
2
3void use(void *);
4
5void test_small() {
Fangrui Songdbc96b52020-02-03 10:09:39 -08006 // CHECK-LABEL: define void @test_small()
Vitaly Bukae2639882019-07-10 22:47:07 +00007 int a[] = {1, 2, 3, 4};
8 // CHECK: call void @llvm.memcpy.{{.*}}
9 use(a);
10}
11
12void test_small_same() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080013 // CHECK-LABEL: define void @test_small_same()
Vitaly Bukae2639882019-07-10 22:47:07 +000014 char a[] = {'a', 'a', 'a', 'a'};
15 // CHECK: call void @llvm.memcpy.{{.*}}
16 use(a);
17}
18
19void test_different() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080020 // CHECK-LABEL: define void @test_different()
Vitaly Bukae2639882019-07-10 22:47:07 +000021 int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
22 // CHECK: call void @llvm.memcpy.{{.*}}
23 use(a);
24}
25
26void test_all_zeros() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080027 // CHECK-LABEL: define void @test_all_zeros()
Vitaly Bukae2639882019-07-10 22:47:07 +000028 int a[16] = {};
29 // CHECK: call void @llvm.memset.{{.*}}
30 use(a);
31}
32
33void test_all_a() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080034 // CHECK-LABEL: define void @test_all_a()
Vitaly Bukae2639882019-07-10 22:47:07 +000035 char a[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
36 // CHECK: call void @llvm.memcpy.{{.*}}
37 use(a);
38}
39
40void test_most_zeros() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080041 // CHECK-LABEL: define void @test_most_zeros()
Vitaly Bukae2639882019-07-10 22:47:07 +000042 int a[16] = {0, 0, 1};
43 // CHECK: call void @llvm.memset.{{.*}}
44 // CHECK: store i32 1
45 use(a);
46}
47
48void test_most_a() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080049 // CHECK-LABEL: define void @test_most_a()
Vitaly Bukae2639882019-07-10 22:47:07 +000050 char a[] = "aaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
51 // CHECK: call void @llvm.memcpy.{{.*}}
52 use(a);
53}
54
55void test_pointers() {
Fangrui Songdbc96b52020-02-03 10:09:39 -080056 // CHECK-LABEL: define void @test_pointers()
Vitaly Bukae2639882019-07-10 22:47:07 +000057 void *a[] = {&use, &use, &use, &use, &use, &use};
58 // CHECK: call void @llvm.memset.{{.*}}
59 // CHECK: store i8*
60 // CHECK: store i8*
61 // CHECK: store i8*
62 // CHECK: store i8*
63 // CHECK: store i8*
64 // CHECK: store i8*
65 use(a);
66}