diff options
author | Chad Rosier <mcrosier@apple.com> | 2011-12-06 00:19:08 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2011-12-06 00:19:08 +0000 |
commit | dce42b75dc05befb4f43b664951c80752904bcde (patch) | |
tree | 003fbfe4533392278a6d1b2a5fb8e52af34ed017 | |
parent | f68a26b5d8e06a85edba97702884a74673b60807 (diff) |
Probably not a good idea to convert a single vector load into a memcpy. We
don't do this now, but add a test case to prevent this from happening in the
future.
Additional test for rdar://9892684
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145879 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/ValueTracking.cpp | 2 | ||||
-rw-r--r-- | test/Transforms/MemCpyOpt/form-memset.ll | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index 0d016e21f2..ecc83dfceb 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -1370,6 +1370,8 @@ Value *llvm::isBytewiseValue(Value *V) { return Val; } + + // FIXME: Vector types (e.g., <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>). // Conceptually, we could handle things like: // %a = zext i8 %X to i16 diff --git a/test/Transforms/MemCpyOpt/form-memset.ll b/test/Transforms/MemCpyOpt/form-memset.ll index e5ace33270..8832f897b0 100644 --- a/test/Transforms/MemCpyOpt/form-memset.ll +++ b/test/Transforms/MemCpyOpt/form-memset.ll @@ -236,3 +236,15 @@ define void @test7(i32* nocapture %c) nounwind optsize { ; CHECK: call void @llvm.memset.p0i8.i64(i8* %5, i8 -1, i64 20, i32 4, i1 false) ret void } + +%struct.test8 = type { [4 x i32] } + +define void @test8() { +entry: + %memtmp = alloca %struct.test8, align 16 + %0 = bitcast %struct.test8* %memtmp to <4 x i32>* + store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32>* %0, align 16 + ret void +; CHECK: @test8 +; CHECK: store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32>* %0, align 16 +} |