// 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); }