Index: cfe/trunk/test/CodeGen/init-memset.c =================================================================== --- cfe/trunk/test/CodeGen/init-memset.c +++ cfe/trunk/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); +}