[llvm] fc55ad4 - Revert "[StructurizeCFG] Refactor insertConditions. NFC. (#115476)" (#136370)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 19 05:04:51 PDT 2025
Author: Shilei Tian
Date: 2025-04-19T08:04:48-04:00
New Revision: fc55ad4ceb7dda17d4d7eb3d44ac3833ecda1a84
URL: https://github.com/llvm/llvm-project/commit/fc55ad4ceb7dda17d4d7eb3d44ac3833ecda1a84
DIFF: https://github.com/llvm/llvm-project/commit/fc55ad4ceb7dda17d4d7eb3d44ac3833ecda1a84.diff
LOG: Revert "[StructurizeCFG] Refactor insertConditions. NFC. (#115476)" (#136370)
Added:
Modified:
llvm/lib/Transforms/Scalar/StructurizeCFG.cpp
llvm/test/Transforms/StructurizeCFG/simple-structurizecfg-crash.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp b/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp
index 00c4fcc76e791..eb22b50532695 100644
--- a/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp
+++ b/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp
@@ -612,25 +612,28 @@ void StructurizeCFG::insertConditions(bool Loops) {
BasicBlock *SuccTrue = Term->getSuccessor(0);
BasicBlock *SuccFalse = Term->getSuccessor(1);
- BBPredicates &Preds = Loops ? LoopPreds[SuccFalse] : Predicates[SuccTrue];
+ PhiInserter.Initialize(Boolean, "");
+ PhiInserter.AddAvailableValue(Loops ? SuccFalse : Parent, Default);
- if (Preds.size() == 1 && Preds.begin()->first == Parent) {
- auto &PI = Preds.begin()->second;
- Term->setCondition(PI.Pred);
- CondBranchWeights::setMetadata(*Term, PI.Weights);
- } else {
- PhiInserter.Initialize(Boolean, "");
- PhiInserter.AddAvailableValue(Loops ? SuccFalse : Parent, Default);
+ BBPredicates &Preds = Loops ? LoopPreds[SuccFalse] : Predicates[SuccTrue];
- NearestCommonDominator Dominator(DT);
- Dominator.addBlock(Parent);
+ NearestCommonDominator Dominator(DT);
+ Dominator.addBlock(Parent);
- for (auto [BB, PI] : Preds) {
- assert(BB != Parent);
- PhiInserter.AddAvailableValue(BB, PI.Pred);
- Dominator.addAndRememberBlock(BB);
+ PredInfo ParentInfo{nullptr, std::nullopt};
+ for (auto [BB, PI] : Preds) {
+ if (BB == Parent) {
+ ParentInfo = PI;
+ break;
}
+ PhiInserter.AddAvailableValue(BB, PI.Pred);
+ Dominator.addAndRememberBlock(BB);
+ }
+ if (ParentInfo.Pred) {
+ Term->setCondition(ParentInfo.Pred);
+ CondBranchWeights::setMetadata(*Term, ParentInfo.Weights);
+ } else {
if (!Dominator.resultIsRememberedBlock())
PhiInserter.AddAvailableValue(Dominator.result(), Default);
diff --git a/llvm/test/Transforms/StructurizeCFG/simple-structurizecfg-crash.ll b/llvm/test/Transforms/StructurizeCFG/simple-structurizecfg-crash.ll
index 6edc0b883f51e..691f43bdcf948 100644
--- a/llvm/test/Transforms/StructurizeCFG/simple-structurizecfg-crash.ll
+++ b/llvm/test/Transforms/StructurizeCFG/simple-structurizecfg-crash.ll
@@ -1,11 +1,19 @@
-; RUN: opt -S -passes=structurizecfg %s -o -
-; REQUIRES: asserts
-; XFAIL: *
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -S -passes=structurizecfg %s -o - | FileCheck %s
; Issue tracking: https://github.com/llvm/llvm-project/issues/126534.
-; FIXME: This test is expected to crash. Generate checklines after the crash is fixed.
define void @foo() {
+; CHECK-LABEL: define void @foo() {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: br label %[[COND_FALSE:.*]]
+; CHECK: [[COND_TRUE:.*]]:
+; CHECK-NEXT: br label %[[COND_END:.*]]
+; CHECK: [[COND_FALSE]]:
+; CHECK-NEXT: br i1 false, label %[[COND_TRUE]], label %[[COND_END]]
+; CHECK: [[COND_END]]:
+; CHECK-NEXT: ret void
+;
entry:
br i1 false, label %cond.true, label %cond.false
More information about the llvm-commits
mailing list