xref: /llvm-project/llvm/unittests/Target/PowerPC/AIXRelocModelTest.cpp (revision 0a1aa6cda2758b0926a95f87d39ffefb1cb90200)
189b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h"
2bed7626fSstevewan #include "llvm/Support/TargetSelect.h"
3bed7626fSstevewan #include "llvm/Target/TargetMachine.h"
462c7f035SArchibald Elliott #include "llvm/TargetParser/Triple.h"
5bed7626fSstevewan #include "gtest/gtest.h"
6bed7626fSstevewan 
7bed7626fSstevewan using namespace llvm;
8bed7626fSstevewan 
9bed7626fSstevewan namespace {
10bed7626fSstevewan 
11bed7626fSstevewan class AIXRelocModelTest : public ::testing::Test {
12bed7626fSstevewan protected:
SetUpTestCase()13bed7626fSstevewan   static void SetUpTestCase() {
14bed7626fSstevewan     LLVMInitializePowerPCTargetInfo();
15bed7626fSstevewan     LLVMInitializePowerPCTarget();
16bed7626fSstevewan     LLVMInitializePowerPCTargetMC();
17bed7626fSstevewan   }
18bed7626fSstevewan };
19bed7626fSstevewan 
TEST_F(AIXRelocModelTest,DefalutToPIC)20bed7626fSstevewan TEST_F(AIXRelocModelTest, DefalutToPIC) {
21bed7626fSstevewan   Triple TheTriple(/*ArchStr*/ "powerpc", /*VendorStr*/ "", /*OSStr*/ "aix");
22bed7626fSstevewan   std::string Error;
23bed7626fSstevewan   const Target *TheTarget = TargetRegistry::lookupTarget("", TheTriple, Error);
24bed7626fSstevewan   ASSERT_TRUE(TheTarget) << Error;
25bed7626fSstevewan 
26bed7626fSstevewan   TargetOptions Options;
27bed7626fSstevewan   // Create a TargetMachine for powerpc--aix target, and deliberately leave its
28bed7626fSstevewan   // relocation model unset.
29bed7626fSstevewan   std::unique_ptr<TargetMachine> Target(TheTarget->createTargetMachine(
30bed7626fSstevewan       /*TT*/ TheTriple.getTriple(), /*CPU*/ "", /*Features*/ "",
31b6a01caaSKazu Hirata       /*Options*/ Options, /*RM*/ std::nullopt, /*CM*/ std::nullopt,
32*0a1aa6cdSArthur Eubanks       /*OL*/ CodeGenOptLevel::Default));
33bed7626fSstevewan   ASSERT_TRUE(Target) << "Could not allocate target machine!";
34bed7626fSstevewan 
35bed7626fSstevewan   // The relocation model on AIX should be forced to PIC regardless.
36bed7626fSstevewan   EXPECT_TRUE(Target->getRelocationModel() == Reloc::PIC_);
37bed7626fSstevewan }
38bed7626fSstevewan 
39bed7626fSstevewan } // end of anonymous namespace
40