summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/CodeGen/TargetOptionsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/CodeGen/TargetOptionsTest.cpp')
-rw-r--r--llvm/unittests/CodeGen/TargetOptionsTest.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/llvm/unittests/CodeGen/TargetOptionsTest.cpp b/llvm/unittests/CodeGen/TargetOptionsTest.cpp
new file mode 100644
index 00000000000..93538c06306
--- /dev/null
+++ b/llvm/unittests/CodeGen/TargetOptionsTest.cpp
@@ -0,0 +1,74 @@
+#include "llvm/Target/TargetOptions.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/LegacyPassManager.h"
+#include "llvm/Support/TargetRegistry.h"
+#include "llvm/Support/TargetSelect.h"
+#include "llvm/Target/TargetMachine.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace llvm {
+ void initializeTestPassPass(PassRegistry &);
+}
+
+namespace {
+
+void initLLVM() {
+ InitializeAllTargets();
+ InitializeAllTargetMCs();
+ InitializeAllAsmPrinters();
+ InitializeAllAsmParsers();
+
+ PassRegistry *Registry = PassRegistry::getPassRegistry();
+ initializeCore(*Registry);
+ initializeCodeGen(*Registry);
+}
+
+/// Create a TargetMachine. We need a target that doesn't have IPRA enabled by
+/// default. That turns out to be all targets at the moment, so just use X86.
+std::unique_ptr<TargetMachine> createTargetMachine(bool EnableIPRA) {
+ Triple TargetTriple("x86_64--");
+ std::string Error;
+ const Target *T = TargetRegistry::lookupTarget("", TargetTriple, Error);
+ if (!T)
+ return nullptr;
+
+ TargetOptions Options;
+ Options.EnableIPRA = EnableIPRA;
+ return std::unique_ptr<TargetMachine>(T->createTargetMachine(
+ "X86", "", "", Options, None, None, CodeGenOpt::Aggressive));
+}
+
+typedef std::function<void(bool)> TargetOptionsTest;
+
+static void targetOptionsTest(bool EnableIPRA) {
+ LLVMContext Context;
+ std::unique_ptr<TargetMachine> TM = createTargetMachine(EnableIPRA);
+ // This test is designed for the X86 backend; stop if it is not available.
+ if (!TM)
+ return;
+ legacy::PassManager PM;
+ LLVMTargetMachine &LLVMTM = static_cast<LLVMTargetMachine &>(*TM);
+
+ TargetPassConfig &TPC = *LLVMTM.createPassConfig(PM);
+ (void)TPC;
+
+ ASSERT_TRUE(TM->Options.EnableIPRA == EnableIPRA);
+}
+
+} // End of anonymous namespace.
+
+TEST(TargetOptionsTest, IPRASetToOff) {
+ targetOptionsTest(false);
+}
+
+TEST(TargetOptionsTest, IPRASetToOn) {
+ targetOptionsTest(true);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ initLLVM();
+ return RUN_ALL_TESTS();
+}
OpenPOWER on IntegriCloud