[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