[clang] [llvm] [llc] Add -mtune option (PR #186998)
Tomer Shafir via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 17 08:08:09 PDT 2026
https://github.com/tomershafir updated https://github.com/llvm/llvm-project/pull/186998
>From 67afa7227e03d9cbc18aac138ded9f7cbaef07e7 Mon Sep 17 00:00:00 2001
From: tomershafir <tomer.shafir8 at gmail.com>
Date: Tue, 17 Mar 2026 13:05:38 +0200
Subject: [PATCH 1/3] [llc] Add -mtune option
This patch adds a Clang-compatible -mtune option to llc, to enable decoupled ISA and microarchitecture targeting, which is especially important for backend development. For example, it can enable to easily test a subtarget feature or scheduling model effects on codegen across a variaty of workloads on the IR corpus benchmark: https://github.com/dtcxzyw/llvm-codegen-benchmark.
The implementation adds an isolated generic codegen flag, to establish a base for wider usage - the plan is to add it to `opt` as well in a followup patch. Then `llc` consumes it, and sets `tune-cpu` attributes for functions, which are further consumed by the backend.
---
llvm/docs/CommandGuide/llc.rst | 11 ++++
llvm/docs/ReleaseNotes.md | 1 +
llvm/include/llvm/CodeGen/CommandFlags.h | 20 +++++++
llvm/lib/CodeGen/CommandFlags.cpp | 46 ++++++++++++++---
llvm/test/tools/llc/mtune.ll | 66 ++++++++++++++++++++++++
llvm/tools/llc/llc.cpp | 25 +++++----
6 files changed, 151 insertions(+), 18 deletions(-)
create mode 100644 llvm/test/tools/llc/mtune.ll
diff --git a/llvm/docs/CommandGuide/llc.rst b/llvm/docs/CommandGuide/llc.rst
index ffcccfbaefffb..61c2589158e47 100644
--- a/llvm/docs/CommandGuide/llc.rst
+++ b/llvm/docs/CommandGuide/llc.rst
@@ -81,6 +81,17 @@ End-user Options
llvm-as < /dev/null | llc -march=xyz -mcpu=help
+.. option:: -mtune=<cpuname>
+
+ Specify a specific chip microarchitecture in the current architecture
+ to tune code for. By default this is inferred from the target triple and
+ autodetected to the current architecture. For a list of available tuning
+ CPUs, use:
+
+ .. code-block:: none
+
+ llvm-as < /dev/null | llc -march=xyz -mtune=help
+
.. option:: -filetype=<output file type>
Specify what kind of output ``llc`` should generated. Options are: ``asm``
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index e685660195bcd..0bddebea4b850 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -214,6 +214,7 @@ Changes to the LLVM tools
* `llvm-objcopy` no longer corrupts the symbol table when `--update-section` is called for ELF files.
* `FileCheck` option `-check-prefix` now accepts a comma-separated list of
prefixes, making it an alias of the existing `-check-prefixes` option.
+* Add `-mtune` option to `llc`.
Changes to LLDB
---------------
diff --git a/llvm/include/llvm/CodeGen/CommandFlags.h b/llvm/include/llvm/CodeGen/CommandFlags.h
index d111cb9982cb7..e872c38605dcb 100644
--- a/llvm/include/llvm/CodeGen/CommandFlags.h
+++ b/llvm/include/llvm/CodeGen/CommandFlags.h
@@ -37,6 +37,8 @@ LLVM_ABI std::string getMArch();
LLVM_ABI std::string getMCPU();
+LLVM_ABI std::string getMTune();
+
LLVM_ABI std::vector<std::string> getMAttrs();
LLVM_ABI Reloc::Model getRelocModel();
@@ -162,6 +164,12 @@ struct RegisterCodeGenFlags {
LLVM_ABI RegisterCodeGenFlags();
};
+/// Tools that support subtarget tuning should create this object with static
+/// storage to register the -mtune command line option.
+struct RegisterMTuneFlag {
+ LLVM_ABI RegisterMTuneFlag();
+};
+
/// Tools that support stats saving should create this object with static
/// storage to register the --save-stats command line option.
struct RegisterSaveStatsFlag {
@@ -184,17 +192,29 @@ InitTargetOptionsFromCodeGenFlags(const llvm::Triple &TheTriple);
LLVM_ABI std::string getCPUStr();
+LLVM_ABI std::string getTuneCPUStr();
+
LLVM_ABI std::string getFeaturesStr();
LLVM_ABI std::vector<std::string> getFeatureList();
LLVM_ABI void renderBoolStringAttr(AttrBuilder &B, StringRef Name, bool Val);
+/// Set function attributes of function \p F based on CPU, TuneCPU, Features,
+/// and command line flags.
+LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
+ StringRef Features, Function &F);
+
/// Set function attributes of function \p F based on CPU, Features, and command
/// line flags.
LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef Features,
Function &F);
+/// Set function attributes of functions in Module M based on CPU,
+/// TuneCPU, Features, and command line flags.
+LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
+ StringRef Features, Module &M);
+
/// Set function attributes of functions in Module M based on CPU,
/// Features, and command line flags.
LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef Features,
diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp
index a702d2aa77c74..9045affcc1049 100644
--- a/llvm/lib/CodeGen/CommandFlags.cpp
+++ b/llvm/lib/CodeGen/CommandFlags.cpp
@@ -66,6 +66,7 @@ using namespace llvm;
CGOPT(std::string, MArch)
CGOPT(std::string, MCPU)
+CGOPT(std::string, MTune)
CGLIST(std::string, MAttrs)
CGOPT_EXP(Reloc::Model, RelocModel)
CGOPT(ThreadModel::Model, ThreadModel)
@@ -541,6 +542,15 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() {
mc::RegisterMCTargetOptionsFlags();
}
+codegen::RegisterMTuneFlag::RegisterMTuneFlag() {
+ static cl::opt<std::string> MTune(
+ "mtune",
+ cl::desc("Tune for a specific CPU microarchitecture (-mtune=help for "
+ "details)"),
+ cl::value_desc("tune-cpu-name"), cl::init(""));
+ CGBINDOPT(MTune);
+}
+
codegen::RegisterSaveStatsFlag::RegisterSaveStatsFlag() {
static cl::opt<SaveStatsMode> SaveStats(
"save-stats",
@@ -647,6 +657,18 @@ std::string codegen::getCPUStr() {
return MCPU;
}
+std::string codegen::getTuneCPUStr() {
+ std::string TuneCPU = getMTune();
+
+ // If user asked for the 'native' tune CPU, autodetect here. If autodection
+ // fails, this will set the tune CPU to an empty string which tells the target
+ // to pick a basic default.
+ if (TuneCPU == "native")
+ return std::string(sys::getHostCPUName());
+
+ return TuneCPU;
+}
+
std::string codegen::getFeaturesStr() {
SubtargetFeatures Features;
@@ -691,16 +713,16 @@ void codegen::renderBoolStringAttr(AttrBuilder &B, StringRef Name, bool Val) {
renderBoolStringAttr(NewAttrs, AttrName, *CL); \
} while (0)
-/// Set function attributes of function \p F based on CPU, Features, and command
-/// line flags.
-void codegen::setFunctionAttributes(StringRef CPU, StringRef Features,
- Function &F) {
+void codegen::setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
+ StringRef Features, Function &F) {
auto &Ctx = F.getContext();
AttributeList Attrs = F.getAttributes();
AttrBuilder NewAttrs(Ctx);
if (!CPU.empty() && !F.hasFnAttribute("target-cpu"))
NewAttrs.addAttribute("target-cpu", CPU);
+ if (!TuneCPU.empty() && !F.hasFnAttribute("tune-cpu"))
+ NewAttrs.addAttribute("tune-cpu", TuneCPU);
if (!Features.empty()) {
// Append the command line features to any that are already on the function.
StringRef OldFeatures =
@@ -761,12 +783,20 @@ void codegen::setFunctionAttributes(StringRef CPU, StringRef Features,
F.setAttributes(Attrs.addFnAttributes(Ctx, NewAttrs));
}
-/// Set function attributes of functions in Module M based on CPU,
-/// Features, and command line flags.
void codegen::setFunctionAttributes(StringRef CPU, StringRef Features,
- Module &M) {
+ Function &F) {
+ return setFunctionAttributes(CPU, "", Features, F);
+}
+
+void codegen::setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
+ StringRef Features, Module &M) {
for (Function &F : M)
- setFunctionAttributes(CPU, Features, F);
+ setFunctionAttributes(CPU, TuneCPU, Features, F);
+}
+
+void codegen::setFunctionAttributes(StringRef CPU, StringRef Features,
+ Module &M) {
+ return setFunctionAttributes(CPU, "", Features, M);
}
Expected<std::unique_ptr<TargetMachine>>
diff --git a/llvm/test/tools/llc/mtune.ll b/llvm/test/tools/llc/mtune.ll
new file mode 100644
index 0000000000000..bf2fc85afc568
--- /dev/null
+++ b/llvm/test/tools/llc/mtune.ll
@@ -0,0 +1,66 @@
+; REQUIRES: aarch64-registered-target
+
+; There shouldn't be a default -mtune.
+; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK-NOTUNE
+
+; RUN: llc < %s -mtriple=aarch64 -mtune=generic | FileCheck %s --check-prefixes=CHECK-TUNE-GENERIC
+; RUN: llc < %s -mtriple=aarch64 -mtune=apple-m5 | FileCheck %s --check-prefixes=CHECK-TUNE-APPLE-M5
+
+; Check interaction between mcpu and mtune.
+; RUN: llc < %s -mtriple=aarch64 -mcpu=apple-m5 | FileCheck %s --check-prefixes=CHECK-TUNE-APPLE-M5
+; RUN: llc < %s -mtriple=aarch64 -mcpu=apple-m5 -mtune=generic | FileCheck %s --check-prefixes=CHECK-TUNE-GENERIC
+
+; Test -mtune=help
+; RUN: llc -mtriple=aarch64 -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP
+; RUN: llc -mtriple=aarch64 -mtune=help -o %t.s 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP
+; RUN: llc < %s -mtriple=aarch64 -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP
+; RUN: llc < %s -mtriple=aarch64 -mtune=help -o %t.s 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP
+
+; Missing target triple for -mtune=help
+; RUN: not llc -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP-MISSING-TRIPLE
+; RUN: not llc < %s -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP-MISSING-TRIPLE
+
+; CHECK-TUNE-HELP: Available CPUs for this target:
+; CHECK-TUNE-HELP: Available features for this target:
+
+; CHECK-TUNE-HELP-MISSING-TRIPLE: error: unable to get target for 'unknown', see --version and --triple.
+
+; A test case that depends on `FeatureZCRegMoveFPR128` tuning feature, to enable -mtune verification
+; through codegen effects. Taken from: llvm/test/CodeGen/AArch64/arm64-zero-cycle-regmove-fpr.ll
+define void @zero_cycle_regmove_FPR32(float %a, float %b, float %c, float %d) {
+; CHECK-NOTUNE-LABEL: zero_cycle_regmove_FPR32:
+; CHECK-NOTUNE: fmov s0, s2
+; CHECK-NOTUNE-NEXT: fmov s1, s3
+; CHECK-NOTUNE-NEXT: fmov s8, s3
+; CHECK-NOTUNE-NEXT: fmov s9, s2
+; CHECK-NOTUNE-NEXT: bl foo_float
+; CHECK-NOTUNE-NEXT: fmov s0, s9
+; CHECK-NOTUNE-NEXT: fmov s1, s8
+; CHECK-NOTUNE-NEXT: bl foo_float
+;
+; CHECK-TUNE-GENERIC-LABEL: zero_cycle_regmove_FPR32:
+; CHECK-TUNE-GENERIC: fmov s0, s2
+; CHECK-TUNE-GENERIC-NEXT: fmov s1, s3
+; CHECK-TUNE-GENERIC-NEXT: fmov s8, s3
+; CHECK-TUNE-GENERIC-NEXT: fmov s9, s2
+; CHECK-TUNE-GENERIC-NEXT: bl foo_float
+; CHECK-TUNE-GENERIC-NEXT: fmov s0, s9
+; CHECK-TUNE-GENERIC-NEXT: fmov s1, s8
+; CHECK-TUNE-GENERIC-NEXT: bl foo_float
+;
+; CHECK-TUNE-APPLE-M5-LABEL: zero_cycle_regmove_FPR32:
+; CHECK-TUNE-APPLE-M5: mov v8.16b, v3.16b
+; CHECK-TUNE-APPLE-M5-NEXT: mov v9.16b, v2.16b
+; CHECK-TUNE-APPLE-M5-NEXT: mov v0.16b, v2.16b
+; CHECK-TUNE-APPLE-M5-NEXT: mov v1.16b, v3.16b
+; CHECK-TUNE-APPLE-M5-NEXT: bl foo_float
+; CHECK-TUNE-APPLE-M5-NEXT: mov v0.16b, v9.16b
+; CHECK-TUNE-APPLE-M5-NEXT: mov v1.16b, v8.16b
+; CHECK-TUNE-APPLE-M5-NEXT: bl foo_float
+entry:
+ %call = call float @foo_float(float %c, float %d)
+ %call1 = call float @foo_float(float %c, float %d)
+ unreachable
+}
+
+declare float @foo_float(float, float)
diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp
index 34ce2bc0622a6..d6728d7946a69 100644
--- a/llvm/tools/llc/llc.cpp
+++ b/llvm/tools/llc/llc.cpp
@@ -67,6 +67,7 @@
using namespace llvm;
static codegen::RegisterCodeGenFlags CGF;
+static codegen::RegisterMTuneFlag MTF;
static codegen::RegisterSaveStatsFlag SSF;
// General options for llc. Other pass-specific options are specified
@@ -501,17 +502,19 @@ static int compileModule(char **argv, SmallVectorImpl<PassPlugin> &PluginList,
std::unique_ptr<Module> M;
std::unique_ptr<MIRParser> MIR;
Triple TheTriple;
- std::string CPUStr = codegen::getCPUStr(),
- FeaturesStr = codegen::getFeaturesStr();
+ std::string CPUStr = codegen::getCPUStr();
+ std::string TuneCPUStr = codegen::getTuneCPUStr();
+ std::string FeaturesStr = codegen::getFeaturesStr();
// Set attributes on functions as loaded from MIR from command line arguments.
- auto setMIRFunctionAttributes = [&CPUStr, &FeaturesStr](Function &F) {
- codegen::setFunctionAttributes(CPUStr, FeaturesStr, F);
+ auto setMIRFunctionAttributes = [&CPUStr, &TuneCPUStr,
+ &FeaturesStr](Function &F) {
+ codegen::setFunctionAttributes(CPUStr, TuneCPUStr, FeaturesStr, F);
};
auto MAttrs = codegen::getMAttrs();
- bool SkipModule =
- CPUStr == "help" || (!MAttrs.empty() && MAttrs.front() == "help");
+ bool SkipModule = CPUStr == "help" || TuneCPUStr == "help" ||
+ (!MAttrs.empty() && MAttrs.front() == "help");
CodeGenOptLevel OLvl;
if (auto Level = CodeGenOpt::parseLevel(OptLevel)) {
@@ -659,8 +662,10 @@ static int compileModule(char **argv, SmallVectorImpl<PassPlugin> &PluginList,
}
InitializeOptions(TheTriple);
+ // Pass "help" as CPU for -mtune=help
+ std::string SkipModuleCPU = (TuneCPUStr == "help" ? "help" : CPUStr);
Target = std::unique_ptr<TargetMachine>(TheTarget->createTargetMachine(
- TheTriple, CPUStr, FeaturesStr, Options, RM, CM, OLvl));
+ TheTriple, SkipModuleCPU, FeaturesStr, Options, RM, CM, OLvl));
assert(Target && "Could not allocate target machine!");
// Set PGO options based on command line flags
@@ -712,9 +717,9 @@ static int compileModule(char **argv, SmallVectorImpl<PassPlugin> &PluginList,
if (!NoVerify && verifyModule(*M, &errs()))
reportError("input module cannot be verified", InputFilename);
- // Override function attributes based on CPUStr, FeaturesStr, and command line
- // flags.
- codegen::setFunctionAttributes(CPUStr, FeaturesStr, *M);
+ // Override function attributes based on CPUStr, TuneCPUStr, FeaturesStr, and
+ // command line flags.
+ codegen::setFunctionAttributes(CPUStr, TuneCPUStr, FeaturesStr, *M);
for (auto &Plugin : PluginList) {
CodeGenFileType CGFT = codegen::getFileType();
>From c40ece134f91856b3e9344a0251f47392a8fde70 Mon Sep 17 00:00:00 2001
From: tomershafir <tomer.shafir8 at gmail.com>
Date: Tue, 17 Mar 2026 16:23:44 +0200
Subject: [PATCH 2/3] default tune param instead overload for
setFunctionAttributes
---
.../clang-fuzzer/handle-llvm/handle_llvm.cpp | 4 ++--
llvm/include/llvm/CodeGen/CommandFlags.h | 18 ++++-------------
llvm/lib/CodeGen/CommandFlags.cpp | 20 +++++--------------
llvm/tools/llc/llc.cpp | 4 ++--
.../tools/llvm-opt-fuzzer/llvm-opt-fuzzer.cpp | 4 ++--
llvm/tools/opt/optdriver.cpp | 2 +-
6 files changed, 16 insertions(+), 36 deletions(-)
diff --git a/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp b/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
index 798b34b3ef0af..942e35c30e19f 100644
--- a/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
+++ b/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
@@ -133,8 +133,8 @@ static std::string OptLLVM(const std::string &IR, CodeGenOptLevel OLvl) {
if (!TM)
ErrorAndExit("Could not create target machine");
- codegen::setFunctionAttributes(codegen::getCPUStr(),
- codegen::getFeaturesStr(), *M);
+ codegen::setFunctionAttributes(*M, codegen::getCPUStr(),
+ codegen::getFeaturesStr());
// Add a pass that writes the optimized IR to an output stream
std::string outString;
diff --git a/llvm/include/llvm/CodeGen/CommandFlags.h b/llvm/include/llvm/CodeGen/CommandFlags.h
index e872c38605dcb..d10e8732c1562 100644
--- a/llvm/include/llvm/CodeGen/CommandFlags.h
+++ b/llvm/include/llvm/CodeGen/CommandFlags.h
@@ -202,23 +202,13 @@ LLVM_ABI void renderBoolStringAttr(AttrBuilder &B, StringRef Name, bool Val);
/// Set function attributes of function \p F based on CPU, TuneCPU, Features,
/// and command line flags.
-LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
- StringRef Features, Function &F);
-
-/// Set function attributes of function \p F based on CPU, Features, and command
-/// line flags.
-LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef Features,
- Function &F);
+LLVM_ABI void setFunctionAttributes(Function &F, StringRef CPU,
+ StringRef Features, StringRef TuneCPU = "");
/// Set function attributes of functions in Module M based on CPU,
/// TuneCPU, Features, and command line flags.
-LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
- StringRef Features, Module &M);
-
-/// Set function attributes of functions in Module M based on CPU,
-/// Features, and command line flags.
-LLVM_ABI void setFunctionAttributes(StringRef CPU, StringRef Features,
- Module &M);
+LLVM_ABI void setFunctionAttributes(Module &M, StringRef CPU,
+ StringRef Features, StringRef TuneCPU = "");
/// Should value-tracking variable locations / instruction referencing be
/// enabled by default for this triple?
diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp
index 9045affcc1049..302b6d479194c 100644
--- a/llvm/lib/CodeGen/CommandFlags.cpp
+++ b/llvm/lib/CodeGen/CommandFlags.cpp
@@ -713,8 +713,8 @@ void codegen::renderBoolStringAttr(AttrBuilder &B, StringRef Name, bool Val) {
renderBoolStringAttr(NewAttrs, AttrName, *CL); \
} while (0)
-void codegen::setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
- StringRef Features, Function &F) {
+void codegen::setFunctionAttributes(Function &F, StringRef CPU,
+ StringRef Features, StringRef TuneCPU) {
auto &Ctx = F.getContext();
AttributeList Attrs = F.getAttributes();
AttrBuilder NewAttrs(Ctx);
@@ -783,20 +783,10 @@ void codegen::setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
F.setAttributes(Attrs.addFnAttributes(Ctx, NewAttrs));
}
-void codegen::setFunctionAttributes(StringRef CPU, StringRef Features,
- Function &F) {
- return setFunctionAttributes(CPU, "", Features, F);
-}
-
-void codegen::setFunctionAttributes(StringRef CPU, StringRef TuneCPU,
- StringRef Features, Module &M) {
+void codegen::setFunctionAttributes(Module &M, StringRef CPU,
+ StringRef Features, StringRef TuneCPU) {
for (Function &F : M)
- setFunctionAttributes(CPU, TuneCPU, Features, F);
-}
-
-void codegen::setFunctionAttributes(StringRef CPU, StringRef Features,
- Module &M) {
- return setFunctionAttributes(CPU, "", Features, M);
+ setFunctionAttributes(F, CPU, Features, TuneCPU);
}
Expected<std::unique_ptr<TargetMachine>>
diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp
index d6728d7946a69..1e6f484d42516 100644
--- a/llvm/tools/llc/llc.cpp
+++ b/llvm/tools/llc/llc.cpp
@@ -509,7 +509,7 @@ static int compileModule(char **argv, SmallVectorImpl<PassPlugin> &PluginList,
// Set attributes on functions as loaded from MIR from command line arguments.
auto setMIRFunctionAttributes = [&CPUStr, &TuneCPUStr,
&FeaturesStr](Function &F) {
- codegen::setFunctionAttributes(CPUStr, TuneCPUStr, FeaturesStr, F);
+ codegen::setFunctionAttributes(F, CPUStr, FeaturesStr, TuneCPUStr);
};
auto MAttrs = codegen::getMAttrs();
@@ -719,7 +719,7 @@ static int compileModule(char **argv, SmallVectorImpl<PassPlugin> &PluginList,
// Override function attributes based on CPUStr, TuneCPUStr, FeaturesStr, and
// command line flags.
- codegen::setFunctionAttributes(CPUStr, TuneCPUStr, FeaturesStr, *M);
+ codegen::setFunctionAttributes(*M, CPUStr, FeaturesStr, TuneCPUStr);
for (auto &Plugin : PluginList) {
CodeGenFileType CGFT = codegen::getFileType();
diff --git a/llvm/tools/llvm-opt-fuzzer/llvm-opt-fuzzer.cpp b/llvm/tools/llvm-opt-fuzzer/llvm-opt-fuzzer.cpp
index 3b38e3b6fd1a3..c77d82ecaeaa5 100644
--- a/llvm/tools/llvm-opt-fuzzer/llvm-opt-fuzzer.cpp
+++ b/llvm/tools/llvm-opt-fuzzer/llvm-opt-fuzzer.cpp
@@ -126,8 +126,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
M->setTargetTriple(TM->getTargetTriple());
M->setDataLayout(TM->createDataLayout());
- codegen::setFunctionAttributes(TM->getTargetCPU(),
- TM->getTargetFeatureString(), *M);
+ codegen::setFunctionAttributes(*M, TM->getTargetCPU(),
+ TM->getTargetFeatureString());
// Create pass pipeline
//
diff --git a/llvm/tools/opt/optdriver.cpp b/llvm/tools/opt/optdriver.cpp
index b5509cc4fe804..2d1613edc2c83 100644
--- a/llvm/tools/opt/optdriver.cpp
+++ b/llvm/tools/opt/optdriver.cpp
@@ -657,7 +657,7 @@ optMain(int argc, char **argv,
// Override function attributes based on CPUStr, FeaturesStr, and command line
// flags.
- codegen::setFunctionAttributes(CPUStr, FeaturesStr, *M);
+ codegen::setFunctionAttributes(*M, CPUStr, FeaturesStr);
// If the output is set to be emitted to standard out, and standard out is a
// console, print out a warning message and refuse to do it. We don't
>From ed87fb44de87e1b2e457cbe09b53c69b5fabbafe Mon Sep 17 00:00:00 2001
From: tomershafir <tomer.shafir8 at gmail.com>
Date: Tue, 17 Mar 2026 16:24:40 +0200
Subject: [PATCH 3/3] fix typos
---
llvm/lib/CodeGen/CommandFlags.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp
index 302b6d479194c..2f215c9f0327e 100644
--- a/llvm/lib/CodeGen/CommandFlags.cpp
+++ b/llvm/lib/CodeGen/CommandFlags.cpp
@@ -648,7 +648,7 @@ codegen::InitTargetOptionsFromCodeGenFlags(const Triple &TheTriple) {
std::string codegen::getCPUStr() {
std::string MCPU = getMCPU();
- // If user asked for the 'native' CPU, autodetect here. If autodection fails,
+ // If user asked for the 'native' CPU, autodetect here. If auto-detection fails,
// this will set the CPU to an empty string which tells the target to
// pick a basic default.
if (MCPU == "native")
@@ -660,7 +660,7 @@ std::string codegen::getCPUStr() {
std::string codegen::getTuneCPUStr() {
std::string TuneCPU = getMTune();
- // If user asked for the 'native' tune CPU, autodetect here. If autodection
+ // If user asked for the 'native' tune CPU, autodetect here. If auto-detection
// fails, this will set the tune CPU to an empty string which tells the target
// to pick a basic default.
if (TuneCPU == "native")
More information about the cfe-commits
mailing list