diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -48,6 +48,7 @@ #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/Bitcode/BitcodeWriterPass.h" +#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h" #include "llvm/IR/LLVMRemarkStreamer.h" #include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/Verifier.h" @@ -1014,6 +1015,18 @@ optimizationRemarkHandler( llvm::cast(di)); break; + case llvm::DK_MachineOptimizationRemark: + optimizationRemarkHandler( + llvm::cast(di)); + break; + case llvm::DK_MachineOptimizationRemarkMissed: + optimizationRemarkHandler( + llvm::cast(di)); + break; + case llvm::DK_MachineOptimizationRemarkAnalysis: + optimizationRemarkHandler( + llvm::cast(di)); + break; default: break; } diff --git a/flang/test/Driver/optimization-remark-backend.f90 b/flang/test/Driver/optimization-remark-backend.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Driver/optimization-remark-backend.f90 @@ -0,0 +1,23 @@ +! This file tests backend passes emitted by the -Rpass family of flags +! loop-delete isn't enabled at O0 so we use at least O1 + +! DEFINE: %{output} = -S -o /dev/null 2>&1 + +! Check full -Rpass-missed message is emitted +! RUN: %flang %s -O1 -Rpass-missed %{output} 2>&1 | FileCheck %s --check-prefix=MISSED + +! Check full -Rpass-analysis message is emitted +! RUN: %flang %s -O1 -Rpass-analysis %{output} 2>&1 | FileCheck %s --check-prefix=ANALYSIS + +! MISSED: remark: {{[0-9]+}} virtual registers copies {{.*}} total copies cost generated in function +! ANALYSIS: remark: BasicBlock: + +program forttest + implicit none + integer :: n + + do n = 1,2 + print *, "" + end do + +end program forttest