[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