[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 15:28:32 PDT 2018


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/
> Transforms/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<FunctionAnalysisManagerModuleP
> roxy>(M).getManager();
> +  auto getPredicateInfo =
> +      [&FAM](Function &F) -> std::unique_ptr<PredicateInfo> {
> +    return make_unique<PredicateInfo>(F,
> +                                      FAM.getResult<
> DominatorTreeAnalysis>(F),
> +                                      FAM.getResult<
> AssumptionAnalysis>(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<DominatorTreeWrapperPass>(F).getDomTree(),
> +          this->getAnalysis<AssumptionCacheTracker>().
> getAssumptionCache(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/
> Transforms/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->
> OriginalOp));
> +    }
> +  }
> +
>    // 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).
> isOverdefined())
> -        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/
> new-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: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}
> 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/
> opt-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/
> opt-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/
> opt-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/
> Transforms/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/8be28c98/attachment-0001.html>


More information about the llvm-commits mailing list