[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