blob: a769859928b2b3c220227147e26c112ff663c7ce [file] [edit]
//===----------------------------------------------------------------------===//
//
// 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/LibraryOptions.td"
def SelectionDAGOptions : OptionsStruct;
// DAGCombiner.cpp
defm : OptionalBoolField<"combiner-global-alias-analysis",
"Enable DAG combiner's use of IR alias analysis">;
defm : BoolField<"combiner-use-tbaa", "true",
"Enable DAG combiner's use of TBAA">;
let Condition = AssertsOnly in {
defm : ValueField<"combiner-aa-only-func", "std::optional<StringRef>", "std::nullopt",
"Only use DAG-combiner alias analysis in this function">;
}
defm : BoolField<"combiner-stress-load-slicing", "false",
"Bypass the profitability model of load slicing">;
defm : BoolField<"combiner-split-load-index", "true",
"DAG combiner may split indexing from loads">;
defm : BoolField<"combiner-store-merging", "true",
"DAG combiner enable merging multiple stores into a wider store">;
defm : ValueField<"combiner-tokenfactor-inline-limit", "unsigned", "2048",
"Limit the number of operands to inline for Token Factors">;
defm : ValueField<"combiner-store-merge-dependence-limit", "unsigned", "10",
"Limit the number of times for the same StoreNode and RootNode "
"to bail out in store merging dependence check">;
defm : BoolField<"combiner-reduce-load-op-store-width", "true",
"DAG combiner enable reducing the width of load/op/store sequence">;
defm : BoolField<"combiner-reduce-load-op-store-width-force-narrowing-profitable", "false",
"DAG combiner force override the narrowing profitable check when "
"reducing the width of load/op/store sequences">;
defm : BoolField<"combiner-shrink-load-replace-store-with-store", "true",
"DAG combiner enable load/<replace bytes>/store with a narrower store">;
defm : OptionalBoolField<"combiner-topological-sorting",
"DAG combiner nodes consistently processed in topological order">;
defm : BoolField<"combiner-disabled", "false",
"Disable the DAG combiner">;
// LegalizeTypes.cpp
defm : BoolField<"enable-legalize-types-checking", "false",
"Do extensive, expensive, basic correctness checking in LegalizeTypes">;
// ResourcePriorityQueue.cpp
defm : BoolField<"disable-dfa-sched", "false",
"Disable use of DFA during scheduling">;
defm : ValueField<"dfa-sched-reg-pressure-threshold", "int", "5",
"Track reg pressure and switch priority to in-depth">;
// ScheduleDAG.cpp
defm : BoolField<"enable-memcpy-dag-opt", "true",
"Gang up loads and stores generated by inlining of memcpy">;
defm : ValueField<"ldstmemcpy-glue-max", "unsigned", "0",
"Number limit for gluing ld/st of memcpy.">;
defm : ValueField<"has-predecessor-max-steps", "unsigned", "8192",
"DAG combiner limit number of steps when searching DAG for predecessor nodes">;
defm : ValueField<"vscale-unroll-limit", "unsigned", "64",
"Maximum vscale for which vector unrolling is allowed.">;
// ScheduleDAGSDNodes.cpp
// This allows the latency-based scheduler to notice high latency instructions
// without a target itinerary. The choice of number here has more to do with
// balancing scheduler heuristics than with the actual machine latency.
defm : ValueField<"sched-high-latency-cycles", "unsigned", "10",
"Roughly estimate the number of cycles that 'long latency' "
"instructions take for targets with no itinerary">;
// StatepointLowering.cpp
defm : BoolField<"use-registers-for-deopt-values", "false",
"Allow using registers for non pointer deopt args">;
defm : BoolField<"use-registers-for-gc-values-in-landing-pad", "false",
"Allow using registers for gc pointer in landing pad">;
defm : ValueField<"max-registers-for-gc-values", "unsigned", "0",
"Max number of VRegs allowed to pass GC pointer meta args in">;