blob: 547a78b2c42414f5e8f62f996b6d53d6b5fcb33f [file] [log] [blame]
Clement Courbet44b4c542018-06-19 11:28:59 +00001#include "Target.h"
2
3#include <cassert>
4#include <memory>
5
Clement Courbeta51efc22018-06-25 13:12:02 +00006#include "MCTargetDesc/X86MCTargetDesc.h"
Clement Courbet44b4c542018-06-19 11:28:59 +00007#include "gmock/gmock.h"
8#include "gtest/gtest.h"
9
10namespace exegesis {
11
12void InitializeX86ExegesisTarget();
13
14namespace {
15
Clement Courbeta51efc22018-06-25 13:12:02 +000016using testing::Gt;
Clement Courbet44b4c542018-06-19 11:28:59 +000017using testing::NotNull;
Clement Courbeta51efc22018-06-25 13:12:02 +000018using testing::SizeIs;
Clement Courbet44b4c542018-06-19 11:28:59 +000019
20class X86TargetTest : public ::testing::Test {
21protected:
Clement Courbeta51efc22018-06-25 13:12:02 +000022 X86TargetTest()
23 : Target_(ExegesisTarget::lookup(llvm::Triple("x86_64-unknown-linux"))) {
24 EXPECT_THAT(Target_, NotNull());
25 }
Clement Courbet44b4c542018-06-19 11:28:59 +000026 static void SetUpTestCase() { InitializeX86ExegesisTarget(); }
Clement Courbeta51efc22018-06-25 13:12:02 +000027
28 const ExegesisTarget *const Target_;
Clement Courbet44b4c542018-06-19 11:28:59 +000029};
30
Clement Courbeta51efc22018-06-25 13:12:02 +000031TEST_F(X86TargetTest, SetRegToConstantGPR) {
32 const auto Insts = Target_->setRegToConstant(llvm::X86::EAX);
33 EXPECT_THAT(Insts, SizeIs(1));
34 EXPECT_EQ(Insts[0].getOpcode(), llvm::X86::MOV32ri);
35 EXPECT_EQ(Insts[0].getOperand(0).getReg(), llvm::X86::EAX);
36}
37
38TEST_F(X86TargetTest, SetRegToConstantXMM) {
39 const auto Insts = Target_->setRegToConstant(llvm::X86::XMM1);
40 EXPECT_THAT(Insts, SizeIs(Gt(0)));
Clement Courbet44b4c542018-06-19 11:28:59 +000041}
42
43} // namespace
44} // namespace exegesis