[llvm-commits] [llvm] r171298 - in /llvm/trunk: lib/Analysis/MemoryBuiltins.cpp test/Transforms/InstCombine/objsize.ll

Benjamin Kramer benny.kra at gmail.com
Mon Dec 31 11:52:51 PST 2012


On 31.12.2012, at 18:58, NAKAMURA Takumi <geek4civic at gmail.com> wrote:

> 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

I reverted this change in r171318.

- Ben

> 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
> _______________________________________________
> 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