[llvm] [CGData] Declare command line options in TableGen, one struct per library (PR #226087)

Alexis Engelke via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 26 11:58:20 PDT 2026


================
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+include "llvm/Option/OptParser.td"
+
+def CGDataOptions : OptionsStruct;
+
+defm CodeGenDataGenerate : BoolField<"codegen-data-generate", "false",
+  "Emit CodeGen Data into custom sections">;
+defm CodeGenDataThinLTOTwoRounds : BoolField<"codegen-data-thinlto-two-rounds",
+  "false", "Enable two-round ThinLTO code generation. The first round emits "
+  "codegen data, while the second round uses the emitted codegen data for "
+  "further optimizations.">;
+defm CodeGenDataUsePath : ValueField<"codegen-data-use-path", "StringRef",
+  "", "File path to where .cgdata file is read">;
+defm GlobalMergingCallOverhead : ValueField<"global-merging-call-overhead",
+  "double", "1.0", "The overhead cost associated with each function call when "
+  "merging functions.">;
+defm GlobalMergingExtraThreshold : ValueField<"global-merging-extra-threshold",
+  "double", "0.0", "An additional cost threshold that must be exceeded for "
+  "merging to be considered beneficial.">;
+defm GlobalMergingInstOverhead : ValueField<"global-merging-inst-overhead",
+  "double", "1.2", "The overhead cost associated with each instruction when "
+  "lowering to machine instruction.">;
+defm GlobalMergingMaxParams : ValueField<"global-merging-max-params",
+  "unsigned", "std::numeric_limits<unsigned>::max()",
+  "The maximum number of parameters allowed when merging functions.">;
+defm GlobalMergingMinInstrs : ValueField<"global-merging-min-instrs",
+  "unsigned", "1",
+  "The minimum instruction count required when merging functions.">;
+defm GlobalMergingMinMerges : ValueField<"global-merging-min-merges",
+  "unsigned", "2", "Minimum number of similar functions with the same hash "
+  "required for merging.">;
+defm GlobalMergingParamOverhead : ValueField<"global-merging-param-overhead",
+  "double", "2.0", "The overhead cost associated with each parameter when "
+  "merging functions.">;
+defm GlobalMergingSkipNoParams : BoolField<"global-merging-skip-no-params",
+  "true", "Skip merging functions with no parameters.">;
+defm IndexedCodeGenDataLazyLoading : BoolField<
+  "indexed-codegen-data-lazy-loading", "false", "Lazily load indexed "
+  "CodeGenData. Enable to save memory and time for final consumption of the "
+  "indexed CodeGenData in production.">;
+defm IndexedCodeGenDataReadFunctionMapNames : BoolField<
+  "indexed-codegen-data-read-function-map-names", "true", "Read function map "
----------------
aengelke wrote:

Thanks! snake_case is also ok. I think the benefits outweigh the downsides here.

https://github.com/llvm/llvm-project/pull/226087


More information about the llvm-commits mailing list