[llvm] r337904 - Recommit r333268: [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions.

Alex L via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 25 17:42:53 PDT 2018


Hi again, Please ignore my previous email.
I realized that the stage 2 error happened because of your original commit,
and this commit fixed it.
Thanks,
Alex

On 25 July 2018 at 15:28, Alex L <arphaman at gmail.com> wrote:

> Hi,
>
> I believe this commit has started causing a Clang assertion failure when
> building stage2 with ThinLTO:
>
> [3249/3397] : && /Users/buildslave/jenkins/workspace/clang-stage2-
> Rthinlto/host-compiler/bin/clang++  -fno-stack-protector -fno-common
> -Wno-profile-instr-unprofiled -fPIC -fvisibility-inlines-hidden
> -Werror=date-time -Werror=unguarded-availability-new -std=c++11 -fmodules
> -fmodules-cache-path=/Users/buildslave/jenkins/workspace/
> clang-stage2-Rthinlto/clang-build/Build/module.cache -fcxx-modules
> -gmodules -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual
> -Wmissing-field-initializers -pedantic -Wno-long-long
> -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor
> -Wstring-conversion -fdiagnostics-color -flto=thin -fno-common
> -Woverloaded-virtual -Wno-nested-anon-types -O2 -g -DNDEBUG
> -Wl,-search_paths_first -Wl,-headerpad_max_install_names -flto=thin
> -Wl,-cache_path_lto,/Users/buildslave/jenkins/workspace/
> clang-stage2-Rthinlto/clang-build/Build/lto.cache    -Wl,-dead_strip
> -Wl,-object_path_lto,/Users/buildslave/jenkins/workspace/
> clang-stage2-Rthinlto/clang-build/Build/tools/clang/tools/
> clang-format/./clang-format-lto.o tools/clang/tools/clang-
> format/CMakeFiles/clang-format.dir/ClangFormat.cpp.o  -o bin/clang-format
>  -Wl,-rpath, at loader_path/../lib lib/libLLVMSupport.a lib/libclangBasic.a
> lib/libclangFormat.a lib/libclangRewrite.a lib/libclangToolingCore.a
> lib/libclangToolingInclusions.a lib/libclangToolingCore.a
> lib/libclangRewrite.a lib/libclangAST.a lib/libclangLex.a
> lib/libclangBasic.a lib/libLLVMCore.a lib/libLLVMMC.a
> lib/libLLVMBinaryFormat.a lib/libLLVMDebugInfoCodeView.a
> lib/libLLVMDebugInfoMSF.a lib/libLLVMSupport.a -lz -lcurses -lm
> lib/libLLVMDemangle.a && cd /Users/buildslave/jenkins/
> workspace/clang-stage2-Rthinlto/clang-build/Build/tools/clang/tools/clang-format
> && xcrun dsymutil /Users/buildslave/jenkins/workspace/clang-stage2-
> Rthinlto/clang-build/Build/bin/clang-format && /usr/bin/strip -Sxl
> /Users/buildslave/jenkins/workspace/clang-stage2-
> Rthinlto/clang-build/Build/bin/clang-format
>
> FAILED: bin/clang-format
> : && /Users/buildslave/jenkins/workspace/clang-stage2-
> Rthinlto/host-compiler/bin/clang++  -fno-stack-protector -fno-common
> -Wno-profile-instr-unprofiled -fPIC -fvisibility-inlines-hidden
> -Werror=date-time -Werror=unguarded-availability-new -std=c++11 -fmodules
> -fmodules-cache-path=/Users/buildslave/jenkins/workspace/
> clang-stage2-Rthinlto/clang-build/Build/module.cache -fcxx-modules
> -gmodules -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual
> -Wmissing-field-initializers -pedantic -Wno-long-long
> -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor
> -Wstring-conversion -fdiagnostics-color -flto=thin -fno-common
> -Woverloaded-virtual -Wno-nested-anon-types -O2 -g -DNDEBUG
> -Wl,-search_paths_first -Wl,-headerpad_max_install_names -flto=thin
> -Wl,-cache_path_lto,/Users/buildslave/jenkins/workspace/
> clang-stage2-Rthinlto/clang-build/Build/lto.cache    -Wl,-dead_strip
> -Wl,-object_path_lto,/Users/buildslave/jenkins/workspace/
> clang-stage2-Rthinlto/clang-build/Build/tools/clang/tools/
> clang-format/./clang-format-lto.o tools/clang/tools/clang-
> format/CMakeFiles/clang-format.dir/ClangFormat.cpp.o  -o bin/clang-format
>  -Wl,-rpath, at loader_path/../lib lib/libLLVMSupport.a lib/libclangBasic.a
> lib/libclangFormat.a lib/libclangRewrite.a lib/libclangToolingCore.a
> lib/libclangToolingInclusions.a lib/libclangToolingCore.a
> lib/libclangRewrite.a lib/libclangAST.a lib/libclangLex.a
> lib/libclangBasic.a lib/libLLVMCore.a lib/libLLVMMC.a
> lib/libLLVMBinaryFormat.a lib/libLLVMDebugInfoCodeView.a
> lib/libLLVMDebugInfoMSF.a lib/libLLVMSupport.a -lz -lcurses -lm
> lib/libLLVMDemangle.a && cd /Users/buildslave/jenkins/
> workspace/clang-stage2-Rthinlto/clang-build/Build/tools/clang/tools/clang-format
> && xcrun dsymutil /Users/buildslave/jenkins/workspace/clang-stage2-
> Rthinlto/clang-build/Build/bin/clang-format && /usr/bin/strip -Sxl
> /Users/buildslave/jenkins/workspace/clang-stage2-
> Rthinlto/clang-build/Build/bin/clang-format
>
> Assertion failed: (New->getType() == getType() && "replaceAllUses of value
> with new value of different type!"), function doRAUW, file
> /Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm/lib/IR/Value.cpp,
> line 413.
>
> clang-7: error: unable to execute command: Abort trap: 6
> clang-7: error: linker command failed due to signal (use -v to see
> invocation)
>
> I'm currently verifying if this commit is indeed the offender. I will
> revert it if that's confirmed.
> Let me know if you need assistance investigating/fixing the issue on
> Darwin.
>
> Thanks,
> Alex
>
>
>
> On 25 July 2018 at 04:13, Florian Hahn via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: fhahn
>> Date: Wed Jul 25 04:13:40 2018
>> New Revision: 337904
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=337904&view=rev
>> Log:
>> Recommit r333268: [IPSCCP] Use PredicateInfo to propagate facts from cmp
>> instructions.
>>
>> r337828 resolves a PredicateInfo issue with unnamed types.
>>
>> Original message:
>> This patch updates IPSCCP to use PredicateInfo to propagate
>> facts to true branches predicated by EQ and to false branches
>> predicated by NE.
>>
>> As a follow up, we should be able to extend it to also propagate
>> additional
>> facts about nonnull.
>>
>> Reviewers: davide, mssimpso, dberlin, efriedma
>>
>> Reviewed By: davide, dberlin
>>
>> Modified:
>>     llvm/trunk/include/llvm/Transforms/Scalar/SCCP.h
>>     llvm/trunk/lib/Transforms/IPO/SCCP.cpp
>>     llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
>>     llvm/trunk/test/Other/new-pm-lto-defaults.ll
>>     llvm/trunk/test/Other/opt-O2-pipeline.ll
>>     llvm/trunk/test/Other/opt-O3-pipeline.ll
>>     llvm/trunk/test/Other/opt-Os-pipeline.ll
>>     llvm/trunk/test/Transforms/IPConstantProp/musttail-call.ll
>>
>> Modified: llvm/trunk/include/llvm/Transforms/Scalar/SCCP.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> Transforms/Scalar/SCCP.h?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/Transforms/Scalar/SCCP.h (original)
>> +++ llvm/trunk/include/llvm/Transforms/Scalar/SCCP.h Wed Jul 25 04:13:40
>> 2018
>> @@ -21,11 +21,13 @@
>>  #ifndef LLVM_TRANSFORMS_SCALAR_SCCP_H
>>  #define LLVM_TRANSFORMS_SCALAR_SCCP_H
>>
>> +#include "llvm/ADT/STLExtras.h"
>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>  #include "llvm/IR/DataLayout.h"
>>  #include "llvm/IR/Function.h"
>>  #include "llvm/IR/Module.h"
>>  #include "llvm/IR/PassManager.h"
>> +#include "llvm/Transforms/Utils/PredicateInfo.h"
>>
>>  namespace llvm {
>>
>> @@ -37,7 +39,9 @@ public:
>>    PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
>>  };
>>
>> -bool runIPSCCP(Module &M, const DataLayout &DL, const TargetLibraryInfo
>> *TLI);
>> +bool runIPSCCP(
>> +    Module &M, const DataLayout &DL, const TargetLibraryInfo *TLI,
>> +    function_ref<std::unique_ptr<PredicateInfo>(Function &)>
>> getPredicateInfo);
>>  } // end namespace llvm
>>
>>  #endif // LLVM_TRANSFORMS_SCALAR_SCCP_H
>>
>> Modified: llvm/trunk/lib/Transforms/IPO/SCCP.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transform
>> s/IPO/SCCP.cpp?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/IPO/SCCP.cpp (original)
>> +++ llvm/trunk/lib/Transforms/IPO/SCCP.cpp Wed Jul 25 04:13:40 2018
>> @@ -1,4 +1,5 @@
>>  #include "llvm/Transforms/IPO/SCCP.h"
>> +#include "llvm/Analysis/AssumptionCache.h"
>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>  #include "llvm/Transforms/IPO.h"
>>  #include "llvm/Transforms/Scalar/SCCP.h"
>> @@ -8,7 +9,15 @@ using namespace llvm;
>>  PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) {
>>    const DataLayout &DL = M.getDataLayout();
>>    auto &TLI = AM.getResult<TargetLibraryAnalysis>(M);
>> -  if (!runIPSCCP(M, DL, &TLI))
>> +  auto &FAM = AM.getResult<FunctionAnalysisManagerModuleProxy>(M).
>> getManager();
>> +  auto getPredicateInfo =
>> +      [&FAM](Function &F) -> std::unique_ptr<PredicateInfo> {
>> +    return make_unique<PredicateInfo>(F,
>> +                                      FAM.getResult<DominatorTreeAna
>> lysis>(F),
>> +                                      FAM.getResult<AssumptionAnalys
>> is>(F));
>> +  };
>> +
>> +  if (!runIPSCCP(M, DL, &TLI, getPredicateInfo))
>>      return PreservedAnalyses::all();
>>    return PreservedAnalyses::none();
>>  }
>> @@ -34,10 +43,20 @@ public:
>>      const DataLayout &DL = M.getDataLayout();
>>      const TargetLibraryInfo *TLI =
>>          &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
>> -    return runIPSCCP(M, DL, TLI);
>> +
>> +    auto getPredicateInfo =
>> +        [this](Function &F) -> std::unique_ptr<PredicateInfo> {
>> +      return make_unique<PredicateInfo>(
>> +          F, this->getAnalysis<DominatorTre
>> eWrapperPass>(F).getDomTree(),
>> +          this->getAnalysis<AssumptionCacheTracker>().getAssumptionCac
>> he(F));
>> +    };
>> +
>> +    return runIPSCCP(M, DL, TLI, getPredicateInfo);
>>    }
>>
>>    void getAnalysisUsage(AnalysisUsage &AU) const override {
>> +    AU.addRequired<AssumptionCacheTracker>();
>> +    AU.addRequired<DominatorTreeWrapperPass>();
>>      AU.addRequired<TargetLibraryInfoWrapperPass>();
>>    }
>>  };
>> @@ -49,6 +68,7 @@ char IPSCCPLegacyPass::ID = 0;
>>  INITIALIZE_PASS_BEGIN(IPSCCPLegacyPass, "ipsccp",
>>                        "Interprocedural Sparse Conditional Constant
>> Propagation",
>>                        false, false)
>> +INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
>>  INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
>>  INITIALIZE_PASS_END(IPSCCPLegacyPass, "ipsccp",
>>                      "Interprocedural Sparse Conditional Constant
>> Propagation",
>>
>> Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transform
>> s/Scalar/SCCP.cpp?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Wed Jul 25 04:13:40 2018
>> @@ -55,6 +55,7 @@
>>  #include "llvm/Support/ErrorHandling.h"
>>  #include "llvm/Support/raw_ostream.h"
>>  #include "llvm/Transforms/Scalar.h"
>> +#include "llvm/Transforms/Utils/PredicateInfo.h"
>>  #include <cassert>
>>  #include <utility>
>>  #include <vector>
>> @@ -246,7 +247,21 @@ class SCCPSolver : public InstVisitor<SC
>>    using Edge = std::pair<BasicBlock *, BasicBlock *>;
>>    DenseSet<Edge> KnownFeasibleEdges;
>>
>> +  DenseMap<Function *, std::unique_ptr<PredicateInfo>> PredInfos;
>> +  DenseMap<Value *, SmallPtrSet<User *, 2>> AdditionalUsers;
>> +
>>  public:
>> +  void addPredInfo(Function &F, std::unique_ptr<PredicateInfo> PI) {
>> +    PredInfos[&F] = std::move(PI);
>> +  }
>> +
>> +  const PredicateBase *getPredicateInfoFor(Instruction *I) {
>> +    auto PI = PredInfos.find(I->getFunction());
>> +    if (PI == PredInfos.end())
>> +      return nullptr;
>> +    return PI->second->getPredicateInfoFor(I);
>> +  }
>> +
>>    SCCPSolver(const DataLayout &DL, const TargetLibraryInfo *tli)
>>        : DL(DL), TLI(tli) {}
>>
>> @@ -558,6 +573,26 @@ private:
>>        visit(*I);
>>    }
>>
>> +  // Add U as additional user of V.
>> +  void addAdditionalUser(Value *V, User *U) {
>> +    auto Iter = AdditionalUsers.insert({V, {}});
>> +    Iter.first->second.insert(U);
>> +  }
>> +
>> +  // Mark I's users as changed, including AdditionalUsers.
>> +  void markUsersAsChanged(Value *I) {
>> +    for (User *U : I->users())
>> +      if (auto *UI = dyn_cast<Instruction>(U))
>> +        OperandChangedState(UI);
>> +
>> +    auto Iter = AdditionalUsers.find(I);
>> +    if (Iter != AdditionalUsers.end()) {
>> +      for (User *U : Iter->second)
>> +        if (auto *UI = dyn_cast<Instruction>(U))
>> +          OperandChangedState(UI);
>> +    }
>> +  }
>> +
>>  private:
>>    friend class InstVisitor<SCCPSolver>;
>>
>> @@ -1119,6 +1154,65 @@ void SCCPSolver::visitCallSite(CallSite
>>    Function *F = CS.getCalledFunction();
>>    Instruction *I = CS.getInstruction();
>>
>> +  if (auto *II = dyn_cast<IntrinsicInst>(I)) {
>> +    if (II->getIntrinsicID() == Intrinsic::ssa_copy) {
>> +      if (ValueState[I].isOverdefined())
>> +        return;
>> +
>> +      auto *PI = getPredicateInfoFor(I);
>> +      if (!PI)
>> +        return;
>> +
>> +      auto *PBranch = dyn_cast<PredicateBranch>(getPredicateInfoFor(I));
>> +      if (!PBranch) {
>> +        mergeInValue(ValueState[I], I, getValueState(PI->OriginalOp));
>> +        return;
>> +      }
>> +
>> +      Value *CopyOf = I->getOperand(0);
>> +      Value *Cond = PBranch->Condition;
>> +
>> +      // Everything below relies on the condition being a comparison.
>> +      auto *Cmp = dyn_cast<CmpInst>(Cond);
>> +      if (!Cmp) {
>> +        mergeInValue(ValueState[I], I, getValueState(PI->OriginalOp));
>> +        return;
>> +      }
>> +
>> +      Value *CmpOp0 = Cmp->getOperand(0);
>> +      Value *CmpOp1 = Cmp->getOperand(1);
>> +      if (CopyOf != CmpOp0 && CopyOf != CmpOp1) {
>> +        mergeInValue(ValueState[I], I, getValueState(PI->OriginalOp));
>> +        return;
>> +      }
>> +
>> +      if (CmpOp0 != CopyOf)
>> +        std::swap(CmpOp0, CmpOp1);
>> +
>> +      LatticeVal OriginalVal = getValueState(CopyOf);
>> +      LatticeVal EqVal = getValueState(CmpOp1);
>> +      LatticeVal &IV = ValueState[I];
>> +      if (PBranch->TrueEdge && Cmp->getPredicate() == CmpInst::ICMP_EQ) {
>> +        addAdditionalUser(CmpOp1, I);
>> +        if (OriginalVal.isConstant())
>> +          mergeInValue(IV, I, OriginalVal);
>> +        else
>> +          mergeInValue(IV, I, EqVal);
>> +        return;
>> +      }
>> +      if (!PBranch->TrueEdge && Cmp->getPredicate() == CmpInst::ICMP_NE)
>> {
>> +        addAdditionalUser(CmpOp1, I);
>> +        if (OriginalVal.isConstant())
>> +          mergeInValue(IV, I, OriginalVal);
>> +        else
>> +          mergeInValue(IV, I, EqVal);
>> +        return;
>> +      }
>> +
>> +      return (void)mergeInValue(IV, I, getValueState(PBranch->Origina
>> lOp));
>> +    }
>> +  }
>> +
>>    // The common case is that we aren't tracking the callee, either
>> because we
>>    // are not doing interprocedural analysis or the callee is indirect,
>> or is
>>    // external.  Handle these cases first.
>> @@ -1238,9 +1332,7 @@ void SCCPSolver::Solve() {
>>        // since all of its users will have already been marked as
>> overdefined
>>        // Update all of the users of this instruction's value.
>>        //
>> -      for (User *U : I->users())
>> -        if (auto *UI = dyn_cast<Instruction>(U))
>> -          OperandChangedState(UI);
>> +      markUsersAsChanged(I);
>>      }
>>
>>      // Process the instruction work list.
>> @@ -1257,9 +1349,7 @@ void SCCPSolver::Solve() {
>>        // Update all of the users of this instruction's value.
>>        //
>>        if (I->getType()->isStructTy() || !getValueState(I).isOverdefine
>> d())
>> -        for (User *U : I->users())
>> -          if (auto *UI = dyn_cast<Instruction>(U))
>> -            OperandChangedState(UI);
>> +        markUsersAsChanged(I);
>>      }
>>
>>      // Process the basic block work list.
>> @@ -1798,8 +1888,9 @@ static void findReturnsToZap(Function &F
>>    }
>>  }
>>
>> -bool llvm::runIPSCCP(Module &M, const DataLayout &DL,
>> -                     const TargetLibraryInfo *TLI) {
>> +bool llvm::runIPSCCP(
>> +    Module &M, const DataLayout &DL, const TargetLibraryInfo *TLI,
>> +    function_ref<std::unique_ptr<PredicateInfo>(Function &)>
>> getPredicateInfo) {
>>    SCCPSolver Solver(DL, TLI);
>>
>>    // Loop over all functions, marking arguments to those with their
>> addresses
>> @@ -1808,6 +1899,7 @@ bool llvm::runIPSCCP(Module &M, const Da
>>      if (F.isDeclaration())
>>        continue;
>>
>> +    Solver.addPredInfo(F, getPredicateInfo(F));
>>      // Determine if we can track the function's return values. If so,
>> add the
>>      // function to the solver's set of return-tracked functions.
>>      if (canTrackReturnsInterprocedurally(&F))
>> @@ -1960,6 +2052,24 @@ bool llvm::runIPSCCP(Module &M, const Da
>>        F.getBasicBlockList().erase(DeadBB);
>>      }
>>      BlocksToErase.clear();
>> +
>> +    for (BasicBlock &BB : F) {
>> +      for (BasicBlock::iterator BI = BB.begin(), E = BB.end(); BI != E;)
>> {
>> +        Instruction *Inst = &*BI++;
>> +        if (const PredicateBase *PI = Solver.getPredicateInfoFor(Inst))
>> {
>> +          if (auto *II = dyn_cast<IntrinsicInst>(Inst)) {
>> +            if (II->getIntrinsicID() == Intrinsic::ssa_copy) {
>> +              Value *Op = II->getOperand(0);
>> +              Inst->replaceAllUsesWith(Op);
>> +              Inst->eraseFromParent();
>> +              continue;
>> +            }
>> +          }
>> +          Inst->replaceAllUsesWith(PI->OriginalOp);
>> +          Inst->eraseFromParent();
>> +        }
>> +      }
>> +    }
>>    }
>>
>>    // If we inferred constant or undef return values for a function, we
>> replaced
>>
>> Modified: llvm/trunk/test/Other/new-pm-lto-defaults.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/ne
>> w-pm-lto-defaults.ll?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Other/new-pm-lto-defaults.ll (original)
>> +++ llvm/trunk/test/Other/new-pm-lto-defaults.ll Wed Jul 25 04:13:40 2018
>> @@ -41,6 +41,8 @@
>>  ; CHECK-O2-NEXT: Running analysis: ProfileSummaryAnalysis
>>  ; CHECK-O2-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
>>  ; CHECK-O2-NEXT: Running pass: IPSCCPPass
>> +; CHECK-O2-DAG: Running analysis: AssumptionAnalysis on foo
>> +; CHECK-O2-DAG: Running analysis: DominatorTreeAnalysis on foo
>>  ; CHECK-O2-NEXT: Running pass: CalledValuePropagationPass
>>  ; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdap
>> tor<{{.*}}PostOrderFunctionAttrsPass>
>>  ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}SCC
>> @@ -57,8 +59,6 @@
>>  ; CHECK-O1-NEXT: Running pass: LowerTypeTestsPass
>>  ; CHECK-O2-NEXT: Running pass: GlobalOptPass
>>  ; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{
>> .*}}PromotePass>
>> -; CHECK-O2-NEXT: Running analysis: DominatorTreeAnalysis
>> -; CHECK-O2-NEXT: Running analysis: AssumptionAnalysis
>>  ; CHECK-O2-NEXT: Running pass: ConstantMergePass
>>  ; CHECK-O2-NEXT: Running pass: DeadArgumentEliminationPass
>>  ; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{
>> .*}}PassManager{{.*}}>
>>
>> Modified: llvm/trunk/test/Other/opt-O2-pipeline.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/op
>> t-O2-pipeline.ll?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Other/opt-O2-pipeline.ll (original)
>> +++ llvm/trunk/test/Other/opt-O2-pipeline.ll Wed Jul 25 04:13:40 2018
>> @@ -28,6 +28,7 @@
>>  ; CHECK-NEXT:     Force set function attributes
>>  ; CHECK-NEXT:     Infer set function attributes
>>  ; CHECK-NEXT:     Interprocedural Sparse Conditional Constant Propagation
>> +; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
>>  ; CHECK-NEXT:     Called Value Propagation
>>  ; CHECK-NEXT:     Global Variable Optimizer
>>  ; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
>> @@ -270,6 +271,9 @@
>>  ; CHECK-NEXT:       Module Verifier
>>  ; CHECK-NEXT:     Bitcode Writer
>>  ; CHECK-NEXT: Pass Arguments:
>> +; CHECK-NEXT:  FunctionPass Manager
>> +; CHECK-NEXT:     Dominator Tree Construction
>> +; CHECK-NEXT: Pass Arguments:
>>  ; CHECK-NEXT: Target Library Information
>>  ; CHECK-NEXT:   FunctionPass Manager
>>  ; CHECK-NEXT:     Dominator Tree Construction
>>
>> Modified: llvm/trunk/test/Other/opt-O3-pipeline.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/op
>> t-O3-pipeline.ll?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Other/opt-O3-pipeline.ll (original)
>> +++ llvm/trunk/test/Other/opt-O3-pipeline.ll Wed Jul 25 04:13:40 2018
>> @@ -30,6 +30,7 @@
>>  ; CHECK-NEXT:     FunctionPass Manager
>>  ; CHECK-NEXT:       Call-site splitting
>>  ; CHECK-NEXT:     Interprocedural Sparse Conditional Constant Propagation
>> +; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
>>  ; CHECK-NEXT:     Called Value Propagation
>>  ; CHECK-NEXT:     Global Variable Optimizer
>>  ; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
>> @@ -274,6 +275,9 @@
>>  ; CHECK-NEXT:       Module Verifier
>>  ; CHECK-NEXT:     Bitcode Writer
>>  ; CHECK-NEXT: Pass Arguments:
>> +; CHECK-NEXT:  FunctionPass Manager
>> +; CHECK-NEXT:     Dominator Tree Construction
>> +; CHECK-NEXT: Pass Arguments:
>>  ; CHECK-NEXT: Target Library Information
>>  ; CHECK-NEXT:   FunctionPass Manager
>>  ; CHECK-NEXT:     Dominator Tree Construction
>>
>> Modified: llvm/trunk/test/Other/opt-Os-pipeline.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/op
>> t-Os-pipeline.ll?rev=337904&r1=337903&r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Other/opt-Os-pipeline.ll (original)
>> +++ llvm/trunk/test/Other/opt-Os-pipeline.ll Wed Jul 25 04:13:40 2018
>> @@ -28,6 +28,7 @@
>>  ; CHECK-NEXT:     Force set function attributes
>>  ; CHECK-NEXT:     Infer set function attributes
>>  ; CHECK-NEXT:     Interprocedural Sparse Conditional Constant Propagation
>> +; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
>>  ; CHECK-NEXT:     Called Value Propagation
>>  ; CHECK-NEXT:     Global Variable Optimizer
>>  ; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
>> @@ -257,6 +258,9 @@
>>  ; CHECK-NEXT:       Module Verifier
>>  ; CHECK-NEXT:     Bitcode Writer
>>  ; CHECK-NEXT: Pass Arguments:
>> +; CHECK-NEXT:  FunctionPass Manager
>> +; CHECK-NEXT:     Dominator Tree Construction
>> +; CHECK-NEXT: Pass Arguments:
>>  ; CHECK-NEXT: Target Library Information
>>  ; CHECK-NEXT:   FunctionPass Manager
>>  ; CHECK-NEXT:     Dominator Tree Construction
>>
>> Modified: llvm/trunk/test/Transforms/IPConstantProp/musttail-call.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transfor
>> ms/IPConstantProp/musttail-call.ll?rev=337904&r1=337903&
>> r2=337904&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Transforms/IPConstantProp/musttail-call.ll (original)
>> +++ llvm/trunk/test/Transforms/IPConstantProp/musttail-call.ll Wed Jul
>> 25 04:13:40 2018
>> @@ -9,7 +9,7 @@ define i8* @start(i8 %v) {
>>    %c1 = icmp eq i8 %v, 0
>>    br i1 %c1, label %true, label %false
>>  true:
>> -  ; CHECK: %ca = musttail call i8* @side_effects(i8 %v)
>> +  ; CHECK: %ca = musttail call i8* @side_effects(i8 0)
>>    ; CHECK: ret i8* %ca
>>    %ca = musttail call i8* @side_effects(i8 %v)
>>    ret i8* %ca
>> @@ -34,7 +34,7 @@ define internal i8* @side_effects(i8 %v)
>>    ; is always `null`.
>>    ; The call can't be removed due to `external` call above, though.
>>
>> -  ; CHECK: %ca = musttail call i8* @start(i8 %v)
>> +  ; CHECK: %ca = musttail call i8* @start(i8 0)
>>    %ca = musttail call i8* @start(i8 %v)
>>
>>    ; Thus the result must be returned anyway
>>
>>
>> _______________________________________________
>> 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/20180725/3f0142c3/attachment.html>


More information about the llvm-commits mailing list