From 795e721a721e2594136fa6682fa370631722da37 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sun, 1 Feb 2015 10:47:25 +0000 Subject: [PATCH] [PM] Teach the module-to-function adaptor to not run function passes over declarations. This is both quite unproductive and causes things to crash, for example domtree would just assert. I've added a declaration and a domtree run to the basic high-level tests for the new pass manager. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227724 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/PassManager.h | 3 +++ test/Other/new-pass-manager.ll | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/llvm/IR/PassManager.h b/include/llvm/IR/PassManager.h index a57a5020b8d..56fd2a075e6 100644 --- a/include/llvm/IR/PassManager.h +++ b/include/llvm/IR/PassManager.h @@ -783,6 +783,9 @@ public: PreservedAnalyses PA = PreservedAnalyses::all(); for (Function &F : M) { + if (F.isDeclaration()) + continue; + PreservedAnalyses PassPA = Pass.run(F, FAM); // We know that the function pass couldn't have invalidated any other diff --git a/test/Other/new-pass-manager.ll b/test/Other/new-pass-manager.ll index a1bffe4d63d..fb84e787a0a 100644 --- a/test/Other/new-pass-manager.ll +++ b/test/Other/new-pass-manager.ll @@ -290,6 +290,16 @@ ; CHECK-TIRA-NOT: Running analysis: TargetIRAnalysis ; CHECK-TIRA: Finished pass manager +; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \ +; RUN: -passes='require' \ +; RUN: | FileCheck %s --check-prefix=CHECK-DT +; CHECK-DT: Starting pass manager +; CHECK-DT: Running pass: RequireAnalysisPass +; CHECK-DT: Running analysis: DominatorTreeAnalysis +; CHECK-DT: Finished pass manager + define void @foo() { ret void } + +declare void @bar()