[PATCH] D64385: GodeGen, NFC: Add test to track emitStoresForConstant behavior
This revision was automatically updated to reflect the committed changes. Closed by commit rL365706: GodeGen, NFC: Add test to track emitStoresForConstant behavior (authored by vitalybuka, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D64385?vs=208598=209083#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64385/new/ https://reviews.llvm.org/D64385 Files: cfe/trunk/test/CodeGen/init-memset.c 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[] = "aa"; + // 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[] = "az"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_pointers() { + // CHECK-LABEL: define void @test_pointers() + void *a[] = {, , , , , }; + // 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); +} 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[] = "aa"; + // 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[] = "az"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_pointers() { + // CHECK-LABEL: define void @test_pointers() + void *a[] = {, , , , , }; + // 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); +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64385: GodeGen, NFC: Add test to track emitStoresForConstant behavior
vitalybuka marked an inline comment as done. vitalybuka added inline comments. Comment at: clang/test/CodeGen/init-memset.c:36 + int a[16] = {0, 0, 1}; + // CHECK: call void @llvm.memset.{{.*}} + // CHECK: store i32 1 eugenis wrote: > Would it be useful to check the range of the memset? I.e. does it overlap > with the following store or not. I don't change ranges to it will only complicate tests Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64385/new/ https://reviews.llvm.org/D64385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64385: GodeGen, NFC: Add test to track emitStoresForConstant behavior
eugenis accepted this revision. eugenis added a comment. This revision is now accepted and ready to land. LGTM Comment at: clang/test/CodeGen/init-memset.c:36 + int a[16] = {0, 0, 1}; + // CHECK: call void @llvm.memset.{{.*}} + // CHECK: store i32 1 Would it be useful to check the range of the memset? I.e. does it overlap with the following store or not. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64385/new/ https://reviews.llvm.org/D64385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64385: GodeGen, NFC: Add test to track emitStoresForConstant behavior
vitalybuka updated this revision to Diff 208598. vitalybuka added a comment. add test Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64385/new/ https://reviews.llvm.org/D64385 Files: clang/test/CodeGen/init-memset.c Index: clang/test/CodeGen/init-memset.c === --- /dev/null +++ clang/test/CodeGen/init-memset.c @@ -0,0 +1,59 @@ +// 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_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[] = "aa"; + // 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[] = "az"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_pointers() { + // CHECK-LABEL: define void @test_pointers() + void *a[] = {, , , , , }; + // 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); +} Index: clang/test/CodeGen/init-memset.c === --- /dev/null +++ clang/test/CodeGen/init-memset.c @@ -0,0 +1,59 @@ +// 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_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[] = "aa"; + // 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[] = "az"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} + +void test_pointers() { + // CHECK-LABEL: define void @test_pointers() + void *a[] = {, , , , , }; + // 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); +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64385: GodeGen, NFC: Add test to track emitStoresForConstant behavior
vitalybuka updated this revision to Diff 208593. vitalybuka added a comment. format Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64385/new/ https://reviews.llvm.org/D64385 Files: clang/lib/CodeGen/CGDecl.cpp clang/test/CodeGen/init-memset.c Index: clang/test/CodeGen/init-memset.c === --- /dev/null +++ clang/test/CodeGen/init-memset.c @@ -0,0 +1,46 @@ +// 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_differen() { + // CHECK-LABEL: define void @test_differen() + 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[] = "aa"; + // 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[] = "az"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} Index: clang/lib/CodeGen/CGDecl.cpp === --- clang/lib/CodeGen/CGDecl.cpp +++ clang/lib/CodeGen/CGDecl.cpp @@ -974,10 +974,10 @@ return nullptr; // TODO: Remove. It's here just to keep behavior. - if (MFB.Other && MFB.Value && MFB.Value != llvm::ConstantInt::get(CGM.Int8Ty, 0)) + if (MFB.Other && MFB.Value && + MFB.Value != llvm::ConstantInt::get(CGM.Int8Ty, 0)) return nullptr; - if (!MFB.Value) { // We don't know most frequent byte, we may still completely initialize it // with small number of stores. Index: clang/test/CodeGen/init-memset.c === --- /dev/null +++ clang/test/CodeGen/init-memset.c @@ -0,0 +1,46 @@ +// 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_differen() { + // CHECK-LABEL: define void @test_differen() + 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[] = "aa"; + // 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[] = "az"; + // CHECK: call void @llvm.memcpy.{{.*}} + use(a); +} Index: clang/lib/CodeGen/CGDecl.cpp === --- clang/lib/CodeGen/CGDecl.cpp +++ clang/lib/CodeGen/CGDecl.cpp @@ -974,10 +974,10 @@ return nullptr; // TODO: Remove. It's here just to keep behavior. - if (MFB.Other && MFB.Value && MFB.Value != llvm::ConstantInt::get(CGM.Int8Ty, 0)) + if (MFB.Other && MFB.Value && + MFB.Value != llvm::ConstantInt::get(CGM.Int8Ty, 0)) return nullptr; - if (!MFB.Value) { // We don't know most frequent byte, we may still completely initialize it // with small number of stores. ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits