Skip to content

[nfc][mlgo] Incrementally update DominatorTreeAnalysis in FunctionPropertiesAnalysis #104867

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

mtrofin
Copy link
Member

@mtrofin mtrofin commented Aug 19, 2024

We need the dominator tree analysis for loop info analysis, which we need to get features like most nested loop and number of top level loops. Invalidating and recomputing these from scratch after each successful inlining can sometimes lead to lengthy compile times. We don't need to recompute from scratch, though, since we have some boundary information about where the changes to the CFG happen; moreover, for dom tree, the API supports incrementally updating the analysis result.

This change addresses the dom tree part. The loop info is still recomputed from scratch. This does reduce the compile time quite significantly already, though (~5x in a specific case)

The loop info change might be more involved and would follow in a subsequent PR.

Copy link
Member Author

mtrofin commented Aug 19, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @mtrofin and the rest of your teammates on Graphite Graphite

@mtrofin mtrofin changed the title [nfc] Incrementally update DominatorTreeAnalysis in FunctionPropertiesAnalysis [nfc][mlgo] Incrementally update DominatorTreeAnalysis in FunctionPropertiesAnalysis Aug 19, 2024
@mtrofin mtrofin marked this pull request as ready for review August 19, 2024 21:47
@llvmbot llvmbot added mlgo llvm:analysis Includes value tracking, cost tables and constant folding labels Aug 19, 2024
@llvmbot
Copy link
Member

llvmbot commented Aug 19, 2024

@llvm/pr-subscribers-llvm-analysis

Author: Mircea Trofin (mtrofin)

Changes

We need the dominator tree analysis for loop info analysis, which we need to get features like most nested loop and number of top level loops. Invalidating and recomputing these from scratch after each successful inlining can sometimes lead to lengthy compile times. We don't need to recompute from scratch, though, since we have some boundary information about where the changes to the CFG happen; moreover, for dom tree, the API supports incrementally updating the analysis result.

This change addresses the dom tree part. The loop info is still recomputed from scratch. This does reduce the compile time quite significantly already, though (~5x in a specific case)

The loop info change might be more involved and would follow in a subsequent PR.


Full diff: https://github.com/llvm/llvm-project/pull/104867.diff

3 Files Affected:

  • (modified) llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h (+6)
  • (modified) llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp (+48-2)
  • (modified) llvm/lib/Analysis/MLInlineAdvisor.cpp (-1)
diff --git a/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h b/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h
index ee447d3e4ebb6a..af72f6e0f90b11 100644
--- a/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h
+++ b/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h
@@ -15,6 +15,7 @@
 #define LLVM_ANALYSIS_FUNCTIONPROPERTIESANALYSIS_H
 
 #include "llvm/ADT/DenseSet.h"
+#include "llvm/IR/Dominators.h"
 #include "llvm/IR/PassManager.h"
 
 namespace llvm {
@@ -186,7 +187,12 @@ class FunctionPropertiesUpdater {
   static bool isUpdateValid(Function &F, const FunctionPropertiesInfo &FPI,
                             FunctionAnalysisManager &FAM);
 
+  DominatorTree &getUpdatedDominatorTree(FunctionAnalysisManager &FAM) const;
+
   DenseSet<const BasicBlock *> Successors;
+
+  // Edges we might potentially need to remove from the dominator tree.
+  SmallVector<DominatorTree::UpdateType, 2> DomTreeUpdates;
 };
 } // namespace llvm
 #endif // LLVM_ANALYSIS_FUNCTIONPROPERTIESANALYSIS_H
diff --git a/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp b/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp
index 6d6ec6c7b1cc76..cce7c08cf35e8e 100644
--- a/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp
+++ b/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp
@@ -326,6 +326,14 @@ FunctionPropertiesUpdater::FunctionPropertiesUpdater(
   // with the CB BB ('Entry') between which the inlined callee will be pasted.
   Successors.insert(succ_begin(&CallSiteBB), succ_end(&CallSiteBB));
 
+  // the outcome of the inlining may be that some edges get lost (DCEd BBs
+  // because inlining brought some constant, for example). We don't know which
+  // edges will be removed, so we list all of them as potentially removable.
+  for (auto *Succ : successors(&CallSiteBB))
+    DomTreeUpdates.emplace_back(DominatorTree::UpdateKind::Delete,
+                                const_cast<BasicBlock *>(&CallSiteBB),
+                                const_cast<BasicBlock *>(Succ));
+
   // Inlining only handles invoke and calls. If this is an invoke, and inlining
   // it pulls another invoke, the original landing pad may get split, so as to
   // share its content with other potential users. So the edge up to which we
@@ -336,6 +344,11 @@ FunctionPropertiesUpdater::FunctionPropertiesUpdater(
   if (const auto *II = dyn_cast<InvokeInst>(&CB)) {
     const auto *UnwindDest = II->getUnwindDest();
     Successors.insert(succ_begin(UnwindDest), succ_end(UnwindDest));
+    // Same idea as above, we pretend we lose all these edges.
+    for (auto *Succ : successors(UnwindDest))
+      DomTreeUpdates.emplace_back(DominatorTree::UpdateKind::Delete,
+                                  const_cast<BasicBlock *>(UnwindDest),
+                                  const_cast<BasicBlock *>(Succ));
   }
 
   // Exclude the CallSiteBB, if it happens to be its own successor (1-BB loop).
@@ -356,6 +369,40 @@ FunctionPropertiesUpdater::FunctionPropertiesUpdater(
     FPI.updateForBB(*BB, -1);
 }
 
+DominatorTree &FunctionPropertiesUpdater::getUpdatedDominatorTree(
+    FunctionAnalysisManager &FAM) const {
+  auto &DT =
+      FAM.getResult<DominatorTreeAnalysis>(const_cast<Function &>(Caller));
+
+  DenseSet<const BasicBlock *> NewSucc;
+  NewSucc.insert(succ_begin(&CallSiteBB), succ_end(&CallSiteBB));
+
+  // tell the DomTree about the new edges
+  std::deque<const BasicBlock *> Worklist;
+  Worklist.push_back(&CallSiteBB);
+  while (!Worklist.empty()) {
+    auto *BB = Worklist.front();
+    Worklist.pop_front();
+    assert(DT.getNode(BB));
+
+    for (auto *Succ : NewSucc) {
+      if (!DT.getNode(Succ))
+        Worklist.push_back(Succ);
+      DT.insertEdge(const_cast<BasicBlock *>(BB),
+                    const_cast<BasicBlock *>(Succ));
+    }
+  }
+  // Build the list of edges to actually remove. Those are those edges in the
+  // DomTreeUpdates that cannot be found in the CFG anymore.
+  SmallVector<DominatorTree::UpdateType, 2> FinalDomTreeUpdates;
+  for (auto &Upd : DomTreeUpdates)
+    if (!llvm::is_contained(successors(Upd.getFrom()), Upd.getTo()))
+      FinalDomTreeUpdates.push_back(Upd);
+
+  DT.applyUpdates(FinalDomTreeUpdates);
+  return DT;
+}
+
 void FunctionPropertiesUpdater::finish(FunctionAnalysisManager &FAM) const {
   // Update feature values from the BBs that were copied from the callee, or
   // might have been modified because of inlining. The latter have been
@@ -383,8 +430,7 @@ void FunctionPropertiesUpdater::finish(FunctionAnalysisManager &FAM) const {
   // remove E.
   SetVector<const BasicBlock *> Reinclude;
   SetVector<const BasicBlock *> Unreachable;
-  const auto &DT =
-      FAM.getResult<DominatorTreeAnalysis>(const_cast<Function &>(Caller));
+  auto &DT = getUpdatedDominatorTree(FAM);
 
   if (&CallSiteBB != &*Caller.begin())
     Reinclude.insert(&*Caller.begin());
diff --git a/llvm/lib/Analysis/MLInlineAdvisor.cpp b/llvm/lib/Analysis/MLInlineAdvisor.cpp
index b59aa4810005bc..8bb5efcf1b2ecb 100644
--- a/llvm/lib/Analysis/MLInlineAdvisor.cpp
+++ b/llvm/lib/Analysis/MLInlineAdvisor.cpp
@@ -288,7 +288,6 @@ void MLInlineAdvisor::onSuccessfulInlining(const MLInlineAdvice &Advice,
   {
     PreservedAnalyses PA = PreservedAnalyses::all();
     PA.abandon<FunctionPropertiesAnalysis>();
-    PA.abandon<DominatorTreeAnalysis>();
     PA.abandon<LoopAnalysis>();
     FAM.invalidate(*Caller, PA);
   }

@llvmbot
Copy link
Member

llvmbot commented Aug 19, 2024

@llvm/pr-subscribers-mlgo

Author: Mircea Trofin (mtrofin)

Changes

We need the dominator tree analysis for loop info analysis, which we need to get features like most nested loop and number of top level loops. Invalidating and recomputing these from scratch after each successful inlining can sometimes lead to lengthy compile times. We don't need to recompute from scratch, though, since we have some boundary information about where the changes to the CFG happen; moreover, for dom tree, the API supports incrementally updating the analysis result.

This change addresses the dom tree part. The loop info is still recomputed from scratch. This does reduce the compile time quite significantly already, though (~5x in a specific case)

The loop info change might be more involved and would follow in a subsequent PR.


Full diff: https://github.com/llvm/llvm-project/pull/104867.diff

3 Files Affected:

  • (modified) llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h (+6)
  • (modified) llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp (+48-2)
  • (modified) llvm/lib/Analysis/MLInlineAdvisor.cpp (-1)
diff --git a/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h b/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h
index ee447d3e4ebb6a..af72f6e0f90b11 100644
--- a/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h
+++ b/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h
@@ -15,6 +15,7 @@
 #define LLVM_ANALYSIS_FUNCTIONPROPERTIESANALYSIS_H
 
 #include "llvm/ADT/DenseSet.h"
+#include "llvm/IR/Dominators.h"
 #include "llvm/IR/PassManager.h"
 
 namespace llvm {
@@ -186,7 +187,12 @@ class FunctionPropertiesUpdater {
   static bool isUpdateValid(Function &F, const FunctionPropertiesInfo &FPI,
                             FunctionAnalysisManager &FAM);
 
+  DominatorTree &getUpdatedDominatorTree(FunctionAnalysisManager &FAM) const;
+
   DenseSet<const BasicBlock *> Successors;
+
+  // Edges we might potentially need to remove from the dominator tree.
+  SmallVector<DominatorTree::UpdateType, 2> DomTreeUpdates;
 };
 } // namespace llvm
 #endif // LLVM_ANALYSIS_FUNCTIONPROPERTIESANALYSIS_H
diff --git a/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp b/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp
index 6d6ec6c7b1cc76..cce7c08cf35e8e 100644
--- a/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp
+++ b/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp
@@ -326,6 +326,14 @@ FunctionPropertiesUpdater::FunctionPropertiesUpdater(
   // with the CB BB ('Entry') between which the inlined callee will be pasted.
   Successors.insert(succ_begin(&CallSiteBB), succ_end(&CallSiteBB));
 
+  // the outcome of the inlining may be that some edges get lost (DCEd BBs
+  // because inlining brought some constant, for example). We don't know which
+  // edges will be removed, so we list all of them as potentially removable.
+  for (auto *Succ : successors(&CallSiteBB))
+    DomTreeUpdates.emplace_back(DominatorTree::UpdateKind::Delete,
+                                const_cast<BasicBlock *>(&CallSiteBB),
+                                const_cast<BasicBlock *>(Succ));
+
   // Inlining only handles invoke and calls. If this is an invoke, and inlining
   // it pulls another invoke, the original landing pad may get split, so as to
   // share its content with other potential users. So the edge up to which we
@@ -336,6 +344,11 @@ FunctionPropertiesUpdater::FunctionPropertiesUpdater(
   if (const auto *II = dyn_cast<InvokeInst>(&CB)) {
     const auto *UnwindDest = II->getUnwindDest();
     Successors.insert(succ_begin(UnwindDest), succ_end(UnwindDest));
+    // Same idea as above, we pretend we lose all these edges.
+    for (auto *Succ : successors(UnwindDest))
+      DomTreeUpdates.emplace_back(DominatorTree::UpdateKind::Delete,
+                                  const_cast<BasicBlock *>(UnwindDest),
+                                  const_cast<BasicBlock *>(Succ));
   }
 
   // Exclude the CallSiteBB, if it happens to be its own successor (1-BB loop).
@@ -356,6 +369,40 @@ FunctionPropertiesUpdater::FunctionPropertiesUpdater(
     FPI.updateForBB(*BB, -1);
 }
 
+DominatorTree &FunctionPropertiesUpdater::getUpdatedDominatorTree(
+    FunctionAnalysisManager &FAM) const {
+  auto &DT =
+      FAM.getResult<DominatorTreeAnalysis>(const_cast<Function &>(Caller));
+
+  DenseSet<const BasicBlock *> NewSucc;
+  NewSucc.insert(succ_begin(&CallSiteBB), succ_end(&CallSiteBB));
+
+  // tell the DomTree about the new edges
+  std::deque<const BasicBlock *> Worklist;
+  Worklist.push_back(&CallSiteBB);
+  while (!Worklist.empty()) {
+    auto *BB = Worklist.front();
+    Worklist.pop_front();
+    assert(DT.getNode(BB));
+
+    for (auto *Succ : NewSucc) {
+      if (!DT.getNode(Succ))
+        Worklist.push_back(Succ);
+      DT.insertEdge(const_cast<BasicBlock *>(BB),
+                    const_cast<BasicBlock *>(Succ));
+    }
+  }
+  // Build the list of edges to actually remove. Those are those edges in the
+  // DomTreeUpdates that cannot be found in the CFG anymore.
+  SmallVector<DominatorTree::UpdateType, 2> FinalDomTreeUpdates;
+  for (auto &Upd : DomTreeUpdates)
+    if (!llvm::is_contained(successors(Upd.getFrom()), Upd.getTo()))
+      FinalDomTreeUpdates.push_back(Upd);
+
+  DT.applyUpdates(FinalDomTreeUpdates);
+  return DT;
+}
+
 void FunctionPropertiesUpdater::finish(FunctionAnalysisManager &FAM) const {
   // Update feature values from the BBs that were copied from the callee, or
   // might have been modified because of inlining. The latter have been
@@ -383,8 +430,7 @@ void FunctionPropertiesUpdater::finish(FunctionAnalysisManager &FAM) const {
   // remove E.
   SetVector<const BasicBlock *> Reinclude;
   SetVector<const BasicBlock *> Unreachable;
-  const auto &DT =
-      FAM.getResult<DominatorTreeAnalysis>(const_cast<Function &>(Caller));
+  auto &DT = getUpdatedDominatorTree(FAM);
 
   if (&CallSiteBB != &*Caller.begin())
     Reinclude.insert(&*Caller.begin());
diff --git a/llvm/lib/Analysis/MLInlineAdvisor.cpp b/llvm/lib/Analysis/MLInlineAdvisor.cpp
index b59aa4810005bc..8bb5efcf1b2ecb 100644
--- a/llvm/lib/Analysis/MLInlineAdvisor.cpp
+++ b/llvm/lib/Analysis/MLInlineAdvisor.cpp
@@ -288,7 +288,6 @@ void MLInlineAdvisor::onSuccessfulInlining(const MLInlineAdvice &Advice,
   {
     PreservedAnalyses PA = PreservedAnalyses::all();
     PA.abandon<FunctionPropertiesAnalysis>();
-    PA.abandon<DominatorTreeAnalysis>();
     PA.abandon<LoopAnalysis>();
     FAM.invalidate(*Caller, PA);
   }

@mtrofin mtrofin force-pushed the users/mtrofin/08-19-_nfc_incrementally_update_dominatortreeanalysis_in_functionpropertiesanalysis branch from a702a49 to 67295e1 Compare August 20, 2024 18:20
@rnk rnk requested review from nikic, efriedma-quic and alinas August 21, 2024 16:21
@rnk
Copy link
Collaborator

rnk commented Aug 21, 2024

The patch doesn't have new tests, but is presumably exercised by all the inliner tests. Can you remind us how the dominator tree analysis is checked for correctness? Why should we be confident that the new dominator tree is correct? Is it validated in regular +asserts builds, or is it covered under expensive checks? Have you run the test suite with that validation ahead of time, or which bot would we monitor post submit to see if it comes back green?

@nikic
Copy link
Contributor

nikic commented Aug 21, 2024

The patch doesn't have new tests, but is presumably exercised by all the inliner tests. Can you remind us how the dominator tree analysis is checked for correctness? Why should we be confident that the new dominator tree is correct? Is it validated in regular +asserts builds, or is it covered under expensive checks? Have you run the test suite with that validation ahead of time, or which bot would we monitor post submit to see if it comes back green?

DT does not get verified by default, at least in this pipeline position. You need to add explicit DT.verify() calls for that (the way this is often done is to use fast verification in assertion builds and full verification under EXPENSIVE_CHECKS).

auto &DT =
FAM.getResult<DominatorTreeAnalysis>(const_cast<Function &>(Caller));

DenseSet<const BasicBlock *> NewSucc;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs to be SetVector, you'll get nondet results otherwise.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ack, done.

if (!DT.getNode(Succ))
Worklist.push_back(Succ);
DT.insertEdge(const_cast<BasicBlock *>(BB),
const_cast<BasicBlock *>(Succ));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should collect updates here instead of calling insertEdge directly?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

true, and it's more consistent. Done.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually addressed this feedback incorrectly, and the original code was kind of nonsensical here (the working list was a bit... wat).

I believe cdd11d6 fixed it all, but please let me know if there are any concerns.

Copy link
Member Author

mtrofin commented Aug 21, 2024

The patch doesn't have new tests, but is presumably exercised by all the inliner tests. Can you remind us how the dominator tree analysis is checked for correctness? Why should we be confident that the new dominator tree is correct? Is it validated in regular +asserts builds, or is it covered under expensive checks? Have you run the test suite with that validation ahead of time, or which bot would we monitor post submit to see if it comes back green?

DT does not get verified by default, at least in this pipeline position. You need to add explicit DT.verify() calls for that (the way this is often done is to use fast verification in assertion builds and full verification under EXPENSIVE_CHECKS).

Adding DT.verify(). Originally we had an assert that was checking that the final FPI was equivalent to a freshly computed one (i.e. one where we'd recompute the DT and the LI). Re-adding that under EXPENSIVE_CHECKS, too.

@mtrofin mtrofin force-pushed the users/mtrofin/08-19-_nfc_incrementally_update_dominatortreeanalysis_in_functionpropertiesanalysis branch from 67295e1 to a361f13 Compare August 21, 2024 18:02
Copy link
Member Author

mtrofin commented Aug 21, 2024

The patch doesn't have new tests, but is presumably exercised by all the inliner tests. Can you remind us how the dominator tree analysis is checked for correctness? Why should we be confident that the new dominator tree is correct? Is it validated in regular +asserts builds, or is it covered under expensive checks? Have you run the test suite with that validation ahead of time, or which bot would we monitor post submit to see if it comes back green?

DT does not get verified by default, at least in this pipeline position. You need to add explicit DT.verify() calls for that (the way this is often done is to use fast verification in assertion builds and full verification under EXPENSIVE_CHECKS).

Adding DT.verify(). Originally we had an assert that was checking that the final FPI was equivalent to a freshly computed one (i.e. one where we'd recompute the DT and the LI). Re-adding that under EXPENSIVE_CHECKS, too.

Oh, forgot to finish the statment... the assert got moved to an explicit test during unittests, llvm/unittests/Analysis/FunctionPropertiesAnalysisTest.cpp. I.e. to @rnk's point, indeed, the current tests should cover this, as the patch should only change how the values in FunctionsPropertiesAnalysis are calculated.

@mtrofin mtrofin force-pushed the users/mtrofin/08-19-_nfc_incrementally_update_dominatortreeanalysis_in_functionpropertiesanalysis branch from a361f13 to 584cfcc Compare August 21, 2024 18:16
Copy link
Contributor

@alinas alinas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a naïve question, but is the FunctionPropertiesUpdater's only user the MLInline advisor? Is it possible for this to be used by the regular Inliner so DT is not recomputed after inlining?

@mtrofin
Copy link
Member Author

mtrofin commented Aug 21, 2024

This is a naïve question, but is the FunctionPropertiesUpdater's only user the MLInline advisor?

Yes, afaik

Is it possible for this to be used by the regular Inliner so DT is not recomputed after inlining?

AFAIK, DT / LI aren't used for the non-ML InlineCost calculation, but indeed, we could use their patch-ability to keep them "fresh" during inlining and avoid recalculating them, if that becomes an issue in some scenarios.

@mtrofin
Copy link
Member Author

mtrofin commented Aug 23, 2024

@nikic, @alinas, is this good to go? Thanks!

@mtrofin mtrofin force-pushed the users/mtrofin/08-19-_nfc_incrementally_update_dominatortreeanalysis_in_functionpropertiesanalysis branch from 584cfcc to 25f1534 Compare August 23, 2024 16:45
Copy link
Contributor

@alinas alinas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mtrofin mtrofin force-pushed the users/mtrofin/08-19-_nfc_incrementally_update_dominatortreeanalysis_in_functionpropertiesanalysis branch from 25f1534 to c5e48e0 Compare August 23, 2024 17:36
Copy link
Member Author

mtrofin commented Aug 23, 2024

Merge activity

  • Aug 23, 4:12 PM EDT: @mtrofin started a stack merge that includes this pull request via Graphite.
  • Aug 23, 4:13 PM EDT: @mtrofin merged this pull request with Graphite.

@mtrofin mtrofin merged commit a2a5508 into main Aug 23, 2024
8 checks passed
@mtrofin mtrofin deleted the users/mtrofin/08-19-_nfc_incrementally_update_dominatortreeanalysis_in_functionpropertiesanalysis branch August 23, 2024 20:13
@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 23, 2024

LLVM Buildbot has detected a new failure on builder ml-opt-dev-x86-64 running on ml-opt-dev-x86-64-b1 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/137/builds/3964

Here is the relevant piece of the build log for the reference:

Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: Transforms/Inline/ML/ml-test-development-mode.ll' FAILED ********************
Exit Code: 134

Command Output (stdout):
--
Output model to: [/b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel]
The model will always return: 1
Writing output spec to /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel/output_spec.json.

--
Command Output (stderr):
--
RUN: at line 9: rm -rf /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp
+ rm -rf /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp
RUN: at line 10: rm -rf /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
+ rm -rf /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
RUN: at line 11: "/usr/bin/python3" /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/../../../../lib/Analysis/models/gen-inline-oz-test-model.py /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
+ /usr/bin/python3 /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/../../../../lib/Analysis/models/gen-inline-oz-test-model.py /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
2024-08-23 20:37:26.142456: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2024-08-23 20:37:26.226295: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2024-08-23 20:37:26.227077: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-08-23 20:37:27.651063: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
RUN: at line 12: "/usr/bin/python3" /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/../../../../lib/Analysis/models/saved-model-to-tflite.py /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp
+ /usr/bin/python3 /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/../../../../lib/Analysis/models/saved-model-to-tflite.py /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp
2024-08-23 20:37:30.804032: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2024-08-23 20:37:30.946073: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2024-08-23 20:37:30.950010: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-08-23 20:37:32.406545: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
2024-08-23 20:37:34.895933: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:364] Ignored output_format.
2024-08-23 20:37:34.896058: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:367] Ignored drop_control_dependency.
2024-08-23 20:37:34.897708: I tensorflow/cc/saved_model/reader.cc:45] Reading SavedModel from: /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
2024-08-23 20:37:34.898595: I tensorflow/cc/saved_model/reader.cc:89] Reading meta graph with tags { serve }
2024-08-23 20:37:34.898630: I tensorflow/cc/saved_model/reader.cc:130] Reading SavedModel debug info (if present) from: /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
2024-08-23 20:37:34.903429: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:353] MLIR V1 optimization pass is not enabled
2024-08-23 20:37:34.907271: I tensorflow/cc/saved_model/loader.cc:231] Restoring SavedModel bundle.
2024-08-23 20:37:34.929451: I tensorflow/cc/saved_model/loader.cc:215] Running initialization op on SavedModel bundle at path: /b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp_savedmodel
2024-08-23 20:37:34.942148: I tensorflow/cc/saved_model/loader.cc:314] SavedModel load for tags { serve }; Status: success: OK. Took 44444 microseconds.
2024-08-23 20:37:34.965261: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:269] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.
2024-08-23 20:37:35.004038: I tensorflow/compiler/mlir/lite/flatbuffer_export.cc:2116] Estimated count of arithmetic ops: 0  ops, equivalently 0  MACs
RUN: at line 13: /b/ml-opt-dev-x86-64-b1/build/bin/opt -passes=scc-oz-module-inliner -enable-ml-inliner=default -S < /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll 2>&1 | /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll --check-prefix=DEFAULT
+ /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll --check-prefix=DEFAULT
+ /b/ml-opt-dev-x86-64-b1/build/bin/opt -passes=scc-oz-module-inliner -enable-ml-inliner=default -S
RUN: at line 14: /b/ml-opt-dev-x86-64-b1/build/bin/opt -passes=scc-oz-module-inliner -enable-ml-inliner=development -ml-inliner-model-under-training=/b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp -S < /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll 2>&1 | /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll --check-prefix=CHECK
+ /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll --check-prefix=CHECK
+ /b/ml-opt-dev-x86-64-b1/build/bin/opt -passes=scc-oz-module-inliner -enable-ml-inliner=development -ml-inliner-model-under-training=/b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp -S
/b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.script: line 8: 933905 Aborted                 /b/ml-opt-dev-x86-64-b1/build/bin/opt -passes=scc-oz-module-inliner -enable-ml-inliner=development -ml-inliner-model-under-training=/b/ml-opt-dev-x86-64-b1/build/test/Transforms/Inline/ML/Output/ml-test-development-mode.ll.tmp -S < /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll 2>&1
     933907 Done                    | /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/Inputs/test-module.ll --check-prefix=CHECK

...

@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 23, 2024

LLVM Buildbot has detected a new failure on builder ml-opt-devrel-x86-64 running on ml-opt-devrel-x86-64-b2 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/175/builds/3922

Here is the relevant piece of the build log for the reference:

Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: Transforms/Inline/ML/coro-split-func-levels.ll' FAILED ********************
Exit Code: 134

Command Output (stderr):
--
RUN: at line 2: /b/ml-opt-devrel-x86-64-b1/build/bin/opt -S -passes='coro-early,scc-oz-module-inliner,print<inline-advisor>'   -enable-ml-inliner=release -keep-inline-advisor-for-printing < /b/ml-opt-devrel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/coro-split-func-levels.ll
+ /b/ml-opt-devrel-x86-64-b1/build/bin/opt -S '-passes=coro-early,scc-oz-module-inliner,print<inline-advisor>' -enable-ml-inliner=release -keep-inline-advisor-for-printing
opt: /b/ml-opt-devrel-x86-64-b1/llvm-project/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp:390: llvm::DominatorTree& llvm::FunctionPropertiesUpdater::getUpdatedDominatorTree(llvm::FunctionAnalysisManager&) const: Assertion `DT.getNode(BB)' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /b/ml-opt-devrel-x86-64-b1/build/bin/opt -S -passes=coro-early,scc-oz-module-inliner,print<inline-advisor> -enable-ml-inliner=release -keep-inline-advisor-for-printing
1.	Running pass "require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<no-header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,simple-loop-unswitch<no-nontrivial;trivial>,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)),function(invalidate<should-not-run-function-passes>),cgscc(devirt<4>())" on module "<stdin>"
2.	Running pass "cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<no-header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,simple-loop-unswitch<no-nontrivial;trivial>,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split))" on module "<stdin>"
 #0 0x0000558428905128 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x5399128)
 #1 0x000055842890250c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f02ac1e4140 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x13140)
 #3 0x00007f02abce5ce1 raise (/lib/x86_64-linux-gnu/libc.so.6+0x38ce1)
 #4 0x00007f02abccf537 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22537)
 #5 0x00007f02abccf40f (/lib/x86_64-linux-gnu/libc.so.6+0x2240f)
 #6 0x00007f02abcde662 (/lib/x86_64-linux-gnu/libc.so.6+0x31662)
 #7 0x0000558427a32d21 llvm::FunctionPropertiesUpdater::getUpdatedDominatorTree(llvm::AnalysisManager<llvm::Function>&) const (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x44c6d21)
 #8 0x0000558427a33802 llvm::FunctionPropertiesUpdater::finish(llvm::AnalysisManager<llvm::Function>&) const (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x44c7802)
 #9 0x0000558427b3a075 llvm::MLInlineAdvisor::onSuccessfulInlining(llvm::MLInlineAdvice const&, bool) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x45ce075)
#10 0x0000558426d4322f llvm::InlinerPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x37d722f)
#11 0x00005584263f397e llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::InlinerPass, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) crtstuff.c:0:0
#12 0x000055842798bc92 llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x441fc92)
#13 0x00005584263f273e llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) crtstuff.c:0:0
#14 0x0000558427992d36 llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x4426d36)
#15 0x00005584263f275e llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) crtstuff.c:0:0
#16 0x000055842798d643 llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x4421643)
#17 0x00005584263f271e llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) crtstuff.c:0:0
#18 0x00005584286f9275 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x518d275)
#19 0x0000558426d4099d llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x37d499d)
#20 0x00005584263f235e llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) crtstuff.c:0:0
#21 0x00005584286f9275 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0x518d275)
#22 0x00005584241443aa llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0xbd83aa)
#23 0x0000558424136dcf optMain (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0xbcadcf)
#24 0x00007f02abcd0d0a __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x23d0a)
#25 0x000055842412d0ea _start (/b/ml-opt-devrel-x86-64-b1/build/bin/opt+0xbc10ea)
/b/ml-opt-devrel-x86-64-b1/build/test/Transforms/Inline/ML/Output/coro-split-func-levels.ll.script: line 1: 425122 Aborted                 /b/ml-opt-devrel-x86-64-b1/build/bin/opt -S -passes='coro-early,scc-oz-module-inliner,print<inline-advisor>' -enable-ml-inliner=release -keep-inline-advisor-for-printing < /b/ml-opt-devrel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/coro-split-func-levels.ll

--

********************


@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 23, 2024

LLVM Buildbot has detected a new failure on builder ml-opt-rel-x86-64 running on ml-opt-rel-x86-64-b2 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/185/builds/3951

Here is the relevant piece of the build log for the reference:

Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: Transforms/Inline/ML/fpi-update.ll' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
RUN: at line 8: /b/ml-opt-rel-x86-64-b1/build/bin/opt -enable-ml-inliner=release -passes='scc-oz-module-inliner,print<inline-advisor>'      -keep-inline-advisor-for-printing -max-devirt-iterations=0      -mandatory-inlining-first=0 -S < /b/ml-opt-rel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/fpi-update.ll 2>&1 | /b/ml-opt-rel-x86-64-b1/build/bin/FileCheck /b/ml-opt-rel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/fpi-update.ll
+ /b/ml-opt-rel-x86-64-b1/build/bin/opt -enable-ml-inliner=release '-passes=scc-oz-module-inliner,print<inline-advisor>' -keep-inline-advisor-for-printing -max-devirt-iterations=0 -mandatory-inlining-first=0 -S
+ /b/ml-opt-rel-x86-64-b1/build/bin/FileCheck /b/ml-opt-rel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/fpi-update.ll
/b/ml-opt-rel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/fpi-update.ll:30:10: error: CHECK: expected string not found in input
; CHECK: [MLInlineAdvisor] FPI:
         ^
<stdin>:1:1: note: scanning from here
opt: /b/ml-opt-rel-x86-64-b1/llvm-project/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp:390: llvm::DominatorTree& llvm::FunctionPropertiesUpdater::getUpdatedDominatorTree(llvm::FunctionAnalysisManager&) const: Assertion `DT.getNode(BB)' failed.
^
<stdin>:4:121: note: possible intended match here
0. Program arguments: /b/ml-opt-rel-x86-64-b1/build/bin/opt -enable-ml-inliner=release -passes=scc-oz-module-inliner,print<inline-advisor> -keep-inline-advisor-for-printing -max-devirt-iterations=0 -mandatory-inlining-first=0 -S
                                                                                                                        ^

Input file: <stdin>
Check file: /b/ml-opt-rel-x86-64-b1/llvm-project/llvm/test/Transforms/Inline/ML/fpi-update.ll

-dump-input=help explains the following input dump.

Input was:
<<<<<<
            1: opt: /b/ml-opt-rel-x86-64-b1/llvm-project/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp:390: llvm::DominatorTree& llvm::FunctionPropertiesUpdater::getUpdatedDominatorTree(llvm::FunctionAnalysisManager&) const: Assertion `DT.getNode(BB)' failed. 
check:30'0     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
            2: PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            3: Stack dump: 
check:30'0     ~~~~~~~~~~~~
            4: 0. Program arguments: /b/ml-opt-rel-x86-64-b1/build/bin/opt -enable-ml-inliner=release -passes=scc-oz-module-inliner,print<inline-advisor> -keep-inline-advisor-for-printing -max-devirt-iterations=0 -mandatory-inlining-first=0 -S 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:30'1                                                                                                                             ?                                                                                                             possible intended match
            5: 1. Running pass "require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<no-header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,simple-loop-unswitch<no-nontrivial;trivial>,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split),function(invalidate<should-not-run-function-passes>),cgscc()" on module "<stdin>" 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            6: 2. Running pass "cgscc(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<no-header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,simple-loop-unswitch<no-nontrivial;trivial>,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)" on module "<stdin>" 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            7:  #0 0x000055a946a0aa88 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/b/ml-opt-rel-x86-64-b1/build/bin/opt+0x4f50a88) 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            8:  #1 0x000055a946a07e6c SignalHandler(int) Signals.cpp:0:0 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            9:  #2 0x00007fc28975a140 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x13140) 
check:30'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            .
            .
            .
>>>>>>

--
...

mtrofin added a commit that referenced this pull request Aug 23, 2024
An assert was left over after addressing feedback. In the process of
fixing, realized the way I addressed the feedback was also incomplete.
@zmodem
Copy link
Collaborator

zmodem commented Aug 27, 2024

We're hitting assertions which seem related to this, see https://crbug.com/362296600 for details. I'll prepare a revert for now.

zmodem added a commit that referenced this pull request Aug 27, 2024
…ctionPropertiesAnalysis (#104867)"

This seems to cause asserts in our builds:

  llvm/include/llvm/Support/GenericDomTreeConstruction.h:927:
  static void llvm::DomTreeBuilder::SemiNCAInfo<llvm::DominatorTreeBase<BasicBlock, false>>::DeleteEdge(DomTreeT &, const BatchUpdatePtr, const NodePtr, const NodePtr) [DomTreeT = llvm::DominatorTreeBase<BasicBlock, false>]:
  Assertion `!IsSuccessor(To, From) && "Deleted edge still exists in the CFG!"' failed.

and

  llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp:390:
  DominatorTree &llvm::FunctionPropertiesUpdater::getUpdatedDominatorTree(FunctionAnalysisManager &) const:
  Assertion `DT.getNode(BB)' failed.

See comment on the PR.

> We need the dominator tree analysis for loop info analysis, which we need to get features like most nested loop and number of top level loops. Invalidating and recomputing these from scratch after each successful inlining can sometimes lead to lengthy compile times. We don't need to recompute from scratch, though, since we have some boundary information about where the changes to the CFG happen; moreover, for dom tree, the API supports incrementally updating the analysis result.
>
> This change addresses the dom tree part. The loop info is still recomputed from scratch. This does reduce the compile time quite significantly already, though (~5x in a specific case)
>
> The loop info change might be more involved and would follow in a subsequent PR.

This reverts commit a2a5508 and the
follow-up commit cdd11d6.
mtrofin added a commit that referenced this pull request Aug 27, 2024
mtrofin added a commit that referenced this pull request Aug 27, 2024
mtrofin added a commit that referenced this pull request Aug 27, 2024
mtrofin added a commit to mtrofin/llvm-project that referenced this pull request Aug 27, 2024
…nctionPropertiesAnalysis (llvm#104867)

Reverts c992690.

The problem is that if there is a sequence "{delete A->B} {delete A->B}
{insert A->B}" the net result is "{delete A->B}", which is not what we
want.

The fix is to sanitize the list of deletes, just like we do for inserts.
mtrofin added a commit that referenced this pull request Aug 30, 2024
…nctionPropertiesAnalysis (#104867) (#106309)

Reverts c992690.

The problem is that if there is a sequence "{delete A->B} {delete A->B}
{insert A->B}" the net result is "{delete A->B}", which is not what we
want.

Duplicate successors may happen in cases like switch statements (as
shown in the unit test).

The second problem was that in `invoke` cases, some edges we speculate may get deleted don't, but are also not reachable from the inlined call site's basic block. We just need to check which edges are actually not present anymore.

The fix is to sanitize the list of deletes, just like we do for inserts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
llvm:analysis Includes value tracking, cost tables and constant folding mlgo
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants