16449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom/*
26449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * Copyright (C) 2014 The Android Open Source Project
36449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *
46449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
56449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * you may not use this file except in compliance with the License.
66449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * You may obtain a copy of the License at
76449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *
86449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
96449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *
106449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * Unless required by applicable law or agreed to in writing, software
116449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
126449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * See the License for the specific language governing permissions and
146449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * limitations under the License.
156449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom */
166449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
176449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifndef ART_COMPILER_DRIVER_COMPILER_OPTIONS_H_
186449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#define ART_COMPILER_DRIVER_COMPILER_OPTIONS_H_
196449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
206449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstromnamespace art {
216449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
226449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstromclass CompilerOptions {
236449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom public:
246449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  enum CompilerFilter {
254a200f56b7075309316b04d550c9cc50f8314eddJeff Hao    kVerifyNone,          // Skip verification and compile nothing except JNI stubs.
264a200f56b7075309316b04d550c9cc50f8314eddJeff Hao    kInterpretOnly,       // Compile nothing except JNI stubs.
276449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    kSpace,               // Maximize space savings.
286449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    kBalanced,            // Try to get the best performance return on compilation investment.
296449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    kSpeed,               // Maximize runtime performance.
30643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin    kEverything,          // Force compilation (Note: excludes compilaton of class initializers).
316449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  };
326449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
336449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  // Guide heuristics to determine whether to compile method if profile data not available.
3439c3bfbd03d85c63cfbe69f17ce5800ccc7d6c13Dave Allison#if ART_SMALL_MODE
35c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle  static const CompilerFilter kDefaultCompilerFilter = kInterpretOnly;
3639c3bfbd03d85c63cfbe69f17ce5800ccc7d6c13Dave Allison#else
376449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  static const CompilerFilter kDefaultCompilerFilter = kSpeed;
3839c3bfbd03d85c63cfbe69f17ce5800ccc7d6c13Dave Allison#endif
396449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  static const size_t kDefaultHugeMethodThreshold = 10000;
406449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  static const size_t kDefaultLargeMethodThreshold = 600;
416449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  static const size_t kDefaultSmallMethodThreshold = 60;
426449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  static const size_t kDefaultTinyMethodThreshold = 20;
436449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  static const size_t kDefaultNumDexMethodsThreshold = 900;
44c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle  static constexpr double kDefaultTopKProfileThreshold = 90.0;
4578382fa44ee505cf16835e4d22515e7252a90864Alex Light  static const bool kDefaultIncludeDebugSymbols = kIsDebugBuild;
4653cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light  static const bool kDefaultIncludePatchInformation = false;
476449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
486449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  CompilerOptions() :
496449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    compiler_filter_(kDefaultCompilerFilter),
506449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    huge_method_threshold_(kDefaultHugeMethodThreshold),
516449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    large_method_threshold_(kDefaultLargeMethodThreshold),
526449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    small_method_threshold_(kDefaultSmallMethodThreshold),
536449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    tiny_method_threshold_(kDefaultTinyMethodThreshold),
54ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell    num_dex_methods_threshold_(kDefaultNumDexMethodsThreshold),
55c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle    generate_gdb_information_(false),
5653cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light    include_patch_information_(kDefaultIncludePatchInformation),
5778382fa44ee505cf16835e4d22515e7252a90864Alex Light    top_k_profile_threshold_(kDefaultTopKProfileThreshold),
585655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe    include_debug_symbols_(kDefaultIncludeDebugSymbols),
5969dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_null_checks_(false),
6069dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_so_checks_(false),
61643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin    implicit_suspend_checks_(false),
62643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin    compile_pic_(false)
636449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifdef ART_SEA_IR_MODE
646449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    , sea_ir_mode_(false)
656449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif
666449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    {}
676449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
686449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  CompilerOptions(CompilerFilter compiler_filter,
696449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                  size_t huge_method_threshold,
706449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                  size_t large_method_threshold,
716449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                  size_t small_method_threshold,
726449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                  size_t tiny_method_threshold,
73ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell                  size_t num_dex_methods_threshold,
74c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle                  bool generate_gdb_information,
7553cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light                  bool include_patch_information,
7678382fa44ee505cf16835e4d22515e7252a90864Alex Light                  double top_k_profile_threshold,
775655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe                  bool include_debug_symbols,
7869dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison                  bool implicit_null_checks,
7969dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison                  bool implicit_so_checks,
80643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin                  bool implicit_suspend_checks,
81643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin                  bool compile_pic
826449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifdef ART_SEA_IR_MODE
836449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                  , bool sea_ir_mode
846449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif
856449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                  ) :  // NOLINT(whitespace/parens)
866449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    compiler_filter_(compiler_filter),
876449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    huge_method_threshold_(huge_method_threshold),
886449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    large_method_threshold_(large_method_threshold),
896449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    small_method_threshold_(small_method_threshold),
906449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    tiny_method_threshold_(tiny_method_threshold),
91ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell    num_dex_methods_threshold_(num_dex_methods_threshold),
92c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle    generate_gdb_information_(generate_gdb_information),
9353cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light    include_patch_information_(include_patch_information),
9478382fa44ee505cf16835e4d22515e7252a90864Alex Light    top_k_profile_threshold_(top_k_profile_threshold),
955655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe    include_debug_symbols_(include_debug_symbols),
9669dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_null_checks_(implicit_null_checks),
9769dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_so_checks_(implicit_so_checks),
98643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin    implicit_suspend_checks_(implicit_suspend_checks),
99643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin    compile_pic_(compile_pic)
1006449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifdef ART_SEA_IR_MODE
1016449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    , sea_ir_mode_(sea_ir_mode)
1026449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif
1036449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    {}
1046449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1056449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  CompilerFilter GetCompilerFilter() const {
1066449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return compiler_filter_;
1076449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1086449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1096449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  void SetCompilerFilter(CompilerFilter compiler_filter) {
1106449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    compiler_filter_ = compiler_filter;
1116449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1126449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1134a200f56b7075309316b04d550c9cc50f8314eddJeff Hao  bool IsCompilationEnabled() const {
1144a200f56b7075309316b04d550c9cc50f8314eddJeff Hao    return ((compiler_filter_ != CompilerOptions::kVerifyNone) &&
1154a200f56b7075309316b04d550c9cc50f8314eddJeff Hao            (compiler_filter_ != CompilerOptions::kInterpretOnly));
1164a200f56b7075309316b04d550c9cc50f8314eddJeff Hao  }
1174a200f56b7075309316b04d550c9cc50f8314eddJeff Hao
1184a200f56b7075309316b04d550c9cc50f8314eddJeff Hao  bool IsVerificationEnabled() const {
1194a200f56b7075309316b04d550c9cc50f8314eddJeff Hao    return (compiler_filter_ != CompilerOptions::kVerifyNone);
1204a200f56b7075309316b04d550c9cc50f8314eddJeff Hao  }
1214a200f56b7075309316b04d550c9cc50f8314eddJeff Hao
1226449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t GetHugeMethodThreshold() const {
1236449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return huge_method_threshold_;
1246449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1256449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1266449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t GetLargeMethodThreshold() const {
1276449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return large_method_threshold_;
1286449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1296449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1306449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t GetSmallMethodThreshold() const {
1316449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return small_method_threshold_;
1326449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1336449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1346449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t GetTinyMethodThreshold() const {
1356449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return tiny_method_threshold_;
1366449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1376449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1386449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  bool IsHugeMethod(size_t num_dalvik_instructions) const {
1396449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return num_dalvik_instructions > huge_method_threshold_;
1406449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1416449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1426449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  bool IsLargeMethod(size_t num_dalvik_instructions) const {
1436449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return num_dalvik_instructions > large_method_threshold_;
1446449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1456449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1466449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  bool IsSmallMethod(size_t num_dalvik_instructions) const {
1476449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return num_dalvik_instructions > small_method_threshold_;
1486449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1496449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1506449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  bool IsTinyMethod(size_t num_dalvik_instructions) const {
1516449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return num_dalvik_instructions > tiny_method_threshold_;
1526449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1536449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
1546449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t GetNumDexMethodsThreshold() const {
1556449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    return num_dex_methods_threshold_;
1566449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  }
1576449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
158c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle  double GetTopKProfileThreshold() const {
159c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle    return top_k_profile_threshold_;
160c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle  }
161c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle
16278382fa44ee505cf16835e4d22515e7252a90864Alex Light  bool GetIncludeDebugSymbols() const {
16378382fa44ee505cf16835e4d22515e7252a90864Alex Light    return include_debug_symbols_;
16478382fa44ee505cf16835e4d22515e7252a90864Alex Light  }
16578382fa44ee505cf16835e4d22515e7252a90864Alex Light
16669dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  bool GetImplicitNullChecks() const {
16769dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    return implicit_null_checks_;
1685655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe  }
1695655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe
17069dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  void SetImplicitNullChecks(bool new_val) {
17169dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_null_checks_ = new_val;
1725655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe  }
1735655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe
17469dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  bool GetImplicitStackOverflowChecks() const {
17569dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    return implicit_so_checks_;
1765655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe  }
1775655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe
17869dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  void SetImplicitStackOverflowChecks(bool new_val) {
17969dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_so_checks_ = new_val;
1805655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe  }
1815655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe
18269dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  bool GetImplicitSuspendChecks() const {
18369dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    return implicit_suspend_checks_;
1845655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe  }
1855655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe
18669dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  void SetImplicitSuspendChecks(bool new_val) {
18769dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison    implicit_suspend_checks_ = new_val;
1885655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe  }
1895655e84e8d71697d8ef3ea901a0b853af42c559eAndreas Gampe
1906449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifdef ART_SEA_IR_MODE
1916449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  bool GetSeaIrMode();
1926449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif
1936449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
194ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell  bool GetGenerateGDBInformation() const {
195ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell    return generate_gdb_information_;
196ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell  }
197ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell
19853cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light  bool GetIncludePatchInformation() const {
19953cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light    return include_patch_information_;
20053cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light  }
20153cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light
202643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin  // Should the code be compiled as position independent?
203643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin  bool GetCompilePic() const {
204643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin    return compile_pic_;
205643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin  }
206643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin
2076449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom private:
2086449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  CompilerFilter compiler_filter_;
2096449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t huge_method_threshold_;
2106449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t large_method_threshold_;
2116449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t small_method_threshold_;
2126449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t tiny_method_threshold_;
2136449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  size_t num_dex_methods_threshold_;
214ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4Mark Mendell  bool generate_gdb_information_;
21553cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3cAlex Light  bool include_patch_information_;
216c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle  // When using a profile file only the top K% of the profiled samples will be compiled.
217c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6Calin Juravle  double top_k_profile_threshold_;
21878382fa44ee505cf16835e4d22515e7252a90864Alex Light  bool include_debug_symbols_;
21969dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  bool implicit_null_checks_;
22069dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  bool implicit_so_checks_;
22169dfe51b684dd9d510dbcb63295fe180f998efdeDave Allison  bool implicit_suspend_checks_;
222643b5df2b065ccf5bb19a183573da691e9d0311fIgor Murashkin  bool compile_pic_;
2236449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifdef ART_SEA_IR_MODE
2246449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  bool sea_ir_mode_;
2256449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif
2266449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom};
2276449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
2286449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom}  // namespace art
2296449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
2306449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif  // ART_COMPILER_DRIVER_COMPILER_OPTIONS_H_
231