[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