aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/TargetPassConfig.cpp
diff options
context:
space:
mode:
authorRong Xu <xur@google.com>2021-05-18 16:08:38 -0700
committerRong Xu <xur@google.com>2021-05-18 16:23:43 -0700
commit886629a8c9e58752627d8ae7abf6fa93191a3df8 (patch)
tree7088ed315c5e8e85dee413f325174183bf6fe2cd /llvm/lib/CodeGen/TargetPassConfig.cpp
parentff99fdf63f9939d5205c0c0df85f28c5509eac0f (diff)
downloadllvm-886629a8c9e58752627d8ae7abf6fa93191a3df8.zip
llvm-886629a8c9e58752627d8ae7abf6fa93191a3df8.tar.gz
llvm-886629a8c9e58752627d8ae7abf6fa93191a3df8.tar.bz2
[SampleFDO] New hierarchical discriminator for Flow Sensitive SampleFDO
This patch implements first part of Flow Sensitive SampleFDO (FSAFDO). It has the following changes: (1) disable current discriminator encoding scheme, (2) new hierarchical discriminator for FSAFDO. For this patch, option "-enable-fs-discriminator=true" turns on the new functionality. Option "-enable-fs-discriminator=false" (the default) keeps the current SampleFDO behavior. When the fs-discriminator is enabled, we insert a flag variable, namely, llvm_fs_discriminator, to the object. This symbol will checked by create_llvm_prof tool, and used to generate a profile with FS-AFDO discriminators enabled. If this happens, for an extbinary format profile, create_llvm_prof tool will add a flag to profile summary section. Differential Revision: https://reviews.llvm.org/D102246
Diffstat (limited to 'llvm/lib/CodeGen/TargetPassConfig.cpp')
-rw-r--r--llvm/lib/CodeGen/TargetPassConfig.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index f5a016e9..ed36384 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -39,6 +39,7 @@
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
+#include "llvm/Support/Discriminator.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/Threading.h"
@@ -165,6 +166,13 @@ static cl::opt<GlobalISelAbortMode> EnableGlobalISelAbort(
clEnumValN(GlobalISelAbortMode::DisableWithDiag, "2",
"Disable the abort but emit a diagnostic on failure")));
+// An option that disables inserting FS-AFDO discriminators before emit.
+// This is mainly for debugging and tuning purpose.
+static cl::opt<bool>
+ FSNoFinalDiscrim("fs-no-final-discrim", cl::init(false), cl::Hidden,
+ cl::desc("Do not insert FS-AFDO discriminators before "
+ "emit."));
+
// Temporary option to allow experimenting with MachineScheduler as a post-RA
// scheduler. Targets can "properly" enable this with
// substitutePass(&PostRASchedulerID, &PostMachineSchedulerID).
@@ -334,6 +342,8 @@ struct InsertedPass {
namespace llvm {
+extern cl::opt<bool> EnableFSDiscriminator;
+
class PassConfigImpl {
public:
// List of passes explicitly substituted by this target. Normally this is
@@ -1167,6 +1177,10 @@ void TargetPassConfig::addMachinePasses() {
addPass(&XRayInstrumentationID);
addPass(&PatchableFunctionID);
+ if (EnableFSDiscriminator && !FSNoFinalDiscrim)
+ addPass(createMIRAddFSDiscriminatorsPass(PASS_LAST_DIS_BIT_BEG,
+ PASS_LAST_DIS_BIT_END));
+
addPreEmitPass();
if (TM->Options.EnableIPRA)