1 //===-- ARMSubtarget.cpp - ARM Subtarget Information ------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by Evan Cheng and is distributed under the
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the ARM specific subclass of TargetSubtarget.
12 //===----------------------------------------------------------------------===//
14 #include "ARMSubtarget.h"
15 #include "ARMGenSubtarget.inc"
16 #include "llvm/Module.h"
17 #include "llvm/Support/CommandLine.h"
20 // FIXME: this is temporary.
21 static cl::opt<bool> Thumb("enable-thumb",
22 cl::desc("Switch to thumb mode in ARM backend"));
24 ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS)
27 , UseThumbBacktraces(false)
30 , TargetType(isELF) { // Default to ELF unless otherwise specified.
32 // Determine default and user specified characteristics
33 std::string CPU = "generic";
35 // Parse features string.
36 ParseSubtargetFeatures(FS, CPU);
40 // Set the boolean corresponding to the current target triple, or the default
41 // if one cannot be determined, to true.
42 const std::string& TT = M.getTargetTriple();
43 if (TT.length() > 5) {
44 if (TT.find("-darwin") != std::string::npos)
45 TargetType = isDarwin;
46 } else if (TT.empty()) {
47 #if defined(__APPLE__)
48 TargetType = isDarwin;
52 if (isTargetDarwin()) {
53 UseThumbBacktraces = true;