diff options
author | Chris Lattner <sabre@nondot.org> | 2011-01-18 20:53:04 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-01-18 20:53:04 +0000 |
commit | 435b4d2eba723e9513453f20885244ad1d16e0d4 (patch) | |
tree | 7eab8b049d45014fefeccd382ce99a36a41f204f | |
parent | a461d4222877f43588da38c466145f38dd74e229 (diff) | |
download | external_llvm-435b4d2eba723e9513453f20885244ad1d16e0d4.zip external_llvm-435b4d2eba723e9513453f20885244ad1d16e0d4.tar.gz external_llvm-435b4d2eba723e9513453f20885244ad1d16e0d4.tar.bz2 |
fix rdar://8878965, a regression I introduced with the recent
llvm.objectsize changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123771 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/CodeGenPrepare.cpp | 4 | ||||
-rw-r--r-- | test/CodeGen/Generic/crash.ll | 32 |
2 files changed, 35 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/CodeGenPrepare.cpp b/lib/Transforms/Scalar/CodeGenPrepare.cpp index 72c8bf3..9536939 100644 --- a/lib/Transforms/Scalar/CodeGenPrepare.cpp +++ b/lib/Transforms/Scalar/CodeGenPrepare.cpp @@ -644,8 +644,10 @@ bool CodeGenPrepare::OptimizeCallInst(CallInst *CI) { // If the iterator instruction was recursively deleted, start over at the // start of the block. - if (IterHandle != CurInstIterator) + if (IterHandle != CurInstIterator) { CurInstIterator = BB->begin(); + SunkAddrs.clear(); + } return true; } diff --git a/test/CodeGen/Generic/crash.ll b/test/CodeGen/Generic/crash.ll index 7218565..0427398 100644 --- a/test/CodeGen/Generic/crash.ll +++ b/test/CodeGen/Generic/crash.ll @@ -6,3 +6,35 @@ @tags = global [1 x %struct.AVCodecTag*] [%struct.AVCodecTag* getelementptr inbounds ([0 x %struct.AVCodecTag]* @ff_codec_bmp_tags, i32 0, i32 0)] + +; rdar://8878965 + +%struct.CAMERA = type { [3 x double], [3 x double], [3 x double], [3 x double], [3 x double], [3 x double], double, double, i32, double, double, i32, double, i32* } + +define void @Parse_Camera(%struct.CAMERA** nocapture %Camera_Ptr) nounwind { +entry: +%.pre = load %struct.CAMERA** %Camera_Ptr, align 4 +%0 = getelementptr inbounds %struct.CAMERA* %.pre, i32 0, i32 1, i32 0 +%1 = getelementptr inbounds %struct.CAMERA* %.pre, i32 0, i32 1, i32 2 +br label %bb32 + +bb32: ; preds = %bb6 +%2 = load double* %0, align 4 +%3 = load double* %1, align 4 +%4 = load double* %0, align 4 +call void @Parse_Vector(double* %0) nounwind +%5 = call i32 @llvm.objectsize.i32(i8* undef, i1 false) +%6 = icmp eq i32 %5, -1 +br i1 %6, label %bb34, label %bb33 + +bb33: ; preds = %bb32 +unreachable + +bb34: ; preds = %bb32 +unreachable + +} + +declare void @Parse_Vector(double*) +declare i32 @llvm.objectsize.i32(i8*, i1) + |