<div dir="ltr">Hi,<div><br></div><div>I believe this commit has started causing a Clang assertion failure when building stage2 with ThinLTO:</div><div><br></div><div><div>[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,@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</div><div> </div><div>FAILED: bin/clang-format </div><div>: && /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,@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</div><div> </div><div>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.</div><div> </div><div>clang-7: error: unable to execute command: Abort trap: 6</div><div>clang-7: error: linker command failed due to signal (use -v to see invocation)</div></div><div><br></div><div>I'm currently verifying if this commit is indeed the offender. I will revert it if that's confirmed.</div><div>Let me know if you need assistance investigating/fixing the issue on Darwin.</div><div><br></div><div>Thanks,</div><div>Alex</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 25 July 2018 at 04:13, Florian Hahn via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: fhahn<br>
Date: Wed Jul 25 04:13:40 2018<br>
New Revision: 337904<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=337904&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=337904&view=rev</a><br>
Log:<br>
Recommit r333268: [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions.<br>
<br>
r337828 resolves a PredicateInfo issue with unnamed types.<br>
<br>
Original message:<br>
This patch updates IPSCCP to use PredicateInfo to propagate<br>
facts to true branches predicated by EQ and to false branches<br>
predicated by NE.<br>
<br>
As a follow up, we should be able to extend it to also propagate additional<br>
facts about nonnull.<br>
<br>
Reviewers: davide, mssimpso, dberlin, efriedma<br>
<br>
Reviewed By: davide, dberlin<br>
<br>
Modified:<br>
llvm/trunk/include/llvm/<wbr>Transforms/Scalar/SCCP.h<br>
llvm/trunk/lib/Transforms/IPO/<wbr>SCCP.cpp<br>
llvm/trunk/lib/Transforms/<wbr>Scalar/SCCP.cpp<br>
llvm/trunk/test/Other/new-pm-<wbr>lto-defaults.ll<br>
llvm/trunk/test/Other/opt-O2-<wbr>pipeline.ll<br>
llvm/trunk/test/Other/opt-O3-<wbr>pipeline.ll<br>
llvm/trunk/test/Other/opt-Os-<wbr>pipeline.ll<br>
llvm/trunk/test/Transforms/<wbr>IPConstantProp/musttail-call.<wbr>ll<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>Transforms/Scalar/SCCP.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar/SCCP.h?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Transforms/Scalar/SCCP.h?<wbr>rev=337904&r1=337903&r2=<wbr>337904&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>Transforms/Scalar/SCCP.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>Transforms/Scalar/SCCP.h Wed Jul 25 04:13:40 2018<br>
@@ -21,11 +21,13 @@<br>
#ifndef LLVM_TRANSFORMS_SCALAR_SCCP_H<br>
#define LLVM_TRANSFORMS_SCALAR_SCCP_H<br>
<br>
+#include "llvm/ADT/STLExtras.h"<br>
#include "llvm/Analysis/<wbr>TargetLibraryInfo.h"<br>
#include "llvm/IR/DataLayout.h"<br>
#include "llvm/IR/Function.h"<br>
#include "llvm/IR/Module.h"<br>
#include "llvm/IR/PassManager.h"<br>
+#include "llvm/Transforms/Utils/<wbr>PredicateInfo.h"<br>
<br>
namespace llvm {<br>
<br>
@@ -37,7 +39,9 @@ public:<br>
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);<br>
};<br>
<br>
-bool runIPSCCP(Module &M, const DataLayout &DL, const TargetLibraryInfo *TLI);<br>
+bool runIPSCCP(<br>
+ Module &M, const DataLayout &DL, const TargetLibraryInfo *TLI,<br>
+ function_ref<std::unique_ptr<<wbr>PredicateInfo>(Function &)> getPredicateInfo);<br>
} // end namespace llvm<br>
<br>
#endif // LLVM_TRANSFORMS_SCALAR_SCCP_H<br>
<br>
Modified: llvm/trunk/lib/Transforms/IPO/<wbr>SCCP.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/SCCP.cpp?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/IPO/SCCP.cpp?rev=<wbr>337904&r1=337903&r2=337904&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/IPO/<wbr>SCCP.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/IPO/<wbr>SCCP.cpp Wed Jul 25 04:13:40 2018<br>
@@ -1,4 +1,5 @@<br>
#include "llvm/Transforms/IPO/SCCP.h"<br>
+#include "llvm/Analysis/<wbr>AssumptionCache.h"<br>
#include "llvm/Analysis/<wbr>TargetLibraryInfo.h"<br>
#include "llvm/Transforms/IPO.h"<br>
#include "llvm/Transforms/Scalar/SCCP.<wbr>h"<br>
@@ -8,7 +9,15 @@ using namespace llvm;<br>
PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) {<br>
const DataLayout &DL = M.getDataLayout();<br>
auto &TLI = AM.getResult<<wbr>TargetLibraryAnalysis>(M);<br>
- if (!runIPSCCP(M, DL, &TLI))<br>
+ auto &FAM = AM.getResult<<wbr>FunctionAnalysisManagerModuleP<wbr>roxy>(M).getManager();<br>
+ auto getPredicateInfo =<br>
+ [&FAM](Function &F) -> std::unique_ptr<PredicateInfo> {<br>
+ return make_unique<PredicateInfo>(F,<br>
+ FAM.getResult<<wbr>DominatorTreeAnalysis>(F),<br>
+ FAM.getResult<<wbr>AssumptionAnalysis>(F));<br>
+ };<br>
+<br>
+ if (!runIPSCCP(M, DL, &TLI, getPredicateInfo))<br>
return PreservedAnalyses::all();<br>
return PreservedAnalyses::none();<br>
}<br>
@@ -34,10 +43,20 @@ public:<br>
const DataLayout &DL = M.getDataLayout();<br>
const TargetLibraryInfo *TLI =<br>
&getAnalysis<<wbr>TargetLibraryInfoWrapperPass>(<wbr>).getTLI();<br>
- return runIPSCCP(M, DL, TLI);<br>
+<br>
+ auto getPredicateInfo =<br>
+ [this](Function &F) -> std::unique_ptr<PredicateInfo> {<br>
+ return make_unique<PredicateInfo>(<br>
+ F, this->getAnalysis<<wbr>DominatorTreeWrapperPass>(F).<wbr>getDomTree(),<br>
+ this->getAnalysis<<wbr>AssumptionCacheTracker>().<wbr>getAssumptionCache(F));<br>
+ };<br>
+<br>
+ return runIPSCCP(M, DL, TLI, getPredicateInfo);<br>
}<br>
<br>
void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
+ AU.addRequired<<wbr>AssumptionCacheTracker>();<br>
+ AU.addRequired<<wbr>DominatorTreeWrapperPass>();<br>
AU.addRequired<<wbr>TargetLibraryInfoWrapperPass>(<wbr>);<br>
}<br>
};<br>
@@ -49,6 +68,7 @@ char IPSCCPLegacyPass::ID = 0;<br>
INITIALIZE_PASS_BEGIN(<wbr>IPSCCPLegacyPass, "ipsccp",<br>
"Interprocedural Sparse Conditional Constant Propagation",<br>
false, false)<br>
+INITIALIZE_PASS_DEPENDENCY(<wbr>DominatorTreeWrapperPass)<br>
INITIALIZE_PASS_DEPENDENCY(<wbr>TargetLibraryInfoWrapperPass)<br>
INITIALIZE_PASS_END(<wbr>IPSCCPLegacyPass, "ipsccp",<br>
"Interprocedural Sparse Conditional Constant Propagation",<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>Scalar/SCCP.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Scalar/SCCP.cpp?<wbr>rev=337904&r1=337903&r2=<wbr>337904&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>Scalar/SCCP.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>Scalar/SCCP.cpp Wed Jul 25 04:13:40 2018<br>
@@ -55,6 +55,7 @@<br>
#include "llvm/Support/ErrorHandling.h"<br>
#include "llvm/Support/raw_ostream.h"<br>
#include "llvm/Transforms/Scalar.h"<br>
+#include "llvm/Transforms/Utils/<wbr>PredicateInfo.h"<br>
#include <cassert><br>
#include <utility><br>
#include <vector><br>
@@ -246,7 +247,21 @@ class SCCPSolver : public InstVisitor<SC<br>
using Edge = std::pair<BasicBlock *, BasicBlock *>;<br>
DenseSet<Edge> KnownFeasibleEdges;<br>
<br>
+ DenseMap<Function *, std::unique_ptr<PredicateInfo><wbr>> PredInfos;<br>
+ DenseMap<Value *, SmallPtrSet<User *, 2>> AdditionalUsers;<br>
+<br>
public:<br>
+ void addPredInfo(Function &F, std::unique_ptr<PredicateInfo> PI) {<br>
+ PredInfos[&F] = std::move(PI);<br>
+ }<br>
+<br>
+ const PredicateBase *getPredicateInfoFor(<wbr>Instruction *I) {<br>
+ auto PI = PredInfos.find(I->getFunction(<wbr>));<br>
+ if (PI == PredInfos.end())<br>
+ return nullptr;<br>
+ return PI->second-><wbr>getPredicateInfoFor(I);<br>
+ }<br>
+<br>
SCCPSolver(const DataLayout &DL, const TargetLibraryInfo *tli)<br>
: DL(DL), TLI(tli) {}<br>
<br>
@@ -558,6 +573,26 @@ private:<br>
visit(*I);<br>
}<br>
<br>
+ // Add U as additional user of V.<br>
+ void addAdditionalUser(Value *V, User *U) {<br>
+ auto Iter = AdditionalUsers.insert({V, {}});<br>
+ Iter.first->second.insert(U);<br>
+ }<br>
+<br>
+ // Mark I's users as changed, including AdditionalUsers.<br>
+ void markUsersAsChanged(Value *I) {<br>
+ for (User *U : I->users())<br>
+ if (auto *UI = dyn_cast<Instruction>(U))<br>
+ OperandChangedState(UI);<br>
+<br>
+ auto Iter = AdditionalUsers.find(I);<br>
+ if (Iter != AdditionalUsers.end()) {<br>
+ for (User *U : Iter->second)<br>
+ if (auto *UI = dyn_cast<Instruction>(U))<br>
+ OperandChangedState(UI);<br>
+ }<br>
+ }<br>
+<br>
private:<br>
friend class InstVisitor<SCCPSolver>;<br>
<br>
@@ -1119,6 +1154,65 @@ void SCCPSolver::visitCallSite(<wbr>CallSite<br>
Function *F = CS.getCalledFunction();<br>
Instruction *I = CS.getInstruction();<br>
<br>
+ if (auto *II = dyn_cast<IntrinsicInst>(I)) {<br>
+ if (II->getIntrinsicID() == Intrinsic::ssa_copy) {<br>
+ if (ValueState[I].isOverdefined()<wbr>)<br>
+ return;<br>
+<br>
+ auto *PI = getPredicateInfoFor(I);<br>
+ if (!PI)<br>
+ return;<br>
+<br>
+ auto *PBranch = dyn_cast<PredicateBranch>(<wbr>getPredicateInfoFor(I));<br>
+ if (!PBranch) {<br>
+ mergeInValue(ValueState[I], I, getValueState(PI->OriginalOp))<wbr>;<br>
+ return;<br>
+ }<br>
+<br>
+ Value *CopyOf = I->getOperand(0);<br>
+ Value *Cond = PBranch->Condition;<br>
+<br>
+ // Everything below relies on the condition being a comparison.<br>
+ auto *Cmp = dyn_cast<CmpInst>(Cond);<br>
+ if (!Cmp) {<br>
+ mergeInValue(ValueState[I], I, getValueState(PI->OriginalOp))<wbr>;<br>
+ return;<br>
+ }<br>
+<br>
+ Value *CmpOp0 = Cmp->getOperand(0);<br>
+ Value *CmpOp1 = Cmp->getOperand(1);<br>
+ if (CopyOf != CmpOp0 && CopyOf != CmpOp1) {<br>
+ mergeInValue(ValueState[I], I, getValueState(PI->OriginalOp))<wbr>;<br>
+ return;<br>
+ }<br>
+<br>
+ if (CmpOp0 != CopyOf)<br>
+ std::swap(CmpOp0, CmpOp1);<br>
+<br>
+ LatticeVal OriginalVal = getValueState(CopyOf);<br>
+ LatticeVal EqVal = getValueState(CmpOp1);<br>
+ LatticeVal &IV = ValueState[I];<br>
+ if (PBranch->TrueEdge && Cmp->getPredicate() == CmpInst::ICMP_EQ) {<br>
+ addAdditionalUser(CmpOp1, I);<br>
+ if (OriginalVal.isConstant())<br>
+ mergeInValue(IV, I, OriginalVal);<br>
+ else<br>
+ mergeInValue(IV, I, EqVal);<br>
+ return;<br>
+ }<br>
+ if (!PBranch->TrueEdge && Cmp->getPredicate() == CmpInst::ICMP_NE) {<br>
+ addAdditionalUser(CmpOp1, I);<br>
+ if (OriginalVal.isConstant())<br>
+ mergeInValue(IV, I, OriginalVal);<br>
+ else<br>
+ mergeInValue(IV, I, EqVal);<br>
+ return;<br>
+ }<br>
+<br>
+ return (void)mergeInValue(IV, I, getValueState(PBranch-><wbr>OriginalOp));<br>
+ }<br>
+ }<br>
+<br>
// The common case is that we aren't tracking the callee, either because we<br>
// are not doing interprocedural analysis or the callee is indirect, or is<br>
// external. Handle these cases first.<br>
@@ -1238,9 +1332,7 @@ void SCCPSolver::Solve() {<br>
// since all of its users will have already been marked as overdefined<br>
// Update all of the users of this instruction's value.<br>
//<br>
- for (User *U : I->users())<br>
- if (auto *UI = dyn_cast<Instruction>(U))<br>
- OperandChangedState(UI);<br>
+ markUsersAsChanged(I);<br>
}<br>
<br>
// Process the instruction work list.<br>
@@ -1257,9 +1349,7 @@ void SCCPSolver::Solve() {<br>
// Update all of the users of this instruction's value.<br>
//<br>
if (I->getType()->isStructTy() || !getValueState(I).<wbr>isOverdefined())<br>
- for (User *U : I->users())<br>
- if (auto *UI = dyn_cast<Instruction>(U))<br>
- OperandChangedState(UI);<br>
+ markUsersAsChanged(I);<br>
}<br>
<br>
// Process the basic block work list.<br>
@@ -1798,8 +1888,9 @@ static void findReturnsToZap(Function &F<br>
}<br>
}<br>
<br>
-bool llvm::runIPSCCP(Module &M, const DataLayout &DL,<br>
- const TargetLibraryInfo *TLI) {<br>
+bool llvm::runIPSCCP(<br>
+ Module &M, const DataLayout &DL, const TargetLibraryInfo *TLI,<br>
+ function_ref<std::unique_ptr<<wbr>PredicateInfo>(Function &)> getPredicateInfo) {<br>
SCCPSolver Solver(DL, TLI);<br>
<br>
// Loop over all functions, marking arguments to those with their addresses<br>
@@ -1808,6 +1899,7 @@ bool llvm::runIPSCCP(Module &M, const Da<br>
if (F.isDeclaration())<br>
continue;<br>
<br>
+ Solver.addPredInfo(F, getPredicateInfo(F));<br>
// Determine if we can track the function's return values. If so, add the<br>
// function to the solver's set of return-tracked functions.<br>
if (<wbr>canTrackReturnsInterprocedural<wbr>ly(&F))<br>
@@ -1960,6 +2052,24 @@ bool llvm::runIPSCCP(Module &M, const Da<br>
F.getBasicBlockList().erase(<wbr>DeadBB);<br>
}<br>
BlocksToErase.clear();<br>
+<br>
+ for (BasicBlock &BB : F) {<br>
+ for (BasicBlock::iterator BI = BB.begin(), E = BB.end(); BI != E;) {<br>
+ Instruction *Inst = &*BI++;<br>
+ if (const PredicateBase *PI = Solver.getPredicateInfoFor(<wbr>Inst)) {<br>
+ if (auto *II = dyn_cast<IntrinsicInst>(Inst)) {<br>
+ if (II->getIntrinsicID() == Intrinsic::ssa_copy) {<br>
+ Value *Op = II->getOperand(0);<br>
+ Inst->replaceAllUsesWith(Op);<br>
+ Inst->eraseFromParent();<br>
+ continue;<br>
+ }<br>
+ }<br>
+ Inst->replaceAllUsesWith(PI-><wbr>OriginalOp);<br>
+ Inst->eraseFromParent();<br>
+ }<br>
+ }<br>
+ }<br>
}<br>
<br>
// If we inferred constant or undef return values for a function, we replaced<br>
<br>
Modified: llvm/trunk/test/Other/new-pm-<wbr>lto-defaults.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/new-pm-lto-defaults.ll?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/Other/<wbr>new-pm-lto-defaults.ll?rev=<wbr>337904&r1=337903&r2=337904&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Other/new-pm-<wbr>lto-defaults.ll (original)<br>
+++ llvm/trunk/test/Other/new-pm-<wbr>lto-defaults.ll Wed Jul 25 04:13:40 2018<br>
@@ -41,6 +41,8 @@<br>
; CHECK-O2-NEXT: Running analysis: ProfileSummaryAnalysis<br>
; CHECK-O2-NEXT: Running analysis: OptimizationRemarkEmitterAnaly<wbr>sis<br>
; CHECK-O2-NEXT: Running pass: IPSCCPPass<br>
+; CHECK-O2-DAG: Running analysis: AssumptionAnalysis on foo<br>
+; CHECK-O2-DAG: Running analysis: DominatorTreeAnalysis on foo<br>
; CHECK-O2-NEXT: Running pass: CalledValuePropagationPass<br>
; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdap<wbr>tor<{{.*}}<wbr>PostOrderFunctionAttrsPass><br>
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*<wbr>}}SCC<br>
@@ -57,8 +59,6 @@<br>
; CHECK-O1-NEXT: Running pass: LowerTypeTestsPass<br>
; CHECK-O2-NEXT: Running pass: GlobalOptPass<br>
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{<wbr>.*}}PromotePass><br>
-; CHECK-O2-NEXT: Running analysis: DominatorTreeAnalysis<br>
-; CHECK-O2-NEXT: Running analysis: AssumptionAnalysis<br>
; CHECK-O2-NEXT: Running pass: ConstantMergePass<br>
; CHECK-O2-NEXT: Running pass: DeadArgumentEliminationPass<br>
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{<wbr>.*}}PassManager{{.*}}><br>
<br>
Modified: llvm/trunk/test/Other/opt-O2-<wbr>pipeline.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-O2-pipeline.ll?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/Other/<wbr>opt-O2-pipeline.ll?rev=337904&<wbr>r1=337903&r2=337904&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Other/opt-O2-<wbr>pipeline.ll (original)<br>
+++ llvm/trunk/test/Other/opt-O2-<wbr>pipeline.ll Wed Jul 25 04:13:40 2018<br>
@@ -28,6 +28,7 @@<br>
; CHECK-NEXT: Force set function attributes<br>
; CHECK-NEXT: Infer set function attributes<br>
; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation<br>
+; CHECK-NEXT: Unnamed pass: implement Pass::getPassName()<br>
; CHECK-NEXT: Called Value Propagation<br>
; CHECK-NEXT: Global Variable Optimizer<br>
; CHECK-NEXT: Unnamed pass: implement Pass::getPassName()<br>
@@ -270,6 +271,9 @@<br>
; CHECK-NEXT: Module Verifier<br>
; CHECK-NEXT: Bitcode Writer<br>
; CHECK-NEXT: Pass Arguments:<br>
+; CHECK-NEXT: FunctionPass Manager<br>
+; CHECK-NEXT: Dominator Tree Construction<br>
+; CHECK-NEXT: Pass Arguments:<br>
; CHECK-NEXT: Target Library Information<br>
; CHECK-NEXT: FunctionPass Manager<br>
; CHECK-NEXT: Dominator Tree Construction<br>
<br>
Modified: llvm/trunk/test/Other/opt-O3-<wbr>pipeline.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-O3-pipeline.ll?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/Other/<wbr>opt-O3-pipeline.ll?rev=337904&<wbr>r1=337903&r2=337904&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Other/opt-O3-<wbr>pipeline.ll (original)<br>
+++ llvm/trunk/test/Other/opt-O3-<wbr>pipeline.ll Wed Jul 25 04:13:40 2018<br>
@@ -30,6 +30,7 @@<br>
; CHECK-NEXT: FunctionPass Manager<br>
; CHECK-NEXT: Call-site splitting<br>
; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation<br>
+; CHECK-NEXT: Unnamed pass: implement Pass::getPassName()<br>
; CHECK-NEXT: Called Value Propagation<br>
; CHECK-NEXT: Global Variable Optimizer<br>
; CHECK-NEXT: Unnamed pass: implement Pass::getPassName()<br>
@@ -274,6 +275,9 @@<br>
; CHECK-NEXT: Module Verifier<br>
; CHECK-NEXT: Bitcode Writer<br>
; CHECK-NEXT: Pass Arguments:<br>
+; CHECK-NEXT: FunctionPass Manager<br>
+; CHECK-NEXT: Dominator Tree Construction<br>
+; CHECK-NEXT: Pass Arguments:<br>
; CHECK-NEXT: Target Library Information<br>
; CHECK-NEXT: FunctionPass Manager<br>
; CHECK-NEXT: Dominator Tree Construction<br>
<br>
Modified: llvm/trunk/test/Other/opt-Os-<wbr>pipeline.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-Os-pipeline.ll?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/Other/<wbr>opt-Os-pipeline.ll?rev=337904&<wbr>r1=337903&r2=337904&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Other/opt-Os-<wbr>pipeline.ll (original)<br>
+++ llvm/trunk/test/Other/opt-Os-<wbr>pipeline.ll Wed Jul 25 04:13:40 2018<br>
@@ -28,6 +28,7 @@<br>
; CHECK-NEXT: Force set function attributes<br>
; CHECK-NEXT: Infer set function attributes<br>
; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation<br>
+; CHECK-NEXT: Unnamed pass: implement Pass::getPassName()<br>
; CHECK-NEXT: Called Value Propagation<br>
; CHECK-NEXT: Global Variable Optimizer<br>
; CHECK-NEXT: Unnamed pass: implement Pass::getPassName()<br>
@@ -257,6 +258,9 @@<br>
; CHECK-NEXT: Module Verifier<br>
; CHECK-NEXT: Bitcode Writer<br>
; CHECK-NEXT: Pass Arguments:<br>
+; CHECK-NEXT: FunctionPass Manager<br>
+; CHECK-NEXT: Dominator Tree Construction<br>
+; CHECK-NEXT: Pass Arguments:<br>
; CHECK-NEXT: Target Library Information<br>
; CHECK-NEXT: FunctionPass Manager<br>
; CHECK-NEXT: Dominator Tree Construction<br>
<br>
Modified: llvm/trunk/test/Transforms/<wbr>IPConstantProp/musttail-call.<wbr>ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IPConstantProp/musttail-call.ll?rev=337904&r1=337903&r2=337904&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/IPConstantProp/<wbr>musttail-call.ll?rev=337904&<wbr>r1=337903&r2=337904&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>IPConstantProp/musttail-call.<wbr>ll (original)<br>
+++ llvm/trunk/test/Transforms/<wbr>IPConstantProp/musttail-call.<wbr>ll Wed Jul 25 04:13:40 2018<br>
@@ -9,7 +9,7 @@ define i8* @start(i8 %v) {<br>
%c1 = icmp eq i8 %v, 0<br>
br i1 %c1, label %true, label %false<br>
true:<br>
- ; CHECK: %ca = musttail call i8* @side_effects(i8 %v)<br>
+ ; CHECK: %ca = musttail call i8* @side_effects(i8 0)<br>
; CHECK: ret i8* %ca<br>
%ca = musttail call i8* @side_effects(i8 %v)<br>
ret i8* %ca<br>
@@ -34,7 +34,7 @@ define internal i8* @side_effects(i8 %v)<br>
; is always `null`.<br>
; The call can't be removed due to `external` call above, though.<br>
<br>
- ; CHECK: %ca = musttail call i8* @start(i8 %v)<br>
+ ; CHECK: %ca = musttail call i8* @start(i8 0)<br>
%ca = musttail call i8* @start(i8 %v)<br>
<br>
; Thus the result must be returned anyway<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>