[docs] Fix build-docs.sh
[llvm-project.git] / llvm / unittests / CodeGen / TargetOptionsTest.cpp
blobb3d5e7522d02f8c8f5780587586d9a1ecaded447
1 #include "llvm/Target/TargetOptions.h"
2 #include "llvm/CodeGen/TargetPassConfig.h"
3 #include "llvm/IR/LLVMContext.h"
4 #include "llvm/IR/LegacyPassManager.h"
5 #include "llvm/InitializePasses.h"
6 #include "llvm/MC/TargetRegistry.h"
7 #include "llvm/Support/TargetSelect.h"
8 #include "llvm/Target/TargetMachine.h"
9 #include "gtest/gtest.h"
11 using namespace llvm;
13 namespace llvm {
14 void initializeTestPassPass(PassRegistry &);
17 namespace {
19 void initLLVM() {
20 InitializeAllTargets();
21 InitializeAllTargetMCs();
22 InitializeAllAsmPrinters();
23 InitializeAllAsmParsers();
25 PassRegistry *Registry = PassRegistry::getPassRegistry();
26 initializeCore(*Registry);
27 initializeCodeGen(*Registry);
30 /// Create a TargetMachine. We need a target that doesn't have IPRA enabled by
31 /// default. That turns out to be all targets at the moment, so just use X86.
32 std::unique_ptr<TargetMachine> createTargetMachine(bool EnableIPRA) {
33 Triple TargetTriple("x86_64--");
34 std::string Error;
35 const Target *T = TargetRegistry::lookupTarget("", TargetTriple, Error);
36 if (!T)
37 return nullptr;
39 TargetOptions Options;
40 Options.EnableIPRA = EnableIPRA;
41 return std::unique_ptr<TargetMachine>(T->createTargetMachine(
42 "X86", "", "", Options, None, None, CodeGenOpt::Aggressive));
45 typedef std::function<void(bool)> TargetOptionsTest;
47 static void targetOptionsTest(bool EnableIPRA) {
48 std::unique_ptr<TargetMachine> TM = createTargetMachine(EnableIPRA);
49 // This test is designed for the X86 backend; stop if it is not available.
50 if (!TM)
51 GTEST_SKIP();
52 legacy::PassManager PM;
53 LLVMTargetMachine *LLVMTM = static_cast<LLVMTargetMachine *>(TM.get());
55 TargetPassConfig *TPC = LLVMTM->createPassConfig(PM);
56 (void)TPC;
58 ASSERT_TRUE(TM->Options.EnableIPRA == EnableIPRA);
60 delete TPC;
63 } // End of anonymous namespace.
65 TEST(TargetOptionsTest, IPRASetToOff) {
66 targetOptionsTest(false);
69 TEST(TargetOptionsTest, IPRASetToOn) {
70 targetOptionsTest(true);
73 int main(int argc, char **argv) {
74 ::testing::InitGoogleTest(&argc, argv);
75 initLLVM();
76 return RUN_ALL_TESTS();