[ARM] Introduce subtarget features per ARM architecture.
[oota-llvm.git] / include / llvm / MC / MCCodeGenInfo.h
index 908922a253a2fe67a323bd5e70f8e35c7c4396a2..0a4744f1d0f7d3d8ab1cc6aa71fa28fe5674aa6e 100644 (file)
 #ifndef LLVM_MC_MCCODEGENINFO_H
 #define LLVM_MC_MCCODEGENINFO_H
 
+#include "llvm/Support/CodeGen.h"
+
 namespace llvm {
-  // Relocation model types.
-  namespace Reloc {
-    enum Model { Default, Static, PIC_, DynamicNoPIC };
-  }
 
-  class MCCodeGenInfo {
-    /// RelocationModel - Relocation model: statcic, pic, etc.
-    ///
-    Reloc::Model RelocationModel;
+class MCCodeGenInfo {
+  /// RelocationModel - Relocation model: static, pic, etc.
+  ///
+  Reloc::Model RelocationModel;
+
+  /// CMModel - Code model.
+  ///
+  CodeModel::Model CMModel;
+
+  /// OptLevel - Optimization level.
+  ///
+  CodeGenOpt::Level OptLevel;
+
+public:
+  void initMCCodeGenInfo(Reloc::Model RM = Reloc::Default,
+                         CodeModel::Model CM = CodeModel::Default,
+                         CodeGenOpt::Level OL = CodeGenOpt::Default);
+
+  Reloc::Model getRelocationModel() const { return RelocationModel; }
+
+  CodeModel::Model getCodeModel() const { return CMModel; }
 
-  public:
-    void InitMCCodeGenInfo(Reloc::Model RM = Reloc::Default);
+  CodeGenOpt::Level getOptLevel() const { return OptLevel; }
 
-    Reloc::Model getRelocationModel() const { return RelocationModel; }
-  };
+  // Allow overriding OptLevel on a per-function basis.
+  void setOptLevel(CodeGenOpt::Level Level) { OptLevel = Level; }
+};
 } // namespace llvm
 
 #endif