From e87d2d2cc9c4ffd3423a45eec5768989666242bc Mon Sep 17 00:00:00 2001 From: Victor Kingi Date: Tue, 29 Aug 2023 14:56:02 +0000 Subject: [PATCH] [Flang][Driver] Add support for backend passes in R_Group Previously, R_Group options only reported middle-end passes. This patch allows backend passes to be reported as well. Depends on D158174. That patch adds backend support to R_Group options. Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D159260 --- flang/lib/Frontend/FrontendActions.cpp | 13 +++++++++++ .../Driver/optimization-remark-backend.f90 | 23 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 flang/test/Driver/optimization-remark-backend.f90 diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp index 9e5efb8d6ed6..e61178bb83dd 100644 --- 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 @@ public: 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 index 000000000000..a38b024b7b8d --- /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