summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Analysis/RegionInfo.cpp6
-rw-r--r--test/Analysis/RegionInfo/20100809_bb_not_in_domtree.ll20
2 files changed, 24 insertions, 2 deletions
diff --git a/lib/Analysis/RegionInfo.cpp b/lib/Analysis/RegionInfo.cpp
index 27cee76e08..abc057a773 100644
--- a/lib/Analysis/RegionInfo.cpp
+++ b/lib/Analysis/RegionInfo.cpp
@@ -136,14 +136,16 @@ bool Region::isSimple() const {
return false;
for (pred_iterator PI = pred_begin(entry), PE = pred_end(entry); PI != PE;
- ++PI)
- if (!contains(*PI)) {
+ ++PI) {
+ BasicBlock *Pred = *PI;
+ if (DT->getNode(Pred) && !contains(Pred)) {
if (found) {
isSimple = false;
break;
}
found = true;
}
+ }
found = false;
diff --git a/test/Analysis/RegionInfo/20100809_bb_not_in_domtree.ll b/test/Analysis/RegionInfo/20100809_bb_not_in_domtree.ll
new file mode 100644
index 0000000000..218b4375f7
--- /dev/null
+++ b/test/Analysis/RegionInfo/20100809_bb_not_in_domtree.ll
@@ -0,0 +1,20 @@
+; RUN: opt -regions %s
+define i32 @main() nounwind {
+entry:
+ br label %for.cond
+
+test:
+ br label %for.cond
+
+for.cond: ; preds = %for.inc, %entry
+ br i1 true, label %for.body, label %for.end
+
+for.body: ; preds = %for.cond
+ br label %for.inc
+
+for.inc: ; preds = %for.body
+ br label %for.cond
+
+for.end: ; preds = %for.cond
+ ret i32 0
+}