[llvm-branch-commits] [llvm-branch] r69698 - in /llvm/branches/Apple/Dib: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll
Bill Wendling
isanbard at gmail.com
Tue Apr 21 12:06:19 PDT 2009
Author: void
Date: Tue Apr 21 14:06:18 2009
New Revision: 69698
URL: http://llvm.org/viewvc/llvm-project?rev=69698&view=rev
Log:
--- Merging (from foreign repository) r69680 into '.':
A test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll
U lib/Transforms/Scalar/ScalarReplAggregates.cpp
fix a crash on a pointless but valid zero-length memset, rdar://6808691
Added:
llvm/branches/Apple/Dib/test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll
Modified:
llvm/branches/Apple/Dib/lib/Transforms/Scalar/ScalarReplAggregates.cpp
Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/ScalarReplAggregates.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=69698&r1=69697&r2=69698&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original)
+++ llvm/branches/Apple/Dib/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Apr 21 14:06:18 2009
@@ -1431,20 +1431,22 @@
if (MemSetInst *MSI = dyn_cast<MemSetInst>(User)) {
assert(MSI->getRawDest() == Ptr && "Consistency error!");
unsigned NumBytes = cast<ConstantInt>(MSI->getLength())->getZExtValue();
- unsigned Val = cast<ConstantInt>(MSI->getValue())->getZExtValue();
-
- // Compute the value replicated the right number of times.
- APInt APVal(NumBytes*8, Val);
+ if (NumBytes != 0) {
+ unsigned Val = cast<ConstantInt>(MSI->getValue())->getZExtValue();
+
+ // Compute the value replicated the right number of times.
+ APInt APVal(NumBytes*8, Val);
- // Splat the value if non-zero.
- if (Val)
- for (unsigned i = 1; i != NumBytes; ++i)
- APVal |= APVal << 8;
-
- Value *Old = Builder.CreateLoad(NewAI, (NewAI->getName()+".in").c_str());
- Value *New = ConvertScalar_InsertValue(ConstantInt::get(APVal), Old,
- Offset, Builder);
- Builder.CreateStore(New, NewAI);
+ // Splat the value if non-zero.
+ if (Val)
+ for (unsigned i = 1; i != NumBytes; ++i)
+ APVal |= APVal << 8;
+
+ Value *Old = Builder.CreateLoad(NewAI, (NewAI->getName()+".in").c_str());
+ Value *New = ConvertScalar_InsertValue(ConstantInt::get(APVal), Old,
+ Offset, Builder);
+ Builder.CreateStore(New, NewAI);
+ }
MSI->eraseFromParent();
continue;
}
Added: llvm/branches/Apple/Dib/test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll?rev=69698&view=auto
==============================================================================
--- llvm/branches/Apple/Dib/test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll (added)
+++ llvm/branches/Apple/Dib/test/Transforms/ScalarRepl/2009-04-21-ZeroLengthMemSet.ll Tue Apr 21 14:06:18 2009
@@ -0,0 +1,16 @@
+; RUN: llvm-as < %s | opt -scalarrepl | llvm-dis
+; rdar://6808691
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
+target triple = "x86_64-apple-darwin9.0"
+ type <{ i32, i16, i8, i8, i64, i64, i16, [0 x i16] }>
+
+define i32 @foo() {
+entry:
+ %.compoundliteral = alloca %0
+ %tmp228 = getelementptr %0* %.compoundliteral, i32 0, i32 7
+ %tmp229 = bitcast [0 x i16]* %tmp228 to i8*
+ call void @llvm.memset.i64(i8* %tmp229, i8 0, i64 0, i32 2)
+ unreachable
+}
+
+declare void @llvm.memset.i64(i8* nocapture, i8, i64, i32) nounwind
More information about the llvm-branch-commits
mailing list