[llvm] r275756 - Revert r275678, "Revert "Revert r275027 - Let FuncAttrs infer the 'returned' argument attribute""
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 19 09:41:09 PDT 2016
Please see PR28610:
https://llvm.org/bugs/show_bug.cgi?id=28610
for a possible small test case.
On Sun, Jul 17, 2016 at 9:23 PM, NAKAMURA Takumi via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: chapuni
> Date: Sun Jul 17 22:23:25 2016
> New Revision: 275756
>
> URL: http://llvm.org/viewvc/llvm-project?rev=275756&view=rev
> Log:
> Revert r275678, "Revert "Revert r275027 - Let FuncAttrs infer the
> 'returned' argument attribute""
>
> This reverts also r275029, "Update Clang tests after adding inference for
> the returned argument attribute"
>
> It broke LTO build. Seems miscompilation.
>
> Modified:
> llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp
> llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll
> llvm/trunk/test/Transforms/FunctionAttrs/nocapture.ll
> llvm/trunk/test/Transforms/FunctionAttrs/readattrs.ll
>
> Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp?rev=275756&r1=275755&r2=275756&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Sun Jul 17 22:23:25
> 2016
> @@ -42,7 +42,6 @@ using namespace llvm;
> STATISTIC(NumReadNone, "Number of functions marked readnone");
> STATISTIC(NumReadOnly, "Number of functions marked readonly");
> STATISTIC(NumNoCapture, "Number of arguments marked nocapture");
> -STATISTIC(NumReturned, "Number of arguments marked returned");
> STATISTIC(NumReadNoneArg, "Number of arguments marked readnone");
> STATISTIC(NumReadOnlyArg, "Number of arguments marked readonly");
> STATISTIC(NumNoAlias, "Number of function returns marked noalias");
> @@ -484,53 +483,6 @@ determinePointerReadAttrs(Argument *A,
> return IsRead ? Attribute::ReadOnly : Attribute::ReadNone;
> }
>
> -/// Deduce returned attributes for the SCC.
> -static bool addArgumentReturnedAttrs(const SCCNodeSet &SCCNodes) {
> - bool Changed = false;
> -
> - AttrBuilder B;
> - B.addAttribute(Attribute::Returned);
> -
> - // Check each function in turn, determining if an argument is always
> returned.
> - for (Function *F : SCCNodes) {
> - // We can infer and propagate function attributes only when we know
> that the
> - // definition we'll get at link time is *exactly* the definition we
> see now.
> - // For more details, see GlobalValue::mayBeDerefined.
> - if (!F->hasExactDefinition())
> - continue;
> -
> - if (F->getReturnType()->isVoidTy())
> - continue;
> -
> - auto FindRetArg = [&]() -> Value * {
> - Value *RetArg = nullptr;
> - for (BasicBlock &BB : *F)
> - if (auto *Ret = dyn_cast<ReturnInst>(BB.getTerminator())) {
> - // Note that stripPointerCasts should look through functions
> with
> - // returned arguments.
> - Value *RetVal = Ret->getReturnValue()->stripPointerCasts();
> - if (RetVal->getType() == F->getReturnType() &&
> isa<Argument>(RetVal)) {
> - if (!RetArg)
> - RetArg = RetVal;
> - else if (RetArg != RetVal)
> - return nullptr;
> - }
> - }
> -
> - return RetArg;
> - };
> -
> - if (Value *RetArg = FindRetArg()) {
> - auto *A = cast<Argument>(RetArg);
> - A->addAttr(AttributeSet::get(F->getContext(), A->getArgNo() + 1,
> B));
> - ++NumReturned;
> - Changed = true;
> - }
> - }
> -
> - return Changed;
> -}
> -
> /// Deduce nocapture attributes for the SCC.
> static bool addArgumentAttrs(const SCCNodeSet &SCCNodes) {
> bool Changed = false;
> @@ -1072,7 +1024,6 @@ PreservedAnalyses PostOrderFunctionAttrs
> }
>
> bool Changed = false;
> - Changed |= addArgumentReturnedAttrs(SCCNodes);
> Changed |= addReadAttrs(SCCNodes, AARGetter);
> Changed |= addArgumentAttrs(SCCNodes);
>
> @@ -1138,7 +1089,6 @@ static bool runImpl(CallGraphSCC &SCC, A
> SCCNodes.insert(F);
> }
>
> - Changed |= addArgumentReturnedAttrs(SCCNodes);
> Changed |= addReadAttrs(SCCNodes, AARGetter);
> Changed |= addArgumentAttrs(SCCNodes);
>
>
> Modified:
> llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll?rev=275756&r1=275755&r2=275756&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll
> (original)
> +++ llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll Sun
> Jul 17 22:23:25 2016
> @@ -14,7 +14,7 @@ define i32* @b(i32 *%q) {
> ret i32* %tmp
> }
>
> -; CHECK: define i32* @c(i32* readnone returned %r)
> +; CHECK: define i32* @c(i32* readnone %r)
> @g = global i32 0
> define i32* @c(i32 *%r) {
> %a = icmp eq i32* %r, null
>
> Modified: llvm/trunk/test/Transforms/FunctionAttrs/nocapture.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/FunctionAttrs/nocapture.ll?rev=275756&r1=275755&r2=275756&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/FunctionAttrs/nocapture.ll (original)
> +++ llvm/trunk/test/Transforms/FunctionAttrs/nocapture.ll Sun Jul 17
> 22:23:25 2016
> @@ -1,7 +1,7 @@
> ; RUN: opt < %s -functionattrs -S | FileCheck %s
> @g = global i32* null ; <i32**> [#uses=1]
>
> -; CHECK: define i32* @c1(i32* readnone returned %q)
> +; CHECK: define i32* @c1(i32* readnone %q)
> define i32* @c1(i32* %q) {
> ret i32* %q
> }
> @@ -140,7 +140,7 @@ define void @test1_1(i8* %x1_1, i8* %y1_
> ret void
> }
>
> -; CHECK: define i8* @test1_2(i8* nocapture readnone %x1_2, i8* returned
> %y1_2)
> +; CHECK: define i8* @test1_2(i8* nocapture readnone %x1_2, i8* %y1_2)
> define i8* @test1_2(i8* %x1_2, i8* %y1_2) {
> call void @test1_1(i8* %x1_2, i8* %y1_2)
> store i32* null, i32** @g
> @@ -168,7 +168,7 @@ define void @test4_1(i8* %x4_1) {
> ret void
> }
>
> -; CHECK: define i8* @test4_2(i8* nocapture readnone %x4_2, i8* readnone
> returned %y4_2, i8* nocapture readnone %z4_2)
> +; CHECK: define i8* @test4_2(i8* nocapture readnone %x4_2, i8* readnone
> %y4_2, i8* nocapture readnone %z4_2)
> define i8* @test4_2(i8* %x4_2, i8* %y4_2, i8* %z4_2) {
> call void @test4_1(i8* null)
> store i32* null, i32** @g
>
> Modified: llvm/trunk/test/Transforms/FunctionAttrs/readattrs.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/FunctionAttrs/readattrs.ll?rev=275756&r1=275755&r2=275756&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/FunctionAttrs/readattrs.ll (original)
> +++ llvm/trunk/test/Transforms/FunctionAttrs/readattrs.ll Sun Jul 17
> 22:23:25 2016
> @@ -11,7 +11,7 @@ define void @test1_2(i8* %x1_2, i8* %y1_
> ret void
> }
>
> -; CHECK: define i8* @test2(i8* readnone returned %p)
> +; CHECK: define i8* @test2(i8* readnone %p)
> define i8* @test2(i8* %p) {
> store i32 0, i32* @x
> ret i8* %p
> @@ -53,7 +53,7 @@ define void @test7_1(i32* inalloca %a) {
> ret void
> }
>
> -; CHECK: define i32* @test8_1(i32* readnone returned %p)
> +; CHECK: define i32* @test8_1(i32* readnone %p)
> define i32* @test8_1(i32* %p) {
> entry:
> ret i32* %p
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160719/d3ba49c0/attachment.html>
More information about the llvm-commits
mailing list