[llvm-commits] [llvm] r81810 - in /llvm/trunk: lib/Transforms/Scalar/MemCpyOptimizer.cpp test/Transforms/MemCpyOpt/align.ll
Dan Gohman
gohman at apple.com
Mon Sep 14 16:39:10 PDT 2009
Author: djg
Date: Mon Sep 14 18:39:10 2009
New Revision: 81810
URL: http://llvm.org/viewvc/llvm-project?rev=81810&view=rev
Log:
When extending a memset range past the front, set the alignment of the
memset region to the alignment of the new start address.
Added:
llvm/trunk/test/Transforms/MemCpyOpt/align.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=81810&r1=81809&r2=81810&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Mon Sep 14 18:39:10 2009
@@ -273,6 +273,7 @@
if (Start < I->Start) {
I->Start = Start;
I->StartPtr = SI->getPointerOperand();
+ I->Alignment = SI->getAlignment();
}
// Now we know that Start <= I->End and Start >= I->Start (so the startpoint
Added: llvm/trunk/test/Transforms/MemCpyOpt/align.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MemCpyOpt/align.ll?rev=81810&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/MemCpyOpt/align.ll (added)
+++ llvm/trunk/test/Transforms/MemCpyOpt/align.ll Mon Sep 14 18:39:10 2009
@@ -0,0 +1,18 @@
+; RUN: opt < %s -S -memcpyopt | FileCheck %s
+
+; The resulting memset is only 4-byte aligned, despite containing
+; a 16-byte alignmed store in the middle.
+
+; CHECK: call void @llvm.memset.i64(i8* %a01, i8 0, i64 16, i32 4)
+
+define void @foo(i32* %p) {
+ %a0 = getelementptr i32* %p, i64 0
+ store i32 0, i32* %a0, align 4
+ %a1 = getelementptr i32* %p, i64 1
+ store i32 0, i32* %a1, align 16
+ %a2 = getelementptr i32* %p, i64 2
+ store i32 0, i32* %a2, align 4
+ %a3 = getelementptr i32* %p, i64 3
+ store i32 0, i32* %a3, align 4
+ ret void
+}
More information about the llvm-commits
mailing list