| 1 | /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |
| 2 | |* *| |
| 3 | |* Option Parsing Definitions *| |
| 4 | |* *| |
| 5 | |* Automatically generated file, do not edit! *| |
| 6 | |* *| |
| 7 | \*===----------------------------------------------------------------------===*/ |
| 8 | |
| 9 | ///////// |
| 10 | // Tables |
| 11 | |
| 12 | #if defined(OPTTABLE_CODE) || defined(OPTIONS_STRUCT_DEFS) |
| 13 | namespace { |
| 14 | enum ID : unsigned { |
| 15 | OPT_INVALID = 0, |
| 16 | OPT_INPUT, |
| 17 | OPT_UNKNOWN, |
| 18 | OPT_disable_binop_extract_shuffle, |
| 19 | OPT_disable_loop_idiom_vectorize_all, |
| 20 | OPT_disable_loop_idiom_vectorize_bytecmp, |
| 21 | OPT_disable_loop_idiom_vectorize_find_first_byte, |
| 22 | OPT_disable_vector_combine, |
| 23 | OPT_enable_early_exit_vectorization_with_side_effects, |
| 24 | OPT_enable_early_exit_vectorization, |
| 25 | OPT_enable_epilogue_vectorization, |
| 26 | OPT_enable_histogram_loop_vectorization, |
| 27 | OPT_enable_if_conversion, |
| 28 | OPT_enable_ind_var_reg_heur, |
| 29 | OPT_enable_interleaved_mem_accesses, |
| 30 | OPT_enable_loadstore_runtime_interleave, |
| 31 | OPT_enable_masked_interleaved_mem_accesses, |
| 32 | OPT_enable_vplan_native_path, |
| 33 | OPT_epilogue_tail_folding_policy, |
| 34 | OPT_epilogue_vectorization_minimum_VF, |
| 35 | OPT_force_ordered_reductions, |
| 36 | OPT_force_partial_aliasing_vectorization, |
| 37 | OPT_force_tail_folding_style, |
| 38 | OPT_force_target_instruction_cost, |
| 39 | OPT_force_target_max_scalar_interleave, |
| 40 | OPT_force_target_max_vector_interleave, |
| 41 | OPT_force_target_num_scalar_regs, |
| 42 | OPT_force_target_num_vector_regs, |
| 43 | OPT_force_target_supports_gather_scatter_ops, |
| 44 | OPT_force_target_supports_masked_memory_ops, |
| 45 | OPT_force_target_supports_scalable_vectors, |
| 46 | OPT_force_widen_divrem_via_masked_intrinsic, |
| 47 | OPT_hints_allow_reordering, |
| 48 | OPT_interleave_loops, |
| 49 | OPT_loop_idiom_vectorize_bytecmp_vf, |
| 50 | OPT_loop_idiom_vectorize_style, |
| 51 | OPT_loop_idiom_vectorize_verify, |
| 52 | OPT_loop_vectorize_with_block_frequency, |
| 53 | OPT_low_trip_count_loop_body_size_limit, |
| 54 | OPT_lv_strided_pointer_ivs, |
| 55 | OPT_max_nested_scalar_reduction_interleave, |
| 56 | OPT_pragma_vectorize_scev_check_threshold, |
| 57 | OPT_prefer_inloop_reductions, |
| 58 | OPT_prefer_predicated_reduction_select, |
| 59 | OPT_sbvec_allow_files, |
| 60 | OPT_sbvec_allow_non_pow2, |
| 61 | #if !defined(NDEBUG) |
| 62 | OPT_sbvec_always_verify, |
| 63 | #endif |
| 64 | OPT_sbvec_collect_seeds, |
| 65 | OPT_sbvec_cost_threshold, |
| 66 | OPT_sbvec_max_users_to_consider, |
| 67 | OPT_sbvec_passes, |
| 68 | OPT_sbvec_print_pass_pipeline, |
| 69 | OPT_sbvec_seed_bundle_size_limit, |
| 70 | OPT_sbvec_seed_groups_limit, |
| 71 | OPT_sbvec_stop_at, |
| 72 | OPT_sbvec_stop_bndl, |
| 73 | OPT_sbvec_vec_reg_bits, |
| 74 | OPT_scalable_epilogue_vf_cost_scale_factor, |
| 75 | OPT_scalable_vectorization, |
| 76 | OPT_slp_copyable_elements, |
| 77 | OPT_slp_cost_loop_trip_count, |
| 78 | OPT_slp_disable_tree_reorder, |
| 79 | OPT_slp_enable_masked_stores, |
| 80 | OPT_slp_enable_strided_stores, |
| 81 | OPT_slp_force_strided_loads, |
| 82 | OPT_slp_inst_count_check, |
| 83 | OPT_slp_max_look_ahead_depth, |
| 84 | OPT_slp_max_reg_size, |
| 85 | OPT_slp_max_root_look_ahead_depth, |
| 86 | OPT_slp_max_runtime_alias_checks, |
| 87 | OPT_slp_max_stride, |
| 88 | OPT_slp_max_vf, |
| 89 | OPT_slp_min_reg_size, |
| 90 | OPT_slp_min_strided_loads, |
| 91 | OPT_slp_min_strided_stores, |
| 92 | OPT_slp_min_tree_size, |
| 93 | OPT_slp_non_vectorizables_as_reductions, |
| 94 | OPT_slp_per_lane_gather_scale, |
| 95 | OPT_slp_phi_list_budget, |
| 96 | OPT_slp_phi_vectorization_budget, |
| 97 | OPT_slp_postprocess_stores_operands, |
| 98 | OPT_slp_reassociate_ops, |
| 99 | OPT_slp_reassociate_reorder_limit, |
| 100 | OPT_slp_recursion_max_depth, |
| 101 | OPT_slp_reduction_budget, |
| 102 | OPT_slp_revec, |
| 103 | OPT_slp_runtime_alias_checks_max_scalar_cost_percent, |
| 104 | OPT_slp_schedule_budget, |
| 105 | OPT_slp_split_alternate_instructions, |
| 106 | OPT_slp_threshold, |
| 107 | OPT_slp_vec_loop_rt_checks_cost_percent, |
| 108 | OPT_slp_vectorize_hor_store, |
| 109 | OPT_slp_vectorize_hor, |
| 110 | OPT_slp_vectorize_loop_acc_rdx, |
| 111 | OPT_slp_vectorize_non_power_of_2, |
| 112 | OPT_slp_vectorize_once_used, |
| 113 | OPT_slp_vectorize_poor_throughput, |
| 114 | OPT_slp_vectorize_with_runtime_alias_checks, |
| 115 | OPT_small_loop_cost, |
| 116 | OPT_tail_folding_policy, |
| 117 | OPT_use_partial_reductions_by_default, |
| 118 | OPT_vector_combine_max_scan_instrs, |
| 119 | OPT_vectorize_loops, |
| 120 | OPT_vectorize_num_stores_pred, |
| 121 | OPT_vectorize_scev_check_threshold, |
| 122 | OPT_vectorize_slp, |
| 123 | OPT_vectorizer_consider_reg_pressure, |
| 124 | OPT_vectorizer_maximize_bandwidth_for_vector_calls, |
| 125 | OPT_vectorizer_maximize_bandwidth, |
| 126 | OPT_vectorizer_min_trip_count, |
| 127 | OPT_view_slp_tree, |
| 128 | OPT_vplan_build_outerloop_stress_test, |
| 129 | #if !defined(NDEBUG) |
| 130 | OPT_vplan_print_after_all, |
| 131 | #endif |
| 132 | #if !defined(NDEBUG) |
| 133 | OPT_vplan_print_after, |
| 134 | #endif |
| 135 | #if !defined(NDEBUG) |
| 136 | OPT_vplan_print_before_all, |
| 137 | #endif |
| 138 | #if !defined(NDEBUG) |
| 139 | OPT_vplan_print_before, |
| 140 | #endif |
| 141 | OPT_vplan_print_in_dot_format, |
| 142 | #if !defined(NDEBUG) |
| 143 | OPT_vplan_print_vector_region_scope, |
| 144 | #endif |
| 145 | OPT_vplan_verify_each, |
| 146 | }; |
| 147 | } // namespace |
| 148 | |
| 149 | static llvm::opt::OptTable::Tables optionTables() { |
| 150 | using llvm::opt::DefaultVis, llvm::opt::HelpHidden, |
| 151 | llvm::opt::RenderAsInput, llvm::opt::RenderJoined, |
| 152 | llvm::opt::RenderSeparate; |
| 153 | |
| 154 | #ifdef __GNUC__ |
| 155 | #pragma GCC diagnostic push |
| 156 | #pragma GCC diagnostic ignored "-Woverlength-strings" |
| 157 | #endif |
| 158 | static constexpr char OptionStrTableStorage[] = |
| 159 | "\0" |
| 160 | "-\0" |
| 161 | "--\0" |
| 162 | "<input>\0" |
| 163 | "<unknown>\0" |
| 164 | "-disable-binop-extract-shuffle\0" |
| 165 | "Disable binop extract to shuffle transforms\0" |
| 166 | "-disable-loop-idiom-vectorize-all\0" |
| 167 | "Disable Loop Idiom Vectorize Pass\0" |
| 168 | "-disable-loop-idiom-vectorize-bytecmp\0" |
| 169 | "Proceed with Loop Idiom Vectorize Pass, but do not convert byte-compare loop(s)\0" |
| 170 | "-disable-loop-idiom-vectorize-find-first-byte\0" |
| 171 | "Do not convert find-first-byte loop(s)\0" |
| 172 | "-disable-vector-combine\0" |
| 173 | "Disable all vector combine transforms\0" |
| 174 | "-enable-early-exit-vectorization-with-side-effects\0" |
| 175 | "Enable vectorization of early exit loops with uncountable exits and side effects\0" |
| 176 | "-enable-early-exit-vectorization\0" |
| 177 | "Enable vectorization of early exit loops with uncountable exits\0" |
| 178 | "-enable-epilogue-vectorization\0" |
| 179 | "Enable vectorization of epilogue loops\0" |
| 180 | "-enable-histogram-loop-vectorization\0" |
| 181 | "Enables autovectorization of some loops containing histograms\0" |
| 182 | "-enable-if-conversion\0" |
| 183 | "Enable if-conversion during vectorization\0" |
| 184 | "-enable-ind-var-reg-heur\0" |
| 185 | "Count the induction variable only once when interleaving\0" |
| 186 | "-enable-interleaved-mem-accesses\0" |
| 187 | "Enable vectorization on interleaved memory accesses in a loop\0" |
| 188 | "-enable-loadstore-runtime-interleave\0" |
| 189 | "Enable runtime interleaving until load/store ports are saturated\0" |
| 190 | "-enable-masked-interleaved-mem-accesses\0" |
| 191 | "Enable vectorization on masked interleaved memory accesses in a loop\0" |
| 192 | "-enable-vplan-native-path\0" |
| 193 | "Enable VPlan-native vectorization path with support for outer loop vectorization\0" |
| 194 | "-epilogue-tail-folding-policy\0" |
| 195 | "Epilogue-tail-folding preferences over creating an epilogue loop\0" |
| 196 | "<dont-fold-tail|prefer-fold-tail>\0" |
| 197 | "dont-fold-tail,prefer-fold-tail\0" |
| 198 | "-epilogue-vectorization-minimum-VF\0" |
| 199 | "Only loops with vectorization factor equal to or larger than the specified value are considered for epilogue vectorization\0" |
| 200 | "-force-ordered-reductions\0" |
| 201 | "Enable the vectorisation of loops with in-order (strict) FP reductions\0" |
| 202 | "-force-partial-aliasing-vectorization\0" |
| 203 | "Replace pointer diff checks with alias masks\0" |
| 204 | "-force-tail-folding-style\0" |
| 205 | "Force the tail folding style\0" |
| 206 | "<none|data|data-without-lane-mask|data-and-control|data-with-evl>\0" |
| 207 | "none,data,data-without-lane-mask,data-and-control,data-with-evl\0" |
| 208 | "-force-target-instruction-cost\0" |
| 209 | "A flag that overrides the target's expected cost for an instruction to a single constant value. Mostly useful for getting consistent testing\0" |
| 210 | "-force-target-max-scalar-interleave\0" |
| 211 | "A flag that overrides the target's max interleave factor for scalar loops\0" |
| 212 | "-force-target-max-vector-interleave\0" |
| 213 | "A flag that overrides the target's max interleave factor for vectorized loops\0" |
| 214 | "-force-target-num-scalar-regs\0" |
| 215 | "A flag that overrides the target's number of scalar registers\0" |
| 216 | "-force-target-num-vector-regs\0" |
| 217 | "A flag that overrides the target's number of vector registers\0" |
| 218 | "-force-target-supports-gather-scatter-ops\0" |
| 219 | "Assume the target supports gather/scatter operations (used for testing)\0" |
| 220 | "-force-target-supports-masked-memory-ops\0" |
| 221 | "Assume the target supports masked memory operations (used for testing)\0" |
| 222 | "-force-target-supports-scalable-vectors\0" |
| 223 | "Pretend that scalable vectors are supported, even if the target does not support them. This flag should only be used for testing\0" |
| 224 | "-force-widen-divrem-via-masked-intrinsic\0" |
| 225 | "Override cost based masked intrinsic widening for div/rem instructions\0" |
| 226 | "-hints-allow-reordering\0" |
| 227 | "Allow enabling loop hints to reorder FP operations during vectorization\0" |
| 228 | "-interleave-loops\0" |
| 229 | "Enable loop interleaving in Loop vectorization passes\0" |
| 230 | "-loop-idiom-vectorize-bytecmp-vf\0" |
| 231 | "The vectorization factor for byte-compare patterns\0" |
| 232 | "-loop-idiom-vectorize-style\0" |
| 233 | "The vectorization style for loop idiom transform\0" |
| 234 | "<masked|predicated>\0" |
| 235 | "masked,predicated\0" |
| 236 | "-loop-idiom-vectorize-verify\0" |
| 237 | "Verify loops generated Loop Idiom Vectorize Pass\0" |
| 238 | "-loop-vectorize-with-block-frequency\0" |
| 239 | "Enable the use of the block frequency analysis to access PGO heuristics minimizing code growth in cold regions and being more aggressive in hot regions\0" |
| 240 | "-low-trip-count-loop-body-size-limit\0" |
| 241 | "Minimum number of instructions to vectorize loops with trip counts below tail folding threshold\0" |
| 242 | "-lv-strided-pointer-ivs\0" |
| 243 | "Enable recognition of non-constant strided pointer induction variables\0" |
| 244 | "-max-nested-scalar-reduction-interleave\0" |
| 245 | "The maximum interleave count to use when interleaving a scalar reduction in a nested loop\0" |
| 246 | "-pragma-vectorize-scev-check-threshold\0" |
| 247 | "The maximum number of SCEV checks allowed with a vectorize(enable) pragma\0" |
| 248 | "-prefer-inloop-reductions\0" |
| 249 | "Prefer in-loop vector reductions, overriding the targets preference\0" |
| 250 | "-prefer-predicated-reduction-select\0" |
| 251 | "Prefer predicating a reduction operation over an after loop select\0" |
| 252 | "-sbvec-allow-files\0" |
| 253 | "Run the vectorizer only on file paths that match any in the list of comma-separated regex's\0" |
| 254 | "-sbvec-allow-non-pow2\0" |
| 255 | "Allow non-power-of-2 vectorization\0" |
| 256 | "-sbvec-always-verify\0" |
| 257 | "Helps find bugs by verifying the IR whenever we emit new instructions (*very* expensive)\0" |
| 258 | "-sbvec-collect-seeds\0" |
| 259 | "Collect these seeds. Use empty for none or a comma-separated list of 'stores' and 'loads'\0" |
| 260 | "-sbvec-cost-threshold\0" |
| 261 | "Vectorization cost threshold\0" |
| 262 | "-sbvec-max-users-to-consider\0" |
| 263 | "Limit the number of a seed's users that getNextUserBundles() will examine as candidates for a matching bundle, to cap compilation time\0" |
| 264 | "-sbvec-passes\0" |
| 265 | "Comma-separated list of vectorizer passes. If not set we run the predefined pipeline\0" |
| 266 | "-sbvec-print-pass-pipeline\0" |
| 267 | "Prints the pass pipeline and returns\0" |
| 268 | "-sbvec-seed-bundle-size-limit\0" |
| 269 | "Limit the size of the seed bundle to cap compilation time\0" |
| 270 | "-sbvec-seed-groups-limit\0" |
| 271 | "Limit the number of collected seeds groups in a BB to cap compilation time\0" |
| 272 | "-sbvec-stop-at\0" |
| 273 | "Vectorize if the invocation count is < than this. 0 disables vectorization\0" |
| 274 | "-sbvec-stop-bndl\0" |
| 275 | "Vectorize up to this many bundles\0" |
| 276 | "-sbvec-vec-reg-bits\0" |
| 277 | "Override the vector register size in bits, which is otherwise found by querying TTI\0" |
| 278 | "-scalable-epilogue-vf-cost-scale-factor\0" |
| 279 | "Scale the cost of scalable epilogue VFs by this factor\0" |
| 280 | "-scalable-vectorization\0" |
| 281 | "Control whether the compiler can use scalable vectors to vectorize a loop\0" |
| 282 | "<off|preferred|on|always>\0" |
| 283 | "off,preferred,on,always\0" |
| 284 | "-slp-copyable-elements\0" |
| 285 | "Try to replace values with the idempotent instructions for better vectorization\0" |
| 286 | "-slp-cost-loop-trip-count\0" |
| 287 | "Loop trip count, considered by the cost model during modeling (0=loops are ignored and considered flat code)\0" |
| 288 | "-slp-disable-tree-reorder\0" |
| 289 | "Disable tree reordering even if it is profitable. Used for testing only\0" |
| 290 | "-slp-enable-masked-stores\0" |
| 291 | "Enable vectorization of non-consecutive stores as a single masked store, when the target supports masked stores\0" |
| 292 | "-slp-enable-strided-stores\0" |
| 293 | "Enable SLP trees to be built from strided store chains\0" |
| 294 | "-slp-force-strided-loads\0" |
| 295 | "Generate strided loads even if they are not profitable. Used for testing only\0" |
| 296 | "-slp-inst-count-check\0" |
| 297 | "Reject vectorization if vector instruction count exceeds scalar instruction count\0" |
| 298 | "-slp-max-look-ahead-depth\0" |
| 299 | "The maximum look-ahead depth for operand reordering scores\0" |
| 300 | "-slp-max-reg-size\0" |
| 301 | "Attempt to vectorize for this register size in bits\0" |
| 302 | "-slp-max-root-look-ahead-depth\0" |
| 303 | "The maximum look-ahead depth for searching best rooting option\0" |
| 304 | "-slp-max-runtime-alias-checks\0" |
| 305 | "The maximum number of runtime alias checks generated to guard a single SLP-vectorized region\0" |
| 306 | "-slp-max-stride\0" |
| 307 | "The maximum stride, considered to be profitable\0" |
| 308 | "-slp-max-vf\0" |
| 309 | "Maximum SLP vectorization factor (0=unlimited)\0" |
| 310 | "-slp-min-reg-size\0" |
| 311 | "-slp-min-strided-loads\0" |
| 312 | "The minimum number of loads, which should be considered strided, if the stride is > 1 or is runtime value\0" |
| 313 | "-slp-min-strided-stores\0" |
| 314 | "The minimum number of stores, which should be considered strided, if the stride is > 1 or is runtime value\0" |
| 315 | "-slp-min-tree-size\0" |
| 316 | "Only vectorize small trees if they are fully vectorizable\0" |
| 317 | "-slp-non-vectorizables-as-reductions\0" |
| 318 | "Use non-vectorizable instructions as potential reduction roots\0" |
| 319 | "-slp-per-lane-gather-scale\0" |
| 320 | "Use per-lane execution scale for gather/buildvector tree entries to model LICM-hoistable buildvector sequences\0" |
| 321 | "-slp-phi-list-budget\0" |
| 322 | "Maximum size of the phi list to be vectorized\0" |
| 323 | "-slp-phi-vectorization-budget\0" |
| 324 | "Do not vectorize a bundle of PHI nodes if the product of the bundle size and the number of incoming values exceeds this value, to limit the compile time spent on wide PHIs\0" |
| 325 | "-slp-postprocess-stores-operands\0" |
| 326 | "Force vectorization of non-vectorizable stores operands\0" |
| 327 | "-slp-reassociate-ops\0" |
| 328 | "Gather operands of associative binary chains into one node\0" |
| 329 | "-slp-reassociate-reorder-limit\0" |
| 330 | "Max flattened operand columns for which associative-chain reordering runs the full operand reorder\0" |
| 331 | "-slp-recursion-max-depth\0" |
| 332 | "Limit the recursion depth when building a vectorizable tree\0" |
| 333 | "-slp-reduction-budget\0" |
| 334 | "Limit the number of scalars in the rejected trees of the same reduction\0" |
| 335 | "-slp-revec\0" |
| 336 | "Enable vectorization for wider vector utilization\0" |
| 337 | "-slp-runtime-alias-checks-max-scalar-cost-percent\0" |
| 338 | "Maximum SLP runtime alias check cost, as a percentage of the guarded scalar region cost, before versioning is rejected to avoid pessimizing the scalar fallback path\0" |
| 339 | "-slp-schedule-budget\0" |
| 340 | "Limit the size of the SLP scheduling region per block\0" |
| 341 | "-slp-split-alternate-instructions\0" |
| 342 | "Improve the code quality by splitting alternate instructions\0" |
| 343 | "-slp-threshold\0" |
| 344 | "Only vectorize if you gain more than this number\0" |
| 345 | "-slp-vec-loop-rt-checks-cost-percent\0" |
| 346 | "Maximum SLP runtime alias check cost, as a percentage of the guarded scalar region cost, for blocks of loops already vectorized by the loop vectorizer\0" |
| 347 | "-slp-vectorize-hor-store\0" |
| 348 | "Attempt to vectorize horizontal reductions feeding into a store\0" |
| 349 | "-slp-vectorize-hor\0" |
| 350 | "Attempt to vectorize horizontal reductions\0" |
| 351 | "-slp-vectorize-loop-acc-rdx\0" |
| 352 | "Emit loop-carried horizontal reductions as a vector accumulator in the loop plus a single reduction after it\0" |
| 353 | "-slp-vectorize-non-power-of-2\0" |
| 354 | "Try to vectorize with non-power-of-2 number of elements\0" |
| 355 | "-slp-vectorize-once-used\0" |
| 356 | "Use instructions with the single user as standalone vectorization seeds\0" |
| 357 | "-slp-vectorize-poor-throughput\0" |
| 358 | "Use poor-throughput instructions (e.g. fdiv, frem, fsqrt) as standalone vectorization seeds\0" |
| 359 | "-slp-vectorize-with-runtime-alias-checks\0" |
| 360 | "Allow SLP to version a block with runtime alias checks to vectorize trees blocked by may-alias memory dependencies\0" |
| 361 | "-small-loop-cost\0" |
| 362 | "The cost of a loop that is considered 'small' by the interleaver\0" |
| 363 | "-tail-folding-policy\0" |
| 364 | "Tail-folding preferences over creating an epilogue loop\0" |
| 365 | "<dont-fold-tail|prefer-fold-tail|must-fold-tail>\0" |
| 366 | "dont-fold-tail,prefer-fold-tail,must-fold-tail\0" |
| 367 | "-use-partial-reductions-by-default\0" |
| 368 | "Use partial reduction intrinsics for all supported unordered reductions\0" |
| 369 | "-vector-combine-max-scan-instrs\0" |
| 370 | "Max number of instructions to scan for vector combining\0" |
| 371 | "-vectorize-loops\0" |
| 372 | "Run the Loop vectorization passes\0" |
| 373 | "-vectorize-num-stores-pred\0" |
| 374 | "Max number of stores to be predicated behind an if\0" |
| 375 | "-vectorize-scev-check-threshold\0" |
| 376 | "The maximum number of SCEV checks allowed\0" |
| 377 | "-vectorize-slp\0" |
| 378 | "Run the SLP vectorization passes\0" |
| 379 | "-vectorizer-consider-reg-pressure\0" |
| 380 | "Discard VFs if their register pressure is too high\0" |
| 381 | "-vectorizer-maximize-bandwidth-for-vector-calls\0" |
| 382 | "Try wider VFs if they enable the use of vector variants\0" |
| 383 | "-vectorizer-maximize-bandwidth\0" |
| 384 | "Maximize bandwidth when selecting vectorization factor which will be determined by the smallest type in loop\0" |
| 385 | "-vectorizer-min-trip-count\0" |
| 386 | "Loops with a constant trip count that is smaller than this value are vectorized only if no scalar iteration overheads are incurred\0" |
| 387 | "-view-slp-tree\0" |
| 388 | "Display the SLP trees with Graphviz\0" |
| 389 | "-vplan-build-outerloop-stress-test\0" |
| 390 | "Build VPlan for every supported loop nest in the function and bail out right after the build (stress test the VPlan H-CFG construction in the VPlan-native vectorization path)\0" |
| 391 | "-vplan-print-after-all\0" |
| 392 | "Print VPlans after all VPlan transformations\0" |
| 393 | "-vplan-print-after\0" |
| 394 | "Print VPlans after specified VPlan transformations (regexp)\0" |
| 395 | "-vplan-print-before-all\0" |
| 396 | "Print VPlans before all VPlan transformations\0" |
| 397 | "-vplan-print-before\0" |
| 398 | "Print VPlans before specified VPlan transformations (regexp)\0" |
| 399 | "-vplan-print-in-dot-format\0" |
| 400 | "Use dot format instead of plain text when dumping VPlans\0" |
| 401 | "-vplan-print-vector-region-scope\0" |
| 402 | "Limit VPlan printing to vector loop region in `-vplan-print-after*` if the plan has one\0" |
| 403 | "-vplan-verify-each\0" |
| 404 | "Verify VPlans after VPlan transforms\0" |
| 405 | ; |
| 406 | #ifdef __GNUC__ |
| 407 | #pragma GCC diagnostic pop |
| 408 | #endif |
| 409 | |
| 410 | static constexpr llvm::StringTable |
| 411 | OptionStrTable = OptionStrTableStorage; |
| 412 | |
| 413 | static constexpr llvm::StringTable::Offset OptionPrefixesTable[] = { |
| 414 | 0 /* prefixes */, |
| 415 | 2 /* prefixes */, 1 /* '-' */, 3 /* '--' */ |
| 416 | }; |
| 417 | |
| 418 | static constexpr llvm::opt::OptTable::HelpTextVariant OptionHelpTextVariantsTable[] = { |
| 419 | {0, 0}, |
| 420 | }; |
| 421 | |
| 422 | static constexpr unsigned OptionSubCommandIDsTable[] = { |
| 423 | 0 /* subcommands */ |
| 424 | }; |
| 425 | |
| 426 | static constexpr llvm::opt::OptTable::InfoExtra OptionInfoExtrasTable[] = { |
| 427 | {0, 0, 0, 0, 0, 0, 0, 0}, |
| 428 | {0, 0, 0, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0}, |
| 429 | {1484, 0, 1518, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0}, |
| 430 | {1943, 0, 2009, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0}, |
| 431 | {3489, 0, 3509, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0}, |
| 432 | {5855, 0, 5881, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0}, |
| 433 | {10111, 0, 10160, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0}, |
| 434 | }; |
| 435 | |
| 436 | static constexpr llvm::opt::OptTable::Info OptionInfoTable[] = { |
| 437 | {6 /* <input> */, 0, 0, 0, 1, 0, llvm::opt::Option::InputClass}, |
| 438 | {14 /* <unknown> */, 0, 0, 0, 1, 0, llvm::opt::Option::UnknownClass}, |
| 439 | {24 /* -disable-binop-extract-shuffle */, 55, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 440 | {99 /* -disable-loop-idiom-vectorize-all */, 133, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 441 | {167 /* -disable-loop-idiom-vectorize-bytecmp */, 205, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 442 | {285 /* -disable-loop-idiom-vectorize-find-first-byte */, 331, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 443 | {370 /* -disable-vector-combine */, 394, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 444 | {432 /* -enable-early-exit-vectorization-with-side-effects */, 483, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 445 | {564 /* -enable-early-exit-vectorization */, 597, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 446 | {661 /* -enable-epilogue-vectorization */, 692, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 447 | {731 /* -enable-histogram-loop-vectorization */, 768, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 448 | {830 /* -enable-if-conversion */, 852, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 449 | {894 /* -enable-ind-var-reg-heur */, 919, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 450 | {976 /* -enable-interleaved-mem-accesses */, 1009, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 451 | {1071 /* -enable-loadstore-runtime-interleave */, 1108, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 452 | {1173 /* -enable-masked-interleaved-mem-accesses */, 1213, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 453 | {1282 /* -enable-vplan-native-path */, 1308, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 454 | {1389 /* -epilogue-tail-folding-policy */, 1419, 0, 0, 2, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 455 | {1550 /* -epilogue-vectorization-minimum-VF */, 1585, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 456 | {1708 /* -force-ordered-reductions */, 1734, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 457 | {1805 /* -force-partial-aliasing-vectorization */, 1843, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 458 | {1888 /* -force-tail-folding-style */, 1914, 0, 0, 3, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 459 | {2073 /* -force-target-instruction-cost */, 2104, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 460 | {2245 /* -force-target-max-scalar-interleave */, 2281, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 461 | {2355 /* -force-target-max-vector-interleave */, 2391, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 462 | {2469 /* -force-target-num-scalar-regs */, 2499, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 463 | {2561 /* -force-target-num-vector-regs */, 2591, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 464 | {2653 /* -force-target-supports-gather-scatter-ops */, 2695, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 465 | {2767 /* -force-target-supports-masked-memory-ops */, 2808, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 466 | {2879 /* -force-target-supports-scalable-vectors */, 2919, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 467 | {3048 /* -force-widen-divrem-via-masked-intrinsic */, 3089, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 468 | {3160 /* -hints-allow-reordering */, 3184, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 469 | {3256 /* -interleave-loops */, 3274, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 470 | {3328 /* -loop-idiom-vectorize-bytecmp-vf */, 3361, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 471 | {3412 /* -loop-idiom-vectorize-style */, 3440, 0, 0, 4, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 472 | {3527 /* -loop-idiom-vectorize-verify */, 3556, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 473 | {3605 /* -loop-vectorize-with-block-frequency */, 3642, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 474 | {3794 /* -low-trip-count-loop-body-size-limit */, 3831, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 475 | {3927 /* -lv-strided-pointer-ivs */, 3951, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 476 | {4022 /* -max-nested-scalar-reduction-interleave */, 4062, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 477 | {4152 /* -pragma-vectorize-scev-check-threshold */, 4191, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 478 | {4265 /* -prefer-inloop-reductions */, 4291, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 479 | {4359 /* -prefer-predicated-reduction-select */, 4395, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 480 | {4462 /* -sbvec-allow-files */, 4481, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 481 | {4573 /* -sbvec-allow-non-pow2 */, 4595, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 482 | #if !defined(NDEBUG) |
| 483 | {4630 /* -sbvec-always-verify */, 4651, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 484 | #endif |
| 485 | {4740 /* -sbvec-collect-seeds */, 4761, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 486 | {4851 /* -sbvec-cost-threshold */, 4873, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 487 | {4902 /* -sbvec-max-users-to-consider */, 4931, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 488 | {5066 /* -sbvec-passes */, 5080, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 489 | {5165 /* -sbvec-print-pass-pipeline */, 5192, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 490 | {5229 /* -sbvec-seed-bundle-size-limit */, 5259, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 491 | {5317 /* -sbvec-seed-groups-limit */, 5342, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 492 | {5417 /* -sbvec-stop-at */, 5432, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 493 | {5507 /* -sbvec-stop-bndl */, 5524, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 494 | {5558 /* -sbvec-vec-reg-bits */, 5578, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 495 | {5662 /* -scalable-epilogue-vf-cost-scale-factor */, 5702, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 496 | {5757 /* -scalable-vectorization */, 5781, 0, 0, 5, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 497 | {5905 /* -slp-copyable-elements */, 5928, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 498 | {6008 /* -slp-cost-loop-trip-count */, 6034, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 499 | {6143 /* -slp-disable-tree-reorder */, 6169, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 500 | {6241 /* -slp-enable-masked-stores */, 6267, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 501 | {6379 /* -slp-enable-strided-stores */, 6406, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 502 | {6461 /* -slp-force-strided-loads */, 6486, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 503 | {6564 /* -slp-inst-count-check */, 6586, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 504 | {6668 /* -slp-max-look-ahead-depth */, 6694, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 505 | {6753 /* -slp-max-reg-size */, 6771, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 506 | {6823 /* -slp-max-root-look-ahead-depth */, 6854, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 507 | {6917 /* -slp-max-runtime-alias-checks */, 6947, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 508 | {7040 /* -slp-max-stride */, 7056, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 509 | {7104 /* -slp-max-vf */, 7116, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 510 | {7163 /* -slp-min-reg-size */, 6771, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 511 | {7181 /* -slp-min-strided-loads */, 7204, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 512 | {7310 /* -slp-min-strided-stores */, 7334, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 513 | {7441 /* -slp-min-tree-size */, 7460, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 514 | {7518 /* -slp-non-vectorizables-as-reductions */, 7555, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 515 | {7619 /* -slp-per-lane-gather-scale */, 7646, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 516 | {7757 /* -slp-phi-list-budget */, 7778, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 517 | {7824 /* -slp-phi-vectorization-budget */, 7854, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 518 | {8026 /* -slp-postprocess-stores-operands */, 8059, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 519 | {8115 /* -slp-reassociate-ops */, 8136, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 520 | {8195 /* -slp-reassociate-reorder-limit */, 8226, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 521 | {8325 /* -slp-recursion-max-depth */, 8350, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 522 | {8410 /* -slp-reduction-budget */, 8432, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 523 | {8504 /* -slp-revec */, 8515, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 524 | {8565 /* -slp-runtime-alias-checks-max-scalar-cost-percent */, 8615, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 525 | {8780 /* -slp-schedule-budget */, 8801, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 526 | {8855 /* -slp-split-alternate-instructions */, 8889, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 527 | {8950 /* -slp-threshold */, 8965, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 528 | {9014 /* -slp-vec-loop-rt-checks-cost-percent */, 9051, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 529 | {9202 /* -slp-vectorize-hor-store */, 9227, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 530 | {9291 /* -slp-vectorize-hor */, 9310, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 531 | {9353 /* -slp-vectorize-loop-acc-rdx */, 9381, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 532 | {9490 /* -slp-vectorize-non-power-of-2 */, 9520, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 533 | {9576 /* -slp-vectorize-once-used */, 9601, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 534 | {9673 /* -slp-vectorize-poor-throughput */, 9704, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 535 | {9796 /* -slp-vectorize-with-runtime-alias-checks */, 9837, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 536 | {9952 /* -small-loop-cost */, 9969, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 537 | {10034 /* -tail-folding-policy */, 10055, 0, 0, 6, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 538 | {10207 /* -use-partial-reductions-by-default */, 10242, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 539 | {10314 /* -vector-combine-max-scan-instrs */, 10346, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 540 | {10402 /* -vectorize-loops */, 10419, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 541 | {10453 /* -vectorize-num-stores-pred */, 10480, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 542 | {10531 /* -vectorize-scev-check-threshold */, 10563, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 543 | {10605 /* -vectorize-slp */, 10620, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 544 | {10653 /* -vectorizer-consider-reg-pressure */, 10687, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 545 | {10738 /* -vectorizer-maximize-bandwidth-for-vector-calls */, 10786, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 546 | {10842 /* -vectorizer-maximize-bandwidth */, 10873, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 547 | {10982 /* -vectorizer-min-trip-count */, 11009, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 548 | {11140 /* -view-slp-tree */, 11155, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 549 | {11191 /* -vplan-build-outerloop-stress-test */, 11226, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 550 | #if !defined(NDEBUG) |
| 551 | {11401 /* -vplan-print-after-all */, 11424, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 552 | #endif |
| 553 | #if !defined(NDEBUG) |
| 554 | {11469 /* -vplan-print-after */, 11488, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 555 | #endif |
| 556 | #if !defined(NDEBUG) |
| 557 | {11548 /* -vplan-print-before-all */, 11572, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 558 | #endif |
| 559 | #if !defined(NDEBUG) |
| 560 | {11618 /* -vplan-print-before */, 11638, 0, 0, 1, 1, llvm::opt::Option::SeparateOrEqClass}, |
| 561 | #endif |
| 562 | {11699 /* -vplan-print-in-dot-format */, 11726, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 563 | #if !defined(NDEBUG) |
| 564 | {11783 /* -vplan-print-vector-region-scope */, 11816, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 565 | #endif |
| 566 | {11904 /* -vplan-verify-each */, 11923, 0, 0, 1, 1, llvm::opt::Option::FlagOrEqClass}, |
| 567 | }; |
| 568 | |
| 569 | return {OptionStrTable, OptionPrefixesTable, |
| 570 | OptionInfoTable, OptionInfoExtrasTable, OptionHelpTextVariantsTable, {}, OptionSubCommandIDsTable}; |
| 571 | } |
| 572 | #undef OPTTABLE_CODE |
| 573 | #endif // OPTTABLE_CODE || OPTIONS_STRUCT_DEFS |
| 574 | |
| 575 | |
| 576 | #ifdef OPTIONS_STRUCT_DECL |
| 577 | #undef OPTIONS_STRUCT_DECL |
| 578 | #include "llvm/ADT/ArrayRef.h" |
| 579 | #include "llvm/ADT/BoolOrDefault.h" |
| 580 | #include "llvm/ADT/StringRef.h" |
| 581 | #include "llvm/Support/Allocator.h" |
| 582 | #include "llvm/Support/LibraryOptionsContext.h" |
| 583 | |
| 584 | namespace llvm { |
| 585 | namespace opt { |
| 586 | class Arg; |
| 587 | class LibraryOptionsParser; |
| 588 | class OptTable; |
| 589 | } // namespace opt |
| 590 | } // namespace llvm |
| 591 | |
| 592 | namespace llvm { |
| 593 | struct VectorizeOptions { |
| 594 | bool disable_loop_idiom_vectorize_all{false}; |
| 595 | bool disable_loop_idiom_vectorize_bytecmp{false}; |
| 596 | bool disable_loop_idiom_vectorize_find_first_byte{false}; |
| 597 | std::optional<unsigned> loop_idiom_vectorize_bytecmp_vf{}; |
| 598 | std::optional<LoopIdiomVectorizeStyle> loop_idiom_vectorize_style{}; |
| 599 | bool loop_idiom_vectorize_verify{false}; |
| 600 | bool enable_histogram_loop_vectorization{false}; |
| 601 | bool enable_if_conversion{true}; |
| 602 | bool hints_allow_reordering{true}; |
| 603 | bool lv_strided_pointer_ivs{false}; |
| 604 | LoopVectorizeHints::ScalableForceKind scalable_vectorization{LoopVectorizeHints::SK_Unspecified}; |
| 605 | bool force_target_supports_gather_scatter_ops{false}; |
| 606 | bool force_target_supports_masked_memory_ops{false}; |
| 607 | bool force_target_supports_scalable_vectors{false}; |
| 608 | bool prefer_inloop_reductions{false}; |
| 609 | float scalable_epilogue_vf_cost_scale_factor{2.0}; |
| 610 | llvm::BoolOrDefault vectorizer_consider_reg_pressure{llvm::BoolOrDefault::Default}; |
| 611 | llvm::BoolOrDefault vectorizer_maximize_bandwidth{llvm::BoolOrDefault::Default}; |
| 612 | bool vectorizer_maximize_bandwidth_for_vector_calls{true}; |
| 613 | bool enable_early_exit_vectorization{true}; |
| 614 | bool enable_early_exit_vectorization_with_side_effects{false}; |
| 615 | bool enable_epilogue_vectorization{true}; |
| 616 | bool enable_ind_var_reg_heur{true}; |
| 617 | llvm::BoolOrDefault enable_interleaved_mem_accesses{llvm::BoolOrDefault::Default}; |
| 618 | bool enable_loadstore_runtime_interleave{true}; |
| 619 | llvm::BoolOrDefault enable_masked_interleaved_mem_accesses{llvm::BoolOrDefault::Default}; |
| 620 | bool enable_vplan_native_path{false}; |
| 621 | std::optional<TailFoldingPolicyTy> epilogue_tail_folding_policy{}; |
| 622 | std::optional<unsigned> epilogue_vectorization_minimum_VF{}; |
| 623 | llvm::BoolOrDefault force_ordered_reductions{llvm::BoolOrDefault::Default}; |
| 624 | bool force_partial_aliasing_vectorization{false}; |
| 625 | std::optional<TailFoldingStyle> force_tail_folding_style{}; |
| 626 | std::optional<unsigned> force_target_instruction_cost{}; |
| 627 | std::optional<unsigned> force_target_max_scalar_interleave{}; |
| 628 | std::optional<unsigned> force_target_max_vector_interleave{}; |
| 629 | std::optional<unsigned> force_target_num_scalar_regs{}; |
| 630 | std::optional<unsigned> force_target_num_vector_regs{}; |
| 631 | llvm::BoolOrDefault force_widen_divrem_via_masked_intrinsic{llvm::BoolOrDefault::Default}; |
| 632 | bool interleave_loops{true}; |
| 633 | bool loop_vectorize_with_block_frequency{true}; |
| 634 | unsigned low_trip_count_loop_body_size_limit{20}; |
| 635 | unsigned max_nested_scalar_reduction_interleave{2}; |
| 636 | unsigned pragma_vectorize_scev_check_threshold{128}; |
| 637 | bool prefer_predicated_reduction_select{false}; |
| 638 | unsigned small_loop_cost{20}; |
| 639 | std::optional<TailFoldingPolicyTy> tail_folding_policy{}; |
| 640 | bool vectorize_loops{true}; |
| 641 | unsigned vectorize_num_stores_pred{1}; |
| 642 | unsigned vectorize_scev_check_threshold{16}; |
| 643 | unsigned vectorizer_min_trip_count{16}; |
| 644 | bool vplan_build_outerloop_stress_test{false}; |
| 645 | #if !defined(NDEBUG) |
| 646 | llvm::ArrayRef<StringRef> vplan_print_after{}; |
| 647 | #endif |
| 648 | #if !defined(NDEBUG) |
| 649 | bool vplan_print_after_all{false}; |
| 650 | #endif |
| 651 | #if !defined(NDEBUG) |
| 652 | llvm::ArrayRef<StringRef> vplan_print_before{}; |
| 653 | #endif |
| 654 | #if !defined(NDEBUG) |
| 655 | bool vplan_print_before_all{false}; |
| 656 | #endif |
| 657 | #if !defined(NDEBUG) |
| 658 | bool vplan_print_vector_region_scope{false}; |
| 659 | #endif |
| 660 | bool vplan_verify_each{VPlanVerifyEachDefault}; |
| 661 | #if !defined(NDEBUG) |
| 662 | bool sbvec_always_verify{false}; |
| 663 | #endif |
| 664 | unsigned long sbvec_stop_at{SBVecStopDisabled}; |
| 665 | unsigned long sbvec_stop_bndl{SBVecStopDisabled}; |
| 666 | bool sbvec_allow_non_pow2{false}; |
| 667 | StringRef sbvec_collect_seeds{"stores" }; |
| 668 | unsigned sbvec_vec_reg_bits{0}; |
| 669 | int sbvec_cost_threshold{0}; |
| 670 | StringRef sbvec_allow_files{".*" }; |
| 671 | StringRef sbvec_passes{"*" }; |
| 672 | bool sbvec_print_pass_pipeline{false}; |
| 673 | unsigned sbvec_seed_bundle_size_limit{32}; |
| 674 | unsigned sbvec_seed_groups_limit{256}; |
| 675 | unsigned sbvec_max_users_to_consider{16}; |
| 676 | bool slp_copyable_elements{true}; |
| 677 | unsigned slp_cost_loop_trip_count{2}; |
| 678 | bool slp_disable_tree_reorder{false}; |
| 679 | bool slp_enable_masked_stores{true}; |
| 680 | bool slp_enable_strided_stores{false}; |
| 681 | bool slp_force_strided_loads{false}; |
| 682 | bool slp_inst_count_check{true}; |
| 683 | int slp_max_look_ahead_depth{2}; |
| 684 | std::optional<int> slp_max_reg_size{}; |
| 685 | int slp_max_root_look_ahead_depth{2}; |
| 686 | unsigned slp_max_runtime_alias_checks{8}; |
| 687 | unsigned slp_max_stride{8}; |
| 688 | std::optional<unsigned> slp_max_vf{}; |
| 689 | std::optional<int> slp_min_reg_size{}; |
| 690 | unsigned slp_min_strided_loads{2}; |
| 691 | unsigned slp_min_strided_stores{2}; |
| 692 | unsigned slp_min_tree_size{3}; |
| 693 | bool slp_non_vectorizables_as_reductions{false}; |
| 694 | bool slp_per_lane_gather_scale{true}; |
| 695 | unsigned slp_phi_list_budget{1024}; |
| 696 | unsigned slp_phi_vectorization_budget{1024}; |
| 697 | bool slp_postprocess_stores_operands{false}; |
| 698 | bool slp_reassociate_ops{true}; |
| 699 | unsigned slp_reassociate_reorder_limit{32}; |
| 700 | unsigned slp_recursion_max_depth{12}; |
| 701 | unsigned slp_reduction_budget{65536}; |
| 702 | bool slp_revec{false}; |
| 703 | unsigned slp_runtime_alias_checks_max_scalar_cost_percent{25}; |
| 704 | int slp_schedule_budget{100000}; |
| 705 | bool slp_split_alternate_instructions{true}; |
| 706 | std::optional<int> slp_threshold{}; |
| 707 | unsigned slp_vec_loop_rt_checks_cost_percent{10}; |
| 708 | bool slp_vectorize_hor{true}; |
| 709 | bool slp_vectorize_hor_store{false}; |
| 710 | bool slp_vectorize_loop_acc_rdx{true}; |
| 711 | bool slp_vectorize_non_power_of_2{false}; |
| 712 | bool slp_vectorize_once_used{true}; |
| 713 | bool slp_vectorize_poor_throughput{true}; |
| 714 | bool slp_vectorize_with_runtime_alias_checks{true}; |
| 715 | bool vectorize_slp{true}; |
| 716 | bool view_slp_tree{false}; |
| 717 | bool {false}; |
| 718 | bool disable_vector_combine{false}; |
| 719 | unsigned vector_combine_max_scan_instrs{30}; |
| 720 | bool vplan_print_in_dot_format{false}; |
| 721 | bool use_partial_reductions_by_default{false}; |
| 722 | |
| 723 | static constexpr bool PerContext = true; |
| 724 | static const llvm::opt::OptTable &optTable(); |
| 725 | /// Sets the member that \p A names, allocating a list from \p Alloc. |
| 726 | /// Returns false if the value is invalid. |
| 727 | bool apply(const llvm::opt::Arg &A, llvm::BumpPtrAllocator &Alloc); |
| 728 | |
| 729 | private: |
| 730 | friend class llvm::cl::LibraryOptionsContext; |
| 731 | friend class llvm::opt::LibraryOptionsParser; |
| 732 | |
| 733 | static VectorizeOptions Global; |
| 734 | static const VectorizeOptions Default; |
| 735 | }; |
| 736 | } // namespace llvm |
| 737 | #endif // OPTIONS_STRUCT_DECL |
| 738 | |
| 739 | #ifdef OPTIONS_STRUCT_DEFS |
| 740 | #undef OPTIONS_STRUCT_DEFS |
| 741 | llvm::VectorizeOptions llvm::VectorizeOptions::Global; |
| 742 | LLVM_REQUIRE_CONSTANT_INITIALIZATION const llvm::VectorizeOptions llvm::VectorizeOptions::Default; |
| 743 | |
| 744 | const llvm::opt::OptTable &llvm::VectorizeOptions::optTable() { |
| 745 | static const llvm::opt::LibraryOptTable T(optionTables()); |
| 746 | return T; |
| 747 | } |
| 748 | |
| 749 | bool llvm::VectorizeOptions::apply(const llvm::opt::Arg &A, llvm::BumpPtrAllocator &Alloc) { |
| 750 | switch (A.getOption().getID()) { |
| 751 | case OPT_disable_binop_extract_shuffle: |
| 752 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , disable_binop_extract_shuffle, Alloc); |
| 753 | case OPT_disable_loop_idiom_vectorize_all: |
| 754 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , disable_loop_idiom_vectorize_all, Alloc); |
| 755 | case OPT_disable_loop_idiom_vectorize_bytecmp: |
| 756 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , disable_loop_idiom_vectorize_bytecmp, Alloc); |
| 757 | case OPT_disable_loop_idiom_vectorize_find_first_byte: |
| 758 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , disable_loop_idiom_vectorize_find_first_byte, Alloc); |
| 759 | case OPT_disable_vector_combine: |
| 760 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , disable_vector_combine, Alloc); |
| 761 | case OPT_enable_early_exit_vectorization_with_side_effects: |
| 762 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_early_exit_vectorization_with_side_effects, Alloc); |
| 763 | case OPT_enable_early_exit_vectorization: |
| 764 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_early_exit_vectorization, Alloc); |
| 765 | case OPT_enable_epilogue_vectorization: |
| 766 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_epilogue_vectorization, Alloc); |
| 767 | case OPT_enable_histogram_loop_vectorization: |
| 768 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_histogram_loop_vectorization, Alloc); |
| 769 | case OPT_enable_if_conversion: |
| 770 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_if_conversion, Alloc); |
| 771 | case OPT_enable_ind_var_reg_heur: |
| 772 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_ind_var_reg_heur, Alloc); |
| 773 | case OPT_enable_interleaved_mem_accesses: |
| 774 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_interleaved_mem_accesses, Alloc); |
| 775 | case OPT_enable_loadstore_runtime_interleave: |
| 776 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_loadstore_runtime_interleave, Alloc); |
| 777 | case OPT_enable_masked_interleaved_mem_accesses: |
| 778 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_masked_interleaved_mem_accesses, Alloc); |
| 779 | case OPT_enable_vplan_native_path: |
| 780 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , enable_vplan_native_path, Alloc); |
| 781 | case OPT_epilogue_tail_folding_policy: |
| 782 | return llvm::opt::parseArgValue(A.getValue(), epilogue_tail_folding_policy, Alloc, [](llvm::StringRef V, auto &X) { |
| 783 | if (V == "dont-fold-tail" ) { |
| 784 | X = TailFoldingPolicyTy::None; |
| 785 | return true; |
| 786 | } |
| 787 | if (V == "prefer-fold-tail" ) { |
| 788 | X = TailFoldingPolicyTy::PreferFoldTail; |
| 789 | return true; |
| 790 | } |
| 791 | return false; |
| 792 | }); |
| 793 | case OPT_epilogue_vectorization_minimum_VF: |
| 794 | return llvm::opt::parseArgValue(A.getValue(), epilogue_vectorization_minimum_VF, Alloc); |
| 795 | case OPT_force_ordered_reductions: |
| 796 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , force_ordered_reductions, Alloc); |
| 797 | case OPT_force_partial_aliasing_vectorization: |
| 798 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , force_partial_aliasing_vectorization, Alloc); |
| 799 | case OPT_force_tail_folding_style: |
| 800 | return llvm::opt::parseArgValue(A.getValue(), force_tail_folding_style, Alloc, [](llvm::StringRef V, auto &X) { |
| 801 | if (V == "none" ) { |
| 802 | X = TailFoldingStyle::None; |
| 803 | return true; |
| 804 | } |
| 805 | if (V == "data" ) { |
| 806 | X = TailFoldingStyle::Data; |
| 807 | return true; |
| 808 | } |
| 809 | if (V == "data-without-lane-mask" ) { |
| 810 | X = TailFoldingStyle::DataWithoutLaneMask; |
| 811 | return true; |
| 812 | } |
| 813 | if (V == "data-and-control" ) { |
| 814 | X = TailFoldingStyle::DataAndControlFlow; |
| 815 | return true; |
| 816 | } |
| 817 | if (V == "data-with-evl" ) { |
| 818 | X = TailFoldingStyle::DataWithEVL; |
| 819 | return true; |
| 820 | } |
| 821 | return false; |
| 822 | }); |
| 823 | case OPT_force_target_instruction_cost: |
| 824 | return llvm::opt::parseArgValue(A.getValue(), force_target_instruction_cost, Alloc); |
| 825 | case OPT_force_target_max_scalar_interleave: |
| 826 | return llvm::opt::parseArgValue(A.getValue(), force_target_max_scalar_interleave, Alloc); |
| 827 | case OPT_force_target_max_vector_interleave: |
| 828 | return llvm::opt::parseArgValue(A.getValue(), force_target_max_vector_interleave, Alloc); |
| 829 | case OPT_force_target_num_scalar_regs: |
| 830 | return llvm::opt::parseArgValue(A.getValue(), force_target_num_scalar_regs, Alloc); |
| 831 | case OPT_force_target_num_vector_regs: |
| 832 | return llvm::opt::parseArgValue(A.getValue(), force_target_num_vector_regs, Alloc); |
| 833 | case OPT_force_target_supports_gather_scatter_ops: |
| 834 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , force_target_supports_gather_scatter_ops, Alloc); |
| 835 | case OPT_force_target_supports_masked_memory_ops: |
| 836 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , force_target_supports_masked_memory_ops, Alloc); |
| 837 | case OPT_force_target_supports_scalable_vectors: |
| 838 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , force_target_supports_scalable_vectors, Alloc); |
| 839 | case OPT_force_widen_divrem_via_masked_intrinsic: |
| 840 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , force_widen_divrem_via_masked_intrinsic, Alloc); |
| 841 | case OPT_hints_allow_reordering: |
| 842 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , hints_allow_reordering, Alloc); |
| 843 | case OPT_interleave_loops: |
| 844 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , interleave_loops, Alloc); |
| 845 | case OPT_loop_idiom_vectorize_bytecmp_vf: |
| 846 | return llvm::opt::parseArgValue(A.getValue(), loop_idiom_vectorize_bytecmp_vf, Alloc); |
| 847 | case OPT_loop_idiom_vectorize_style: |
| 848 | return llvm::opt::parseArgValue(A.getValue(), loop_idiom_vectorize_style, Alloc, [](llvm::StringRef V, auto &X) { |
| 849 | if (V == "masked" ) { |
| 850 | X = LoopIdiomVectorizeStyle::Masked; |
| 851 | return true; |
| 852 | } |
| 853 | if (V == "predicated" ) { |
| 854 | X = LoopIdiomVectorizeStyle::Predicated; |
| 855 | return true; |
| 856 | } |
| 857 | return false; |
| 858 | }); |
| 859 | case OPT_loop_idiom_vectorize_verify: |
| 860 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , loop_idiom_vectorize_verify, Alloc); |
| 861 | case OPT_loop_vectorize_with_block_frequency: |
| 862 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , loop_vectorize_with_block_frequency, Alloc); |
| 863 | case OPT_low_trip_count_loop_body_size_limit: |
| 864 | return llvm::opt::parseArgValue(A.getValue(), low_trip_count_loop_body_size_limit, Alloc); |
| 865 | case OPT_lv_strided_pointer_ivs: |
| 866 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , lv_strided_pointer_ivs, Alloc); |
| 867 | case OPT_max_nested_scalar_reduction_interleave: |
| 868 | return llvm::opt::parseArgValue(A.getValue(), max_nested_scalar_reduction_interleave, Alloc); |
| 869 | case OPT_pragma_vectorize_scev_check_threshold: |
| 870 | return llvm::opt::parseArgValue(A.getValue(), pragma_vectorize_scev_check_threshold, Alloc); |
| 871 | case OPT_prefer_inloop_reductions: |
| 872 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , prefer_inloop_reductions, Alloc); |
| 873 | case OPT_prefer_predicated_reduction_select: |
| 874 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , prefer_predicated_reduction_select, Alloc); |
| 875 | case OPT_sbvec_allow_files: |
| 876 | return llvm::opt::parseArgValue(A.getValue(), sbvec_allow_files, Alloc); |
| 877 | case OPT_sbvec_allow_non_pow2: |
| 878 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , sbvec_allow_non_pow2, Alloc); |
| 879 | #if !defined(NDEBUG) |
| 880 | case OPT_sbvec_always_verify: |
| 881 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , sbvec_always_verify, Alloc); |
| 882 | #endif |
| 883 | case OPT_sbvec_collect_seeds: |
| 884 | return llvm::opt::parseArgValue(A.getValue(), sbvec_collect_seeds, Alloc); |
| 885 | case OPT_sbvec_cost_threshold: |
| 886 | return llvm::opt::parseArgValue(A.getValue(), sbvec_cost_threshold, Alloc); |
| 887 | case OPT_sbvec_max_users_to_consider: |
| 888 | return llvm::opt::parseArgValue(A.getValue(), sbvec_max_users_to_consider, Alloc); |
| 889 | case OPT_sbvec_passes: |
| 890 | return llvm::opt::parseArgValue(A.getValue(), sbvec_passes, Alloc); |
| 891 | case OPT_sbvec_print_pass_pipeline: |
| 892 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , sbvec_print_pass_pipeline, Alloc); |
| 893 | case OPT_sbvec_seed_bundle_size_limit: |
| 894 | return llvm::opt::parseArgValue(A.getValue(), sbvec_seed_bundle_size_limit, Alloc); |
| 895 | case OPT_sbvec_seed_groups_limit: |
| 896 | return llvm::opt::parseArgValue(A.getValue(), sbvec_seed_groups_limit, Alloc); |
| 897 | case OPT_sbvec_stop_at: |
| 898 | return llvm::opt::parseArgValue(A.getValue(), sbvec_stop_at, Alloc); |
| 899 | case OPT_sbvec_stop_bndl: |
| 900 | return llvm::opt::parseArgValue(A.getValue(), sbvec_stop_bndl, Alloc); |
| 901 | case OPT_sbvec_vec_reg_bits: |
| 902 | return llvm::opt::parseArgValue(A.getValue(), sbvec_vec_reg_bits, Alloc); |
| 903 | case OPT_scalable_epilogue_vf_cost_scale_factor: |
| 904 | return llvm::opt::parseArgValue(A.getValue(), scalable_epilogue_vf_cost_scale_factor, Alloc); |
| 905 | case OPT_scalable_vectorization: |
| 906 | return llvm::opt::parseArgValue(A.getValue(), scalable_vectorization, Alloc, [](llvm::StringRef V, auto &X) { |
| 907 | if (V == "off" ) { |
| 908 | X = LoopVectorizeHints::SK_FixedWidthOnly; |
| 909 | return true; |
| 910 | } |
| 911 | if (V == "preferred" ) { |
| 912 | X = LoopVectorizeHints::SK_PreferScalable; |
| 913 | return true; |
| 914 | } |
| 915 | if (V == "on" ) { |
| 916 | X = LoopVectorizeHints::SK_PreferScalable; |
| 917 | return true; |
| 918 | } |
| 919 | if (V == "always" ) { |
| 920 | X = LoopVectorizeHints::SK_AlwaysScalable; |
| 921 | return true; |
| 922 | } |
| 923 | return false; |
| 924 | }); |
| 925 | case OPT_slp_copyable_elements: |
| 926 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_copyable_elements, Alloc); |
| 927 | case OPT_slp_cost_loop_trip_count: |
| 928 | return llvm::opt::parseArgValue(A.getValue(), slp_cost_loop_trip_count, Alloc); |
| 929 | case OPT_slp_disable_tree_reorder: |
| 930 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_disable_tree_reorder, Alloc); |
| 931 | case OPT_slp_enable_masked_stores: |
| 932 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_enable_masked_stores, Alloc); |
| 933 | case OPT_slp_enable_strided_stores: |
| 934 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_enable_strided_stores, Alloc); |
| 935 | case OPT_slp_force_strided_loads: |
| 936 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_force_strided_loads, Alloc); |
| 937 | case OPT_slp_inst_count_check: |
| 938 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_inst_count_check, Alloc); |
| 939 | case OPT_slp_max_look_ahead_depth: |
| 940 | return llvm::opt::parseArgValue(A.getValue(), slp_max_look_ahead_depth, Alloc); |
| 941 | case OPT_slp_max_reg_size: |
| 942 | return llvm::opt::parseArgValue(A.getValue(), slp_max_reg_size, Alloc); |
| 943 | case OPT_slp_max_root_look_ahead_depth: |
| 944 | return llvm::opt::parseArgValue(A.getValue(), slp_max_root_look_ahead_depth, Alloc); |
| 945 | case OPT_slp_max_runtime_alias_checks: |
| 946 | return llvm::opt::parseArgValue(A.getValue(), slp_max_runtime_alias_checks, Alloc); |
| 947 | case OPT_slp_max_stride: |
| 948 | return llvm::opt::parseArgValue(A.getValue(), slp_max_stride, Alloc); |
| 949 | case OPT_slp_max_vf: |
| 950 | return llvm::opt::parseArgValue(A.getValue(), slp_max_vf, Alloc); |
| 951 | case OPT_slp_min_reg_size: |
| 952 | return llvm::opt::parseArgValue(A.getValue(), slp_min_reg_size, Alloc); |
| 953 | case OPT_slp_min_strided_loads: |
| 954 | return llvm::opt::parseArgValue(A.getValue(), slp_min_strided_loads, Alloc); |
| 955 | case OPT_slp_min_strided_stores: |
| 956 | return llvm::opt::parseArgValue(A.getValue(), slp_min_strided_stores, Alloc); |
| 957 | case OPT_slp_min_tree_size: |
| 958 | return llvm::opt::parseArgValue(A.getValue(), slp_min_tree_size, Alloc); |
| 959 | case OPT_slp_non_vectorizables_as_reductions: |
| 960 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_non_vectorizables_as_reductions, Alloc); |
| 961 | case OPT_slp_per_lane_gather_scale: |
| 962 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_per_lane_gather_scale, Alloc); |
| 963 | case OPT_slp_phi_list_budget: |
| 964 | return llvm::opt::parseArgValue(A.getValue(), slp_phi_list_budget, Alloc); |
| 965 | case OPT_slp_phi_vectorization_budget: |
| 966 | return llvm::opt::parseArgValue(A.getValue(), slp_phi_vectorization_budget, Alloc); |
| 967 | case OPT_slp_postprocess_stores_operands: |
| 968 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_postprocess_stores_operands, Alloc); |
| 969 | case OPT_slp_reassociate_ops: |
| 970 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_reassociate_ops, Alloc); |
| 971 | case OPT_slp_reassociate_reorder_limit: |
| 972 | return llvm::opt::parseArgValue(A.getValue(), slp_reassociate_reorder_limit, Alloc); |
| 973 | case OPT_slp_recursion_max_depth: |
| 974 | return llvm::opt::parseArgValue(A.getValue(), slp_recursion_max_depth, Alloc); |
| 975 | case OPT_slp_reduction_budget: |
| 976 | return llvm::opt::parseArgValue(A.getValue(), slp_reduction_budget, Alloc); |
| 977 | case OPT_slp_revec: |
| 978 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_revec, Alloc); |
| 979 | case OPT_slp_runtime_alias_checks_max_scalar_cost_percent: |
| 980 | return llvm::opt::parseArgValue(A.getValue(), slp_runtime_alias_checks_max_scalar_cost_percent, Alloc); |
| 981 | case OPT_slp_schedule_budget: |
| 982 | return llvm::opt::parseArgValue(A.getValue(), slp_schedule_budget, Alloc); |
| 983 | case OPT_slp_split_alternate_instructions: |
| 984 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_split_alternate_instructions, Alloc); |
| 985 | case OPT_slp_threshold: |
| 986 | return llvm::opt::parseArgValue(A.getValue(), slp_threshold, Alloc); |
| 987 | case OPT_slp_vec_loop_rt_checks_cost_percent: |
| 988 | return llvm::opt::parseArgValue(A.getValue(), slp_vec_loop_rt_checks_cost_percent, Alloc); |
| 989 | case OPT_slp_vectorize_hor_store: |
| 990 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_hor_store, Alloc); |
| 991 | case OPT_slp_vectorize_hor: |
| 992 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_hor, Alloc); |
| 993 | case OPT_slp_vectorize_loop_acc_rdx: |
| 994 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_loop_acc_rdx, Alloc); |
| 995 | case OPT_slp_vectorize_non_power_of_2: |
| 996 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_non_power_of_2, Alloc); |
| 997 | case OPT_slp_vectorize_once_used: |
| 998 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_once_used, Alloc); |
| 999 | case OPT_slp_vectorize_poor_throughput: |
| 1000 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_poor_throughput, Alloc); |
| 1001 | case OPT_slp_vectorize_with_runtime_alias_checks: |
| 1002 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , slp_vectorize_with_runtime_alias_checks, Alloc); |
| 1003 | case OPT_small_loop_cost: |
| 1004 | return llvm::opt::parseArgValue(A.getValue(), small_loop_cost, Alloc); |
| 1005 | case OPT_tail_folding_policy: |
| 1006 | return llvm::opt::parseArgValue(A.getValue(), tail_folding_policy, Alloc, [](llvm::StringRef V, auto &X) { |
| 1007 | if (V == "dont-fold-tail" ) { |
| 1008 | X = TailFoldingPolicyTy::None; |
| 1009 | return true; |
| 1010 | } |
| 1011 | if (V == "prefer-fold-tail" ) { |
| 1012 | X = TailFoldingPolicyTy::PreferFoldTail; |
| 1013 | return true; |
| 1014 | } |
| 1015 | if (V == "must-fold-tail" ) { |
| 1016 | X = TailFoldingPolicyTy::MustFoldTail; |
| 1017 | return true; |
| 1018 | } |
| 1019 | return false; |
| 1020 | }); |
| 1021 | case OPT_use_partial_reductions_by_default: |
| 1022 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , use_partial_reductions_by_default, Alloc); |
| 1023 | case OPT_vector_combine_max_scan_instrs: |
| 1024 | return llvm::opt::parseArgValue(A.getValue(), vector_combine_max_scan_instrs, Alloc); |
| 1025 | case OPT_vectorize_loops: |
| 1026 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vectorize_loops, Alloc); |
| 1027 | case OPT_vectorize_num_stores_pred: |
| 1028 | return llvm::opt::parseArgValue(A.getValue(), vectorize_num_stores_pred, Alloc); |
| 1029 | case OPT_vectorize_scev_check_threshold: |
| 1030 | return llvm::opt::parseArgValue(A.getValue(), vectorize_scev_check_threshold, Alloc); |
| 1031 | case OPT_vectorize_slp: |
| 1032 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vectorize_slp, Alloc); |
| 1033 | case OPT_vectorizer_consider_reg_pressure: |
| 1034 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vectorizer_consider_reg_pressure, Alloc); |
| 1035 | case OPT_vectorizer_maximize_bandwidth_for_vector_calls: |
| 1036 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vectorizer_maximize_bandwidth_for_vector_calls, Alloc); |
| 1037 | case OPT_vectorizer_maximize_bandwidth: |
| 1038 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vectorizer_maximize_bandwidth, Alloc); |
| 1039 | case OPT_vectorizer_min_trip_count: |
| 1040 | return llvm::opt::parseArgValue(A.getValue(), vectorizer_min_trip_count, Alloc); |
| 1041 | case OPT_view_slp_tree: |
| 1042 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , view_slp_tree, Alloc); |
| 1043 | case OPT_vplan_build_outerloop_stress_test: |
| 1044 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vplan_build_outerloop_stress_test, Alloc); |
| 1045 | #if !defined(NDEBUG) |
| 1046 | case OPT_vplan_print_after_all: |
| 1047 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vplan_print_after_all, Alloc); |
| 1048 | #endif |
| 1049 | #if !defined(NDEBUG) |
| 1050 | case OPT_vplan_print_after: |
| 1051 | return llvm::opt::parseArgValue(A.getValue(), vplan_print_after, Alloc); |
| 1052 | #endif |
| 1053 | #if !defined(NDEBUG) |
| 1054 | case OPT_vplan_print_before_all: |
| 1055 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vplan_print_before_all, Alloc); |
| 1056 | #endif |
| 1057 | #if !defined(NDEBUG) |
| 1058 | case OPT_vplan_print_before: |
| 1059 | return llvm::opt::parseArgValue(A.getValue(), vplan_print_before, Alloc); |
| 1060 | #endif |
| 1061 | case OPT_vplan_print_in_dot_format: |
| 1062 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vplan_print_in_dot_format, Alloc); |
| 1063 | #if !defined(NDEBUG) |
| 1064 | case OPT_vplan_print_vector_region_scope: |
| 1065 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vplan_print_vector_region_scope, Alloc); |
| 1066 | #endif |
| 1067 | case OPT_vplan_verify_each: |
| 1068 | return llvm::opt::parseArgValue(A.getNumValues() ? A.getValue() : "true" , vplan_verify_each, Alloc); |
| 1069 | } |
| 1070 | llvm_unreachable("option without a member" ); |
| 1071 | } |
| 1072 | #endif // OPTIONS_STRUCT_DEFS |
| 1073 | ///////// |
| 1074 | // ValuesCode |
| 1075 | |
| 1076 | #ifdef OPTTABLE_VALUES_CODE |
| 1077 | static llvm::StringRef getOptionValuesCode(unsigned ID) { |
| 1078 | switch (ID) { |
| 1079 | } |
| 1080 | return {}; |
| 1081 | } |
| 1082 | #undef OPTTABLE_VALUES_CODE |
| 1083 | #endif // OPTTABLE_VALUES_CODE |
| 1084 | ///////// |
| 1085 | // Groups |
| 1086 | |
| 1087 | #ifdef OPTION |
| 1088 | |
| 1089 | ////////// |
| 1090 | // Options |
| 1091 | |
| 1092 | OPTION(0, 6 /* <input> */, INPUT, Input, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0, 0, 0, 0) |
| 1093 | OPTION(0, 14 /* <unknown> */, UNKNOWN, Unknown, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 0, 0, 0, 0, 0) |
| 1094 | OPTION(1, 24 /* -disable-binop-extract-shuffle */, anonymous_111, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 55, 0, 0, 0, 0) |
| 1095 | OPTION(1, 99 /* -disable-loop-idiom-vectorize-all */, anonymous_0, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 133, 0, 0, 0, 0) |
| 1096 | OPTION(1, 167 /* -disable-loop-idiom-vectorize-bytecmp */, anonymous_1, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 205, 0, 0, 0, 0) |
| 1097 | OPTION(1, 285 /* -disable-loop-idiom-vectorize-find-first-byte */, anonymous_2, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 331, 0, 0, 0, 0) |
| 1098 | OPTION(1, 370 /* -disable-vector-combine */, anonymous_112, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 394, 0, 0, 0, 0) |
| 1099 | OPTION(1, 432 /* -enable-early-exit-vectorization-with-side-effects */, anonymous_20, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 483, 0, 0, 0, 0) |
| 1100 | OPTION(1, 564 /* -enable-early-exit-vectorization */, anonymous_19, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 597, 0, 0, 0, 0) |
| 1101 | OPTION(1, 661 /* -enable-epilogue-vectorization */, anonymous_21, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 692, 0, 0, 0, 0) |
| 1102 | OPTION(1, 731 /* -enable-histogram-loop-vectorization */, anonymous_6, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 768, 0, 0, 0, 0) |
| 1103 | OPTION(1, 830 /* -enable-if-conversion */, anonymous_7, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 852, 0, 0, 0, 0) |
| 1104 | OPTION(1, 894 /* -enable-ind-var-reg-heur */, anonymous_22, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 919, 0, 0, 0, 0) |
| 1105 | OPTION(1, 976 /* -enable-interleaved-mem-accesses */, anonymous_23, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1009, 0, 0, 0, 0) |
| 1106 | OPTION(1, 1071 /* -enable-loadstore-runtime-interleave */, anonymous_24, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1108, 0, 0, 0, 0) |
| 1107 | OPTION(1, 1173 /* -enable-masked-interleaved-mem-accesses */, anonymous_25, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1213, 0, 0, 0, 0) |
| 1108 | OPTION(1, 1282 /* -enable-vplan-native-path */, anonymous_26, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1308, 0, 0, 0, 0) |
| 1109 | OPTION(1, 1389 /* -epilogue-tail-folding-policy */, anonymous_27, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1419, 0, 1484, 1518, 0) |
| 1110 | OPTION(1, 1550 /* -epilogue-vectorization-minimum-VF */, anonymous_28, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1585, 0, 0, 0, 0) |
| 1111 | OPTION(1, 1708 /* -force-ordered-reductions */, anonymous_29, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1734, 0, 0, 0, 0) |
| 1112 | OPTION(1, 1805 /* -force-partial-aliasing-vectorization */, anonymous_30, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1843, 0, 0, 0, 0) |
| 1113 | OPTION(1, 1888 /* -force-tail-folding-style */, anonymous_31, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 1914, 0, 1943, 2009, 0) |
| 1114 | OPTION(1, 2073 /* -force-target-instruction-cost */, anonymous_32, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2104, 0, 0, 0, 0) |
| 1115 | OPTION(1, 2245 /* -force-target-max-scalar-interleave */, anonymous_33, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2281, 0, 0, 0, 0) |
| 1116 | OPTION(1, 2355 /* -force-target-max-vector-interleave */, anonymous_34, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2391, 0, 0, 0, 0) |
| 1117 | OPTION(1, 2469 /* -force-target-num-scalar-regs */, anonymous_35, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2499, 0, 0, 0, 0) |
| 1118 | OPTION(1, 2561 /* -force-target-num-vector-regs */, anonymous_36, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2591, 0, 0, 0, 0) |
| 1119 | OPTION(1, 2653 /* -force-target-supports-gather-scatter-ops */, anonymous_11, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2695, 0, 0, 0, 0) |
| 1120 | OPTION(1, 2767 /* -force-target-supports-masked-memory-ops */, anonymous_12, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2808, 0, 0, 0, 0) |
| 1121 | OPTION(1, 2879 /* -force-target-supports-scalable-vectors */, anonymous_13, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 2919, 0, 0, 0, 0) |
| 1122 | OPTION(1, 3048 /* -force-widen-divrem-via-masked-intrinsic */, anonymous_37, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3089, 0, 0, 0, 0) |
| 1123 | OPTION(1, 3160 /* -hints-allow-reordering */, anonymous_8, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3184, 0, 0, 0, 0) |
| 1124 | OPTION(1, 3256 /* -interleave-loops */, anonymous_38, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3274, 0, 0, 0, 0) |
| 1125 | OPTION(1, 3328 /* -loop-idiom-vectorize-bytecmp-vf */, anonymous_3, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3361, 0, 0, 0, 0) |
| 1126 | OPTION(1, 3412 /* -loop-idiom-vectorize-style */, anonymous_4, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3440, 0, 3489, 3509, 0) |
| 1127 | OPTION(1, 3527 /* -loop-idiom-vectorize-verify */, anonymous_5, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3556, 0, 0, 0, 0) |
| 1128 | OPTION(1, 3605 /* -loop-vectorize-with-block-frequency */, anonymous_39, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3642, 0, 0, 0, 0) |
| 1129 | OPTION(1, 3794 /* -low-trip-count-loop-body-size-limit */, anonymous_40, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3831, 0, 0, 0, 0) |
| 1130 | OPTION(1, 3927 /* -lv-strided-pointer-ivs */, anonymous_9, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 3951, 0, 0, 0, 0) |
| 1131 | OPTION(1, 4022 /* -max-nested-scalar-reduction-interleave */, anonymous_41, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4062, 0, 0, 0, 0) |
| 1132 | OPTION(1, 4152 /* -pragma-vectorize-scev-check-threshold */, anonymous_42, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4191, 0, 0, 0, 0) |
| 1133 | OPTION(1, 4265 /* -prefer-inloop-reductions */, anonymous_14, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4291, 0, 0, 0, 0) |
| 1134 | OPTION(1, 4359 /* -prefer-predicated-reduction-select */, anonymous_43, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4395, 0, 0, 0, 0) |
| 1135 | OPTION(1, 4462 /* -sbvec-allow-files */, anonymous_64, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4481, 0, 0, 0, 0) |
| 1136 | OPTION(1, 4573 /* -sbvec-allow-non-pow2 */, anonymous_60, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4595, 0, 0, 0, 0) |
| 1137 | #if !defined(NDEBUG) |
| 1138 | OPTION(1, 4630 /* -sbvec-always-verify */, anonymous_57, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4651, 0, 0, 0, 0) |
| 1139 | #endif |
| 1140 | OPTION(1, 4740 /* -sbvec-collect-seeds */, anonymous_61, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4761, 0, 0, 0, 0) |
| 1141 | OPTION(1, 4851 /* -sbvec-cost-threshold */, anonymous_63, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4873, 0, 0, 0, 0) |
| 1142 | OPTION(1, 4902 /* -sbvec-max-users-to-consider */, anonymous_69, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 4931, 0, 0, 0, 0) |
| 1143 | OPTION(1, 5066 /* -sbvec-passes */, anonymous_65, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5080, 0, 0, 0, 0) |
| 1144 | OPTION(1, 5165 /* -sbvec-print-pass-pipeline */, anonymous_66, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5192, 0, 0, 0, 0) |
| 1145 | OPTION(1, 5229 /* -sbvec-seed-bundle-size-limit */, anonymous_67, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5259, 0, 0, 0, 0) |
| 1146 | OPTION(1, 5317 /* -sbvec-seed-groups-limit */, anonymous_68, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5342, 0, 0, 0, 0) |
| 1147 | OPTION(1, 5417 /* -sbvec-stop-at */, anonymous_58, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5432, 0, 0, 0, 0) |
| 1148 | OPTION(1, 5507 /* -sbvec-stop-bndl */, anonymous_59, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5524, 0, 0, 0, 0) |
| 1149 | OPTION(1, 5558 /* -sbvec-vec-reg-bits */, anonymous_62, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5578, 0, 0, 0, 0) |
| 1150 | OPTION(1, 5662 /* -scalable-epilogue-vf-cost-scale-factor */, anonymous_15, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5702, 0, 0, 0, 0) |
| 1151 | OPTION(1, 5757 /* -scalable-vectorization */, anonymous_10, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5781, 0, 5855, 5881, 0) |
| 1152 | OPTION(1, 5905 /* -slp-copyable-elements */, anonymous_70, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 5928, 0, 0, 0, 0) |
| 1153 | OPTION(1, 6008 /* -slp-cost-loop-trip-count */, anonymous_71, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6034, 0, 0, 0, 0) |
| 1154 | OPTION(1, 6143 /* -slp-disable-tree-reorder */, anonymous_72, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6169, 0, 0, 0, 0) |
| 1155 | OPTION(1, 6241 /* -slp-enable-masked-stores */, anonymous_73, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6267, 0, 0, 0, 0) |
| 1156 | OPTION(1, 6379 /* -slp-enable-strided-stores */, anonymous_74, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6406, 0, 0, 0, 0) |
| 1157 | OPTION(1, 6461 /* -slp-force-strided-loads */, anonymous_75, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6486, 0, 0, 0, 0) |
| 1158 | OPTION(1, 6564 /* -slp-inst-count-check */, anonymous_76, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6586, 0, 0, 0, 0) |
| 1159 | OPTION(1, 6668 /* -slp-max-look-ahead-depth */, anonymous_77, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6694, 0, 0, 0, 0) |
| 1160 | OPTION(1, 6753 /* -slp-max-reg-size */, anonymous_78, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6771, 0, 0, 0, 0) |
| 1161 | OPTION(1, 6823 /* -slp-max-root-look-ahead-depth */, anonymous_79, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6854, 0, 0, 0, 0) |
| 1162 | OPTION(1, 6917 /* -slp-max-runtime-alias-checks */, anonymous_80, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6947, 0, 0, 0, 0) |
| 1163 | OPTION(1, 7040 /* -slp-max-stride */, anonymous_81, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7056, 0, 0, 0, 0) |
| 1164 | OPTION(1, 7104 /* -slp-max-vf */, anonymous_82, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7116, 0, 0, 0, 0) |
| 1165 | OPTION(1, 7163 /* -slp-min-reg-size */, anonymous_83, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 6771, 0, 0, 0, 0) |
| 1166 | OPTION(1, 7181 /* -slp-min-strided-loads */, anonymous_84, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7204, 0, 0, 0, 0) |
| 1167 | OPTION(1, 7310 /* -slp-min-strided-stores */, anonymous_85, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7334, 0, 0, 0, 0) |
| 1168 | OPTION(1, 7441 /* -slp-min-tree-size */, anonymous_86, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7460, 0, 0, 0, 0) |
| 1169 | OPTION(1, 7518 /* -slp-non-vectorizables-as-reductions */, anonymous_87, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7555, 0, 0, 0, 0) |
| 1170 | OPTION(1, 7619 /* -slp-per-lane-gather-scale */, anonymous_88, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7646, 0, 0, 0, 0) |
| 1171 | OPTION(1, 7757 /* -slp-phi-list-budget */, anonymous_89, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7778, 0, 0, 0, 0) |
| 1172 | OPTION(1, 7824 /* -slp-phi-vectorization-budget */, anonymous_90, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 7854, 0, 0, 0, 0) |
| 1173 | OPTION(1, 8026 /* -slp-postprocess-stores-operands */, anonymous_91, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8059, 0, 0, 0, 0) |
| 1174 | OPTION(1, 8115 /* -slp-reassociate-ops */, anonymous_92, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8136, 0, 0, 0, 0) |
| 1175 | OPTION(1, 8195 /* -slp-reassociate-reorder-limit */, anonymous_93, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8226, 0, 0, 0, 0) |
| 1176 | OPTION(1, 8325 /* -slp-recursion-max-depth */, anonymous_94, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8350, 0, 0, 0, 0) |
| 1177 | OPTION(1, 8410 /* -slp-reduction-budget */, anonymous_95, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8432, 0, 0, 0, 0) |
| 1178 | OPTION(1, 8504 /* -slp-revec */, anonymous_96, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8515, 0, 0, 0, 0) |
| 1179 | OPTION(1, 8565 /* -slp-runtime-alias-checks-max-scalar-cost-percent */, anonymous_97, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8615, 0, 0, 0, 0) |
| 1180 | OPTION(1, 8780 /* -slp-schedule-budget */, anonymous_98, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8801, 0, 0, 0, 0) |
| 1181 | OPTION(1, 8855 /* -slp-split-alternate-instructions */, anonymous_99, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8889, 0, 0, 0, 0) |
| 1182 | OPTION(1, 8950 /* -slp-threshold */, anonymous_100, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 8965, 0, 0, 0, 0) |
| 1183 | OPTION(1, 9014 /* -slp-vec-loop-rt-checks-cost-percent */, anonymous_101, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9051, 0, 0, 0, 0) |
| 1184 | OPTION(1, 9202 /* -slp-vectorize-hor-store */, anonymous_103, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9227, 0, 0, 0, 0) |
| 1185 | OPTION(1, 9291 /* -slp-vectorize-hor */, anonymous_102, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9310, 0, 0, 0, 0) |
| 1186 | OPTION(1, 9353 /* -slp-vectorize-loop-acc-rdx */, anonymous_104, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9381, 0, 0, 0, 0) |
| 1187 | OPTION(1, 9490 /* -slp-vectorize-non-power-of-2 */, anonymous_105, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9520, 0, 0, 0, 0) |
| 1188 | OPTION(1, 9576 /* -slp-vectorize-once-used */, anonymous_106, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9601, 0, 0, 0, 0) |
| 1189 | OPTION(1, 9673 /* -slp-vectorize-poor-throughput */, anonymous_107, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9704, 0, 0, 0, 0) |
| 1190 | OPTION(1, 9796 /* -slp-vectorize-with-runtime-alias-checks */, anonymous_108, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9837, 0, 0, 0, 0) |
| 1191 | OPTION(1, 9952 /* -small-loop-cost */, anonymous_44, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 9969, 0, 0, 0, 0) |
| 1192 | OPTION(1, 10034 /* -tail-folding-policy */, anonymous_45, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10055, 0, 10111, 10160, 0) |
| 1193 | OPTION(1, 10207 /* -use-partial-reductions-by-default */, anonymous_115, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10242, 0, 0, 0, 0) |
| 1194 | OPTION(1, 10314 /* -vector-combine-max-scan-instrs */, anonymous_113, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10346, 0, 0, 0, 0) |
| 1195 | OPTION(1, 10402 /* -vectorize-loops */, anonymous_46, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10419, 0, 0, 0, 0) |
| 1196 | OPTION(1, 10453 /* -vectorize-num-stores-pred */, anonymous_47, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10480, 0, 0, 0, 0) |
| 1197 | OPTION(1, 10531 /* -vectorize-scev-check-threshold */, anonymous_48, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10563, 0, 0, 0, 0) |
| 1198 | OPTION(1, 10605 /* -vectorize-slp */, anonymous_109, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10620, 0, 0, 0, 0) |
| 1199 | OPTION(1, 10653 /* -vectorizer-consider-reg-pressure */, anonymous_16, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10687, 0, 0, 0, 0) |
| 1200 | OPTION(1, 10738 /* -vectorizer-maximize-bandwidth-for-vector-calls */, anonymous_18, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10786, 0, 0, 0, 0) |
| 1201 | OPTION(1, 10842 /* -vectorizer-maximize-bandwidth */, anonymous_17, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 10873, 0, 0, 0, 0) |
| 1202 | OPTION(1, 10982 /* -vectorizer-min-trip-count */, anonymous_49, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11009, 0, 0, 0, 0) |
| 1203 | OPTION(1, 11140 /* -view-slp-tree */, anonymous_110, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11155, 0, 0, 0, 0) |
| 1204 | OPTION(1, 11191 /* -vplan-build-outerloop-stress-test */, anonymous_50, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11226, 0, 0, 0, 0) |
| 1205 | #if !defined(NDEBUG) |
| 1206 | OPTION(1, 11401 /* -vplan-print-after-all */, anonymous_52, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11424, 0, 0, 0, 0) |
| 1207 | #endif |
| 1208 | #if !defined(NDEBUG) |
| 1209 | OPTION(1, 11469 /* -vplan-print-after */, anonymous_51, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11488, 0, 0, 0, 0) |
| 1210 | #endif |
| 1211 | #if !defined(NDEBUG) |
| 1212 | OPTION(1, 11548 /* -vplan-print-before-all */, anonymous_54, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11572, 0, 0, 0, 0) |
| 1213 | #endif |
| 1214 | #if !defined(NDEBUG) |
| 1215 | OPTION(1, 11618 /* -vplan-print-before */, anonymous_53, SeparateOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11638, 0, 0, 0, 0) |
| 1216 | #endif |
| 1217 | OPTION(1, 11699 /* -vplan-print-in-dot-format */, anonymous_114, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11726, 0, 0, 0, 0) |
| 1218 | #if !defined(NDEBUG) |
| 1219 | OPTION(1, 11783 /* -vplan-print-vector-region-scope */, anonymous_55, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11816, 0, 0, 0, 0) |
| 1220 | #endif |
| 1221 | OPTION(1, 11904 /* -vplan-verify-each */, anonymous_56, FlagOrEq, INVALID, INVALID, 0, 0, static_cast<unsigned>(DefaultVis), 0, 11923, 0, 0, 0, 0) |
| 1222 | #endif // OPTION |
| 1223 | |
| 1224 | #ifdef SIMPLE_ENUM_VALUE_TABLE |
| 1225 | |
| 1226 | struct SimpleEnumValue { |
| 1227 | const char *Name; |
| 1228 | unsigned Value; |
| 1229 | }; |
| 1230 | |
| 1231 | struct SimpleEnumValueTable { |
| 1232 | const SimpleEnumValue *Table; |
| 1233 | unsigned Size; |
| 1234 | }; |
| 1235 | static const SimpleEnumValueTable SimpleEnumValueTables[] = {}; |
| 1236 | static const unsigned SimpleEnumValueTablesSize = std::size(SimpleEnumValueTables); |
| 1237 | #endif // SIMPLE_ENUM_VALUE_TABLE |
| 1238 | |