summaryrefslogtreecommitdiff
path: root/tools/llc
diff options
context:
space:
mode:
authorBrian Gaeke <gaeke@uiuc.edu>2004-02-02 19:06:12 +0000
committerBrian Gaeke <gaeke@uiuc.edu>2004-02-02 19:06:12 +0000
commit2217bdbf688d9982842b756babed608e1f3bbe1f (patch)
tree459a7cf6fd7eed3be3887f6eb4e005e09ebfeb11 /tools/llc
parent7ca255b76c39ca2dbe619b48b3b88f67db11e683 (diff)
downloadllvm-2217bdbf688d9982842b756babed608e1f3bbe1f.tar.gz
llvm-2217bdbf688d9982842b756babed608e1f3bbe1f.tar.bz2
llvm-2217bdbf688d9982842b756babed608e1f3bbe1f.tar.xz
Add a -march=powerpc option. Automatically select it if this looks like a
big-endian, 32-bit module, or if __ppc__, __POWERPC__, or __APPLE__ are defined. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11075 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llc')
-rw-r--r--tools/llc/llc.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index eae891bf1f..2ce1e54276 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -37,12 +37,13 @@ OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename"));
static cl::opt<bool> Force("f", cl::desc("Overwrite output files"));
-enum ArchName { noarch, x86, Sparc };
+enum ArchName { noarch, x86, Sparc, PowerPC };
static cl::opt<ArchName>
Arch("march", cl::desc("Architecture to generate assembly for:"), cl::Prefix,
cl::values(clEnumVal(x86, " IA-32 (Pentium and above)"),
clEnumValN(Sparc, "sparc", " SPARC V9"),
+ clEnumValN(PowerPC, "powerpc", " PowerPC"),
0),
cl::init(noarch));
@@ -87,6 +88,9 @@ int main(int argc, char **argv) {
case Sparc:
TargetMachineAllocator = allocateSparcTargetMachine;
break;
+ case PowerPC:
+ TargetMachineAllocator = allocatePowerPCTargetMachine;
+ break;
default:
// Decide what the default target machine should be, by looking at
// the module. This heuristic (ILP32, LE -> IA32; LP64, BE ->
@@ -95,6 +99,9 @@ int main(int argc, char **argv) {
if (mod.getEndianness() == Module::LittleEndian &&
mod.getPointerSize() == Module::Pointer32) {
TargetMachineAllocator = allocateX86TargetMachine;
+ } else if (mod.getEndianness() == Module::BigEndian &&
+ mod.getPointerSize() == Module::Pointer32) {
+ TargetMachineAllocator = allocatePowerPCTargetMachine;
} else if (mod.getEndianness() == Module::BigEndian &&
mod.getPointerSize() == Module::Pointer64) {
TargetMachineAllocator = allocateSparcTargetMachine;
@@ -105,6 +112,8 @@ int main(int argc, char **argv) {
TargetMachineAllocator = allocateX86TargetMachine;
#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9)
TargetMachineAllocator = allocateSparcTargetMachine;
+#elif defined(__POWERPC__) || defined(__ppc__) || defined(__APPLE__)
+ TargetMachineAllocator = allocatePowerPCTargetMachine;
#else
std::cerr << argv[0] << ": module does not specify a target to use. "
<< "You must use the -march option.\n";