- TargetMachine* (*TargetMachineAllocator)(const Module&,
- IntrinsicLowering *) = 0;
- switch (Arch) {
- case x86:
- TargetMachineAllocator = allocateX86TargetMachine;
- break;
- 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 ->
- // SPARCV9) is kind of gross, but it will work until we have more
- // sophisticated target information to work from.
- 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;
- } else {
- // If the module is target independent, favor a target which matches the
- // current build system.
-#if defined(i386) || defined(__i386__) || defined(__x86__)
- 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";