xref: /llvm-project/flang/unittests/Optimizer/FIRContextTest.cpp (revision f1d3fe7aae7867b5de96b84d6d26b5c9f02f209a)
1c68d2895SEric Schweitz //===- FIRContextTest.cpp -------------------------------------------------===//
2c68d2895SEric Schweitz //
3c68d2895SEric Schweitz // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c68d2895SEric Schweitz // See https://llvm.org/LICENSE.txt for license information.
5c68d2895SEric Schweitz // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c68d2895SEric Schweitz //
7c68d2895SEric Schweitz //===----------------------------------------------------------------------===//
8c68d2895SEric Schweitz 
9b07ef9e7SRenaud-K #include "flang/Optimizer/Dialect/Support/FIRContext.h"
1074d5c3c0SPeter Steinfeld #include "gtest/gtest.h"
11837bff11SSergio Afonso #include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
12837bff11SSergio Afonso #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
13c68d2895SEric Schweitz #include "mlir/IR/BuiltinAttributes.h"
14c68d2895SEric Schweitz #include "mlir/IR/BuiltinOps.h"
15b07ef9e7SRenaud-K #include "flang/Optimizer/Dialect/Support/KindMapping.h"
16d768bf99SArchibald Elliott #include "llvm/TargetParser/Host.h"
17c68d2895SEric Schweitz #include <string>
18c68d2895SEric Schweitz 
19c68d2895SEric Schweitz using namespace fir;
20c68d2895SEric Schweitz 
21c68d2895SEric Schweitz struct StringAttributesTests : public testing::Test {
22c68d2895SEric Schweitz public:
23c68d2895SEric Schweitz   void SetUp() {
24837bff11SSergio Afonso     context.loadDialect<mlir::LLVM::LLVMDialect>();
25c68d2895SEric Schweitz     kindMap = new KindMapping(&context, kindMapInit, "r42a10c14d28i40l41");
26c68d2895SEric Schweitz     mod = mlir::ModuleOp::create(mlir::UnknownLoc::get(&context));
27c68d2895SEric Schweitz   }
28c68d2895SEric Schweitz 
29c68d2895SEric Schweitz   void TearDown() { delete kindMap; }
30c68d2895SEric Schweitz 
31c68d2895SEric Schweitz   mlir::MLIRContext context;
32c68d2895SEric Schweitz   KindMapping *kindMap{};
33c68d2895SEric Schweitz   std::string kindMapInit =
34c68d2895SEric Schweitz       "i10:80,l3:24,a1:8,r54:Double,r62:X86_FP80,r11:PPC_FP128";
35c68d2895SEric Schweitz   std::string target = "powerpc64le-unknown-linux-gnu";
36837bff11SSergio Afonso   std::string targetCPU = "gfx90a";
37*f1d3fe7aSAlexis Perry-Holby   std::string tuneCPU = "generic";
38837bff11SSergio Afonso   std::string targetFeatures = "+gfx9-insts,+wavefrontsize64";
39c68d2895SEric Schweitz   mlir::ModuleOp mod;
40c68d2895SEric Schweitz };
41c68d2895SEric Schweitz 
42c68d2895SEric Schweitz TEST_F(StringAttributesTests, moduleStringAttrTest) {
43c68d2895SEric Schweitz   setTargetTriple(mod, target);
44c68d2895SEric Schweitz   setKindMapping(mod, *kindMap);
45837bff11SSergio Afonso   setTargetCPU(mod, targetCPU);
46*f1d3fe7aSAlexis Perry-Holby   setTuneCPU(mod, tuneCPU);
47837bff11SSergio Afonso   setTargetFeatures(mod, targetFeatures);
48c68d2895SEric Schweitz 
49c68d2895SEric Schweitz   auto triple = getTargetTriple(mod);
50c68d2895SEric Schweitz   EXPECT_EQ(triple.getArch(), llvm::Triple::ArchType::ppc64le);
51c68d2895SEric Schweitz   EXPECT_EQ(triple.getOS(), llvm::Triple::OSType::Linux);
52c68d2895SEric Schweitz 
53c68d2895SEric Schweitz   auto map = getKindMapping(mod);
54c68d2895SEric Schweitz   EXPECT_EQ(map.defaultsToString(), "a10c14d28i40l41r42");
55c68d2895SEric Schweitz 
56c68d2895SEric Schweitz   auto mapStr = map.mapToString();
57c68d2895SEric Schweitz   EXPECT_EQ(mapStr.size(), kindMapInit.size());
58c68d2895SEric Schweitz   EXPECT_TRUE(mapStr.find("a1:8") != std::string::npos);
59c68d2895SEric Schweitz   EXPECT_TRUE(mapStr.find("l3:24") != std::string::npos);
60c68d2895SEric Schweitz   EXPECT_TRUE(mapStr.find("i10:80") != std::string::npos);
61c68d2895SEric Schweitz   EXPECT_TRUE(mapStr.find("r11:PPC_FP128") != std::string::npos);
62c68d2895SEric Schweitz   EXPECT_TRUE(mapStr.find("r54:Double") != std::string::npos);
63c68d2895SEric Schweitz   EXPECT_TRUE(mapStr.find("r62:X86_FP80") != std::string::npos);
64837bff11SSergio Afonso 
65837bff11SSergio Afonso   EXPECT_EQ(getTargetCPU(mod), targetCPU);
66*f1d3fe7aSAlexis Perry-Holby   EXPECT_EQ(getTuneCPU(mod), tuneCPU);
67837bff11SSergio Afonso 
68837bff11SSergio Afonso   auto features = getTargetFeatures(mod);
69837bff11SSergio Afonso   auto featuresList = features.getFeatures();
70837bff11SSergio Afonso   EXPECT_EQ(features.getFeaturesString(), targetFeatures);
71837bff11SSergio Afonso   EXPECT_EQ(featuresList.size(), 2u);
72837bff11SSergio Afonso   EXPECT_EQ(featuresList[0].str(), "+gfx9-insts");
73837bff11SSergio Afonso   EXPECT_EQ(featuresList[1].str(), "+wavefrontsize64");
74c68d2895SEric Schweitz }
75c68d2895SEric Schweitz 
76c68d2895SEric Schweitz // main() from gtest_main
77