From b774834429430885d62835a9a60d58308dd72a88 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 21 Sep 2015 15:59:46 +0000 Subject: DAGCombiner: Replace store of FP constant after attemping store merges If storing multiple FP constants, some subset of the stores would be replaced with integers due to visit order, so MergeConsecutiveStores would only partially merge these. llvm-svn: 248169 --- .../PowerPC/vector-merge-store-fp-constants.ll | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 llvm/test/CodeGen/PowerPC/vector-merge-store-fp-constants.ll (limited to 'llvm/test/CodeGen/PowerPC/vector-merge-store-fp-constants.ll') diff --git a/llvm/test/CodeGen/PowerPC/vector-merge-store-fp-constants.ll b/llvm/test/CodeGen/PowerPC/vector-merge-store-fp-constants.ll new file mode 100644 index 00000000000..db92f20c352 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/vector-merge-store-fp-constants.ll @@ -0,0 +1,28 @@ +; RUN: llc -march=ppc64 -mtriple=ppc64-apple-darwin < %s | FileCheck %s + +; CHECK-LABEL: {{^}}_merge_8_float_zero_stores: +; CHECK: li [[ZEROREG:r[0-9]+]], 0 +; CHECK-DAG: std [[ZEROREG]], 0([[PTR:r[0-9]+]]) +; CHECK-DAG: std [[ZEROREG]], 8([[PTR]]) +; CHECK-DAG: std [[ZEROREG]], 16([[PTR]]) +; CHECK-DAG: std [[ZEROREG]], 24([[PTR]]) +; CHECK: blr +define void @merge_8_float_zero_stores(float* %ptr) { + %idx0 = getelementptr float, float* %ptr, i64 0 + %idx1 = getelementptr float, float* %ptr, i64 1 + %idx2 = getelementptr float, float* %ptr, i64 2 + %idx3 = getelementptr float, float* %ptr, i64 3 + %idx4 = getelementptr float, float* %ptr, i64 4 + %idx5 = getelementptr float, float* %ptr, i64 5 + %idx6 = getelementptr float, float* %ptr, i64 6 + %idx7 = getelementptr float, float* %ptr, i64 7 + store float 0.0, float* %idx0, align 4 + store float 0.0, float* %idx1, align 4 + store float 0.0, float* %idx2, align 4 + store float 0.0, float* %idx3, align 4 + store float 0.0, float* %idx4, align 4 + store float 0.0, float* %idx5, align 4 + store float 0.0, float* %idx6, align 4 + store float 0.0, float* %idx7, align 4 + ret void +} -- cgit v1.2.3