<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>