Index: llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp =================================================================== --- llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp +++ llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp @@ -473,7 +473,8 @@ } for (auto &Assume : AC.assumptions()) { if (auto *II = dyn_cast_or_null(Assume)) - processAssume(II, II->getParent(), OpsToRename); + if (DT.isReachableFromEntry(II->getParent())) + processAssume(II, II->getParent(), OpsToRename); } // Now rename all our operations. renameUses(OpsToRename); Index: llvm/trunk/test/Transforms/Util/PredicateInfo/unreachable.ll =================================================================== --- llvm/trunk/test/Transforms/Util/PredicateInfo/unreachable.ll +++ llvm/trunk/test/Transforms/Util/PredicateInfo/unreachable.ll @@ -0,0 +1,25 @@ +; RUN: opt -print-predicateinfo < %s 2>&1 | FileCheck %s + +declare void @foo() +declare void @llvm.assume(i1) + +define void @bar(i32* %p) { +entry: +; CHECK-LABEL: @bar + br label %end + +unreachable1: + %v1 = load i32, i32* %p, align 4 + %c1 = icmp eq i32 %v1, 0 + call void @llvm.assume(i1 %c1) + br label %unreachable2 + +unreachable2: + %v2 = load i32, i32* %p, align 4 + %c2 = icmp eq i32 %v2, 0 + call void @llvm.assume(i1 %c2) + br label %end + +end: + ret void +}