[llvm-commits] [llvm] r171298 - in /llvm/trunk: lib/Analysis/MemoryBuiltins.cpp test/Transforms/InstCombine/objsize.ll
NAKAMURA Takumi
geek4civic at gmail.com
Mon Dec 31 09:58:02 PST 2012
It broke bootstrap in stage1-clang (+Asserts)
In compiling APFloat.cpp,
clang-3.3: /home/bb/clang-3stage-x86_64-linux/llvm-project/llvm/include/llvm/ADT/APInt.h:888:
bool llvm::APInt::operator==(const llvm::APInt&) const: Assertion
`BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"'
failed.
Also broke dragonegg in Convert.cpp.
http://lab.llvm.org:8011/builders/dragonegg-x86_64-linux-gcc-4.5-self-host/builds/2792
2012/12/31 Nuno Lopes <nunoplopes at sapo.pt>:
> Author: nlopes
> Date: Mon Dec 31 07:52:36 2012
> New Revision: 171298
>
> URL: http://llvm.org/viewvc/llvm-project?rev=171298&view=rev
> Log:
> add support for PHI nodes to ObjectSizeOffsetVisitor
>
> Modified:
> llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
> llvm/trunk/test/Transforms/InstCombine/objsize.ll
>
> Modified: llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryBuiltins.cpp?rev=171298&r1=171297&r2=171298&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/MemoryBuiltins.cpp (original)
> +++ llvm/trunk/lib/Analysis/MemoryBuiltins.cpp Mon Dec 31 07:52:36 2012
> @@ -535,9 +535,20 @@
> return unknown();
> }
>
> -SizeOffsetType ObjectSizeOffsetVisitor::visitPHINode(PHINode&) {
> - // too complex to analyze statically.
> - return unknown();
> +SizeOffsetType ObjectSizeOffsetVisitor::visitPHINode(PHINode &PHI) {
> + if (PHI.getNumIncomingValues() == 0)
> + return unknown();
> +
> + SizeOffsetType Ret = compute(PHI.getIncomingValue(0));
> + if (!bothKnown(Ret))
> + return unknown();
> +
> + // verify that all PHI incoming pointers have the same size and offset
> + for (unsigned i = 1, e = PHI.getNumIncomingValues(); i != e; ++i) {
> + if (compute(PHI.getIncomingValue(i)) != Ret)
> + return unknown();
> + }
> + return Ret;
> }
>
> SizeOffsetType ObjectSizeOffsetVisitor::visitSelectInst(SelectInst &I) {
>
> Modified: llvm/trunk/test/Transforms/InstCombine/objsize.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/objsize.ll?rev=171298&r1=171297&r2=171298&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/objsize.ll (original)
> +++ llvm/trunk/test/Transforms/InstCombine/objsize.ll Mon Dec 31 07:52:36 2012
> @@ -256,3 +256,57 @@
> return:
> ret i32 7
> }
> +
> +declare noalias i8* @valloc(i32) nounwind
> +
> +; CHECK: @test14
> +; CHECK: ret i32 6
> +define i32 @test14(i32 %a) nounwind {
> + switch i32 %a, label %sw.default [
> + i32 1, label %sw.bb
> + i32 2, label %sw.bb1
> + ]
> +
> +sw.bb:
> + %call = tail call noalias i8* @malloc(i32 6) nounwind
> + br label %sw.epilog
> +
> +sw.bb1:
> + %call2 = tail call noalias i8* @calloc(i32 3, i32 2) nounwind
> + br label %sw.epilog
> +
> +sw.default:
> + %call3 = tail call noalias i8* @valloc(i32 6) nounwind
> + br label %sw.epilog
> +
> +sw.epilog:
> + %b.0 = phi i8* [ %call3, %sw.default ], [ %call2, %sw.bb1 ], [ %call, %sw.bb ]
> + %1 = tail call i32 @llvm.objectsize.i32(i8* %b.0, i1 false)
> + ret i32 %1
> +}
> +
> +; CHECK: @test15
> +; CHECK: llvm.objectsize
> +define i32 @test15(i32 %a) nounwind {
> + switch i32 %a, label %sw.default [
> + i32 1, label %sw.bb
> + i32 2, label %sw.bb1
> + ]
> +
> +sw.bb:
> + %call = tail call noalias i8* @malloc(i32 3) nounwind
> + br label %sw.epilog
> +
> +sw.bb1:
> + %call2 = tail call noalias i8* @calloc(i32 2, i32 1) nounwind
> + br label %sw.epilog
> +
> +sw.default:
> + %call3 = tail call noalias i8* @valloc(i32 3) nounwind
> + br label %sw.epilog
> +
> +sw.epilog:
> + %b.0 = phi i8* [ %call3, %sw.default ], [ %call2, %sw.bb1 ], [ %call, %sw.bb ]
> + %1 = tail call i32 @llvm.objectsize.i32(i8* %b.0, i1 false)
> + ret i32 %1
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list