Index: llvm/trunk/include/llvm/Target/TargetMachine.h =================================================================== --- llvm/trunk/include/llvm/Target/TargetMachine.h +++ llvm/trunk/include/llvm/Target/TargetMachine.h @@ -354,6 +354,23 @@ } }; +/// Helper method for getting the code model, returning Default if +/// CM does not have a value. The tiny and kernel models will produce +/// an error, so targets that support them or require more complex codemodel +/// selection logic should implement and call their own getEffectiveCodeModel. +inline CodeModel::Model getEffectiveCodeModel(Optional CM, + CodeModel::Model Default) { + if (CM) { + // By default, targets do not support the tiny and kernel models. + if (*CM == CodeModel::Tiny) + report_fatal_error("Target does not support the tiny CodeModel"); + if (*CM == CodeModel::Kernel) + report_fatal_error("Target does not support the kernel CodeModel"); + return *CM; + } + return Default; +} + } // end namespace llvm #endif // LLVM_TARGET_TARGETMACHINE_H Index: llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp +++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp @@ -219,9 +219,9 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(const Triple &TT, - Optional CM, - bool JIT) { +static CodeModel::Model +getEffectiveAArch64CodeModel(const Triple &TT, Optional CM, + bool JIT) { if (CM) { if (*CM != CodeModel::Small && *CM != CodeModel::Tiny && *CM != CodeModel::Large) { @@ -255,7 +255,7 @@ : LLVMTargetMachine(T, computeDataLayout(TT, Options.MCOptions, LittleEndian), TT, CPU, FS, Options, getEffectiveRelocModel(TT, RM), - getEffectiveCodeModel(TT, CM, JIT), OL), + getEffectiveAArch64CodeModel(TT, CM, JIT), OL), TLOF(createTLOF(getTargetTriple())), isLittle(LittleEndian) { initAsmInfo(); Index: llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -310,12 +310,6 @@ return Reloc::PIC_; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - AMDGPUTargetMachine::AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, TargetOptions Options, @@ -324,7 +318,7 @@ CodeGenOpt::Level OptLevel) : LLVMTargetMachine(T, computeDataLayout(TT), TT, getGPUOrDefault(TT, CPU), FS, Options, getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM), OptLevel), + getEffectiveCodeModel(CM, CodeModel::Small), OptLevel), TLOF(createTLOF(getTargetTriple())) { initAsmInfo(); } Index: llvm/trunk/lib/Target/ARC/ARCTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/ARC/ARCTargetMachine.cpp +++ llvm/trunk/lib/Target/ARC/ARCTargetMachine.cpp @@ -26,12 +26,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - /// ARCTargetMachine ctor - Create an ILP32 architecture model ARCTargetMachine::ARCTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, @@ -43,7 +37,7 @@ "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-" "f32:32:32-i64:32-f64:32-a:0:32-n32", TT, CPU, FS, Options, getRelocModel(RM), - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TLOF(make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp @@ -194,12 +194,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - /// Create an ARM architecture model. /// ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T, const Triple &TT, @@ -210,7 +204,7 @@ CodeGenOpt::Level OL, bool isLittle) : LLVMTargetMachine(T, computeDataLayout(TT, CPU, Options, isLittle), TT, CPU, FS, Options, getEffectiveRelocModel(TT, RM), - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TargetABI(computeTargetABI(TT, CPU, Options)), TLOF(createTLOF(getTargetTriple())), isLittle(isLittle) { Index: llvm/trunk/lib/Target/AVR/AVRTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/AVR/AVRTargetMachine.cpp +++ llvm/trunk/lib/Target/AVR/AVRTargetMachine.cpp @@ -40,12 +40,6 @@ return RM.hasValue() ? *RM : Reloc::Static; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - AVRTargetMachine::AVRTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, @@ -53,8 +47,8 @@ Optional CM, CodeGenOpt::Level OL, bool JIT) : LLVMTargetMachine(T, AVRDataLayout, TT, getCPU(CPU), FS, Options, - getEffectiveRelocModel(RM), getEffectiveCodeModel(CM), - OL), + getEffectiveRelocModel(RM), + getEffectiveCodeModel(CM, CodeModel::Small), OL), SubTarget(TT, getCPU(CPU), FS, *this) { this->TLOF = make_unique(); initAsmInfo(); Index: llvm/trunk/lib/Target/BPF/BPFTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/BPF/BPFTargetMachine.cpp +++ llvm/trunk/lib/Target/BPF/BPFTargetMachine.cpp @@ -51,12 +51,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - BPFTargetMachine::BPFTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, @@ -64,8 +58,8 @@ Optional CM, CodeGenOpt::Level OL, bool JIT) : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, - getEffectiveRelocModel(RM), getEffectiveCodeModel(CM), - OL), + getEffectiveRelocModel(RM), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TLOF(make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp +++ llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp @@ -180,12 +180,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - extern "C" void LLVMInitializeHexagonTarget() { // Register the target. RegisterTargetMachine X(getTheHexagonTarget()); @@ -222,7 +216,8 @@ "i64:64:64-i32:32:32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-" "v32:32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048:2048:2048", TT, CPU, FS, Options, getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM), (HexagonNoOpt ? CodeGenOpt::None : OL)), + getEffectiveCodeModel(CM, CodeModel::Small), + (HexagonNoOpt ? CodeGenOpt::None : OL)), TLOF(make_unique()) { initializeHexagonExpandCondsetsPass(*PassRegistry::getPassRegistry()); initAsmInfo(); Index: llvm/trunk/lib/Target/Lanai/LanaiTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/Lanai/LanaiTargetMachine.cpp +++ llvm/trunk/lib/Target/Lanai/LanaiTargetMachine.cpp @@ -53,12 +53,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Medium; -} - LanaiTargetMachine::LanaiTargetMachine(const Target &T, const Triple &TT, StringRef Cpu, StringRef FeatureString, const TargetOptions &Options, @@ -67,7 +61,8 @@ CodeGenOpt::Level OptLevel, bool JIT) : LLVMTargetMachine(T, computeDataLayout(), TT, Cpu, FeatureString, Options, getEffectiveRelocModel(RM), - getEffectiveCodeModel(CodeModel), OptLevel), + getEffectiveCodeModel(CodeModel, CodeModel::Medium), + OptLevel), Subtarget(TT, Cpu, FeatureString, *this, Options, getCodeModel(), OptLevel), TLOF(new LanaiTargetObjectFile()) { Index: llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp +++ llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp @@ -32,12 +32,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - static std::string computeDataLayout(const Triple &TT, StringRef CPU, const TargetOptions &Options) { return "e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16"; @@ -51,7 +45,7 @@ CodeGenOpt::Level OL, bool JIT) : LLVMTargetMachine(T, computeDataLayout(TT, CPU, Options), TT, CPU, FS, Options, getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TLOF(make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp +++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp @@ -101,12 +101,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - // On function prologue, the stack is created by decrementing // its pointer. Once decremented, all references are done with positive // offset from the stack/frame pointer, using StackGrowsUp enables @@ -121,7 +115,7 @@ bool isLittle) : LLVMTargetMachine(T, computeDataLayout(TT, CPU, Options, isLittle), TT, CPU, FS, Options, getEffectiveRelocModel(JIT, RM), - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), isLittle(isLittle), TLOF(llvm::make_unique()), ABI(MipsABIInfo::computeTargetABI(TT, CPU, Options.MCOptions)), Subtarget(nullptr), DefaultSubtarget(TT, CPU, FS, isLittle, *this, Index: llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -102,12 +102,6 @@ return Ret; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - NVPTXTargetMachine::NVPTXTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, @@ -118,7 +112,7 @@ // specified, as it is the only relocation model currently supported. : LLVMTargetMachine(T, computeDataLayout(is64bit, UseShortPointersOpt), TT, CPU, FS, Options, Reloc::PIC_, - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), is64bit(is64bit), UseShortPointers(UseShortPointersOpt), TLOF(llvm::make_unique()), Subtarget(TT, CPU, FS, *this) { Index: llvm/trunk/lib/Target/Nios2/Nios2TargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/Nios2/Nios2TargetMachine.cpp +++ llvm/trunk/lib/Target/Nios2/Nios2TargetMachine.cpp @@ -37,23 +37,15 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM, - Reloc::Model RM, bool JIT) { - if (CM) - return *CM; - return CodeModel::Small; -} - Nios2TargetMachine::Nios2TargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Optional RM, Optional CM, CodeGenOpt::Level OL, bool JIT) - : LLVMTargetMachine( - T, computeDataLayout(), TT, CPU, FS, Options, - getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM, getEffectiveRelocModel(RM), JIT), OL), + : LLVMTargetMachine(T, computeDataLayout(), TT, CPU, FS, Options, + getEffectiveRelocModel(RM), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TLOF(make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp +++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -222,11 +222,16 @@ return Reloc::Static; } -static CodeModel::Model getEffectiveCodeModel(const Triple &TT, - Optional CM, - bool JIT) { - if (CM) +static CodeModel::Model getEffectivePPCCodeModel(const Triple &TT, + Optional CM, + bool JIT) { + if (CM) { + if (*CM == CodeModel::Tiny) + report_fatal_error("Target does not support the tiny CodeModel"); + if (*CM == CodeModel::Kernel) + report_fatal_error("Target does not support the kernel CodeModel"); return *CM; + } if (!TT.isOSDarwin() && !JIT && (TT.getArch() == Triple::ppc64 || TT.getArch() == Triple::ppc64le)) return CodeModel::Medium; @@ -246,7 +251,7 @@ : LLVMTargetMachine(T, getDataLayoutString(TT), TT, CPU, computeFSAdditions(FS, OL, TT), Options, getEffectiveRelocModel(TT, RM), - getEffectiveCodeModel(TT, CM, JIT), OL), + getEffectivePPCCodeModel(TT, CM, JIT), OL), TLOF(createTLOF(getTargetTriple())), TargetABI(computeTargetABI(TT, Options)) { initAsmInfo(); Index: llvm/trunk/lib/Target/RISCV/RISCVTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/RISCV/RISCVTargetMachine.cpp +++ llvm/trunk/lib/Target/RISCV/RISCVTargetMachine.cpp @@ -47,12 +47,6 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { - if (CM) - return *CM; - return CodeModel::Small; -} - RISCVTargetMachine::RISCVTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, @@ -61,7 +55,7 @@ CodeGenOpt::Level OL, bool JIT) : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, getEffectiveRelocModel(TT, RM), - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TLOF(make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp +++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp @@ -70,11 +70,16 @@ // pic32 PIC_ Medium GOT < 2^32 bytes // // All code models require that the text segment is smaller than 2GB. -static CodeModel::Model getEffectiveCodeModel(Optional CM, - Reloc::Model RM, bool Is64Bit, - bool JIT) { - if (CM) +static CodeModel::Model +getEffectiveSparcCodeModel(Optional CM, Reloc::Model RM, + bool Is64Bit, bool JIT) { + if (CM) { + if (*CM == CodeModel::Tiny) + report_fatal_error("Target does not support the tiny CodeModel"); + if (*CM == CodeModel::Kernel) + report_fatal_error("Target does not support the kernel CodeModel"); return *CM; + } if (Is64Bit) { if (JIT) return CodeModel::Large; @@ -88,11 +93,11 @@ const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Optional RM, Optional CM, CodeGenOpt::Level OL, bool JIT, bool is64bit) - : LLVMTargetMachine( - T, computeDataLayout(TT, is64bit), TT, CPU, FS, Options, - getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM, getEffectiveRelocModel(RM), is64bit, JIT), - OL), + : LLVMTargetMachine(T, computeDataLayout(TT, is64bit), TT, CPU, FS, Options, + getEffectiveRelocModel(RM), + getEffectiveSparcCodeModel( + CM, getEffectiveRelocModel(RM), is64bit, JIT), + OL), TLOF(make_unique()), Subtarget(TT, CPU, FS, *this, is64bit), is64Bit(is64bit) { initAsmInfo(); Index: llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp +++ llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp @@ -128,10 +128,16 @@ // in range of LARL. However, the JIT environment has no equivalent // of copy relocs, so locally-binding data symbols might not be in // the range of LARL. We need the Medium model in that case. -static CodeModel::Model getEffectiveCodeModel(Optional CM, - Reloc::Model RM, bool JIT) { - if (CM) +static CodeModel::Model +getEffectiveSystemZCodeModel(Optional CM, Reloc::Model RM, + bool JIT) { + if (CM) { + if (*CM == CodeModel::Tiny) + report_fatal_error("Target does not support the tiny CodeModel"); + if (*CM == CodeModel::Kernel) + report_fatal_error("Target does not support the kernel CodeModel"); return *CM; + } if (JIT) return RM == Reloc::PIC_ ? CodeModel::Small : CodeModel::Medium; return CodeModel::Small; @@ -146,7 +152,8 @@ : LLVMTargetMachine( T, computeDataLayout(TT, CPU, FS), TT, CPU, FS, Options, getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM, getEffectiveRelocModel(RM), JIT), OL), + getEffectiveSystemZCodeModel(CM, getEffectiveRelocModel(RM), JIT), + OL), TLOF(llvm::make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -101,7 +101,7 @@ TT.isArch64Bit() ? "e-m:e-p:64:64-i64:64-n32:64-S128" : "e-m:e-p:32:32-i64:64-n32:64-S128", TT, CPU, FS, Options, getEffectiveRelocModel(RM), - CM ? *CM : CodeModel::Large, OL), + getEffectiveCodeModel(CM, CodeModel::Large), OL), TLOF(new WebAssemblyTargetObjectFile()) { // WebAssembly type-checks instructions, but a noreturn function with a return // type that doesn't match the context will cause a check failure. So we lower Index: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp @@ -189,10 +189,13 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM, - bool JIT, bool Is64Bit) { - if (CM) +static CodeModel::Model getEffectiveX86CodeModel(Optional CM, + bool JIT, bool Is64Bit) { + if (CM) { + if (*CM == CodeModel::Tiny) + report_fatal_error("Target does not support the tiny CodeModel"); return *CM; + } if (JIT) return Is64Bit ? CodeModel::Large : CodeModel::Small; return CodeModel::Small; @@ -209,7 +212,8 @@ : LLVMTargetMachine( T, computeDataLayout(TT), TT, CPU, FS, Options, getEffectiveRelocModel(TT, JIT, RM), - getEffectiveCodeModel(CM, JIT, TT.getArch() == Triple::x86_64), OL), + getEffectiveX86CodeModel(CM, JIT, TT.getArch() == Triple::x86_64), + OL), TLOF(createTLOF(getTargetTriple())) { // Windows stack unwinder gets confused when execution flow "falls through" // after a call to 'noreturn' function. Index: llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp +++ llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp @@ -31,7 +31,8 @@ return *RM; } -static CodeModel::Model getEffectiveCodeModel(Optional CM) { +static CodeModel::Model +getEffectiveXCoreCodeModel(Optional CM) { if (CM) { if (*CM != CodeModel::Small && *CM != CodeModel::Large) report_fatal_error("Target only supports CodeModel Small or Large"); @@ -51,7 +52,7 @@ : LLVMTargetMachine( T, "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32-f64:32-a:0:32-n32", TT, CPU, FS, Options, getEffectiveRelocModel(RM), - getEffectiveCodeModel(CM), OL), + getEffectiveXCoreCodeModel(CM), OL), TLOF(llvm::make_unique()), Subtarget(TT, CPU, FS, *this) { initAsmInfo(); Index: llvm/trunk/test/CodeGen/ARM/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/ARM/codemodel.ll +++ llvm/trunk/test/CodeGen/ARM/codemodel.ll @@ -0,0 +1,9 @@ +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=TINY +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=kernel < %s 2>&1 | FileCheck %s --check-prefix=KERNEL + +; TINY: Target does not support the tiny CodeModel +; KERNEL: Target does not support the kernel CodeModel + +define void @foo() { + ret void +} Index: llvm/trunk/test/CodeGen/Lanai/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/Lanai/codemodel.ll +++ llvm/trunk/test/CodeGen/Lanai/codemodel.ll @@ -1,5 +1,10 @@ ; RUN: llc -march=lanai < %s | FileCheck %s ; RUN: llc -march=lanai < %s -code-model=small | FileCheck -check-prefix CHECK-SMALL %s +; RUN: not llc -march=lanai < %s -code-model=tiny 2>&1 | FileCheck -check-prefix CHECK-TINY %s +; RUN: not llc -march=lanai < %s -code-model=kernel 2>&1 | FileCheck -check-prefix CHECK-KERNEL %s + +; CHECK-TINY: Target does not support the tiny CodeModel +; CHECK-KERNEL: Target does not support the kernel CodeModel @data = external global [0 x i32] ; <[0 x i32]*> [#uses=5] Index: llvm/trunk/test/CodeGen/PowerPC/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/codemodel.ll +++ llvm/trunk/test/CodeGen/PowerPC/codemodel.ll @@ -0,0 +1,9 @@ +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=TINY +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=kernel < %s 2>&1 | FileCheck %s --check-prefix=KERNEL + +; TINY: Target does not support the tiny CodeModel +; KERNEL: Target does not support the kernel CodeModel + +define void @foo() { + ret void +} Index: llvm/trunk/test/CodeGen/SPARC/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/SPARC/codemodel.ll +++ llvm/trunk/test/CodeGen/SPARC/codemodel.ll @@ -0,0 +1,9 @@ +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=TINY +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=kernel < %s 2>&1 | FileCheck %s --check-prefix=KERNEL + +; TINY: Target does not support the tiny CodeModel +; KERNEL: Target does not support the kernel CodeModel + +define void @foo() { + ret void +} Index: llvm/trunk/test/CodeGen/SystemZ/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/SystemZ/codemodel.ll +++ llvm/trunk/test/CodeGen/SystemZ/codemodel.ll @@ -0,0 +1,9 @@ +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=TINY +; RUN: not llc -verify-machineinstrs -o - -mtriple=arm-none-eabi -code-model=kernel < %s 2>&1 | FileCheck %s --check-prefix=KERNEL + +; TINY: Target does not support the tiny CodeModel +; KERNEL: Target does not support the kernel CodeModel + +define void @foo() { + ret void +} Index: llvm/trunk/test/CodeGen/X86/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/X86/codemodel.ll +++ llvm/trunk/test/CodeGen/X86/codemodel.ll @@ -1,10 +1,13 @@ ; RUN: llc < %s -code-model=small | FileCheck -check-prefix CHECK-SMALL %s ; RUN: llc < %s -code-model=kernel | FileCheck -check-prefix CHECK-KERNEL %s +; RUN: not llc < %s -code-model=tiny 2>&1 | FileCheck -check-prefix CHECK-TINY %s target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" target triple = "x86_64-unknown-linux-gnu" @data = external global [0 x i32] ; <[0 x i32]*> [#uses=5] +; CHECK-TINY: Target does not support the tiny CodeModel + define i32 @foo() nounwind readonly { entry: ; CHECK-SMALL-LABEL: foo: Index: llvm/trunk/test/CodeGen/XCore/codemodel.ll =================================================================== --- llvm/trunk/test/CodeGen/XCore/codemodel.ll +++ llvm/trunk/test/CodeGen/XCore/codemodel.ll @@ -1,6 +1,7 @@ ; RUN: not llc < %s -march=xcore -code-model=medium 2>&1 | FileCheck %s -check-prefix=BAD_CM ; RUN: not llc < %s -march=xcore -code-model=kernel 2>&1 | FileCheck %s -check-prefix=BAD_CM +; RUN: not llc < %s -march=xcore -code-model=tiny 2>&1 | FileCheck %s -check-prefix=BAD_CM ; BAD_CM: Target only supports CodeModel Small or Large