diff --git a/llvm/tools/llvm-exegesis/lib/Analysis.h b/llvm/tools/llvm-exegesis/lib/Analysis.h --- a/llvm/tools/llvm-exegesis/lib/Analysis.h +++ b/llvm/tools/llvm-exegesis/lib/Analysis.h @@ -39,7 +39,8 @@ Analysis(const Target &Target, std::unique_ptr InstrInfo, const InstructionBenchmarkClustering &Clustering, double AnalysisInconsistencyEpsilon, - bool AnalysisDisplayUnstableOpcodes); + bool AnalysisDisplayUnstableOpcodes, + const std::string &ForceCpuName = ""); // Prints a csv of instructions for each cluster. struct PrintClusters {}; diff --git a/llvm/tools/llvm-exegesis/lib/Analysis.cpp b/llvm/tools/llvm-exegesis/lib/Analysis.cpp --- a/llvm/tools/llvm-exegesis/lib/Analysis.cpp +++ b/llvm/tools/llvm-exegesis/lib/Analysis.cpp @@ -154,7 +154,8 @@ Analysis::Analysis(const Target &Target, std::unique_ptr InstrInfo, const InstructionBenchmarkClustering &Clustering, double AnalysisInconsistencyEpsilon, - bool AnalysisDisplayUnstableOpcodes) + bool AnalysisDisplayUnstableOpcodes, + const std::string &ForceCpuName) : Clustering_(Clustering), InstrInfo_(std::move(InstrInfo)), AnalysisInconsistencyEpsilonSquared_(AnalysisInconsistencyEpsilon * AnalysisInconsistencyEpsilon), @@ -163,12 +164,14 @@ return; const InstructionBenchmark &FirstPoint = Clustering.getPoints().front(); + const std::string CpuName = + ForceCpuName.empty() ? FirstPoint.CpuName : ForceCpuName; RegInfo_.reset(Target.createMCRegInfo(FirstPoint.LLVMTriple)); MCTargetOptions MCOptions; AsmInfo_.reset( Target.createMCAsmInfo(*RegInfo_, FirstPoint.LLVMTriple, MCOptions)); - SubtargetInfo_.reset(Target.createMCSubtargetInfo(FirstPoint.LLVMTriple, - FirstPoint.CpuName, "")); + SubtargetInfo_.reset( + Target.createMCSubtargetInfo(FirstPoint.LLVMTriple, CpuName, "")); InstPrinter_.reset(Target.createMCInstPrinter( Triple(FirstPoint.LLVMTriple), 0 /*default variant*/, *AsmInfo_, *InstrInfo_, *RegInfo_)); diff --git a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp --- a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp +++ b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp @@ -436,7 +436,7 @@ const Analysis Analyzer(*TheTarget, std::move(InstrInfo), Clustering, AnalysisInconsistencyEpsilon, - AnalysisDisplayUnstableOpcodes); + AnalysisDisplayUnstableOpcodes, CpuName); maybeRunAnalysis(Analyzer, "analysis clusters", AnalysisClustersOutputFile);