1 //===-- Target.cpp ----------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "../Latency.h"
17 class AArch64LatencyBenchmarkRunner
: public LatencyBenchmarkRunner
{
19 AArch64LatencyBenchmarkRunner(const LLVMState
&State
)
20 : LatencyBenchmarkRunner(State
) {}
23 const char *getCounterName() const override
{
24 // All AArch64 subtargets have CPU_CYCLES as the cycle counter name
29 class ExegesisAArch64Target
: public ExegesisTarget
{
30 std::vector
<llvm::MCInst
> setRegTo(const llvm::MCSubtargetInfo
&STI
,
31 const llvm::APInt
&Value
,
32 unsigned Reg
) const override
{
33 llvm_unreachable("Not yet implemented");
36 unsigned getScratchMemoryRegister(const llvm::Triple
&) const override
{
37 llvm_unreachable("Not yet implemented");
40 void fillMemoryOperands(InstructionBuilder
&IB
, unsigned Reg
,
41 unsigned Offset
) const override
{
42 llvm_unreachable("Not yet implemented");
45 unsigned getMaxMemoryAccessSize() const override
{
46 llvm_unreachable("Not yet implemented");
49 bool matchesArch(llvm::Triple::ArchType Arch
) const override
{
50 return Arch
== llvm::Triple::aarch64
|| Arch
== llvm::Triple::aarch64_be
;
52 void addTargetSpecificPasses(llvm::PassManagerBase
&PM
) const override
{
53 // Function return is a pseudo-instruction that needs to be expanded
54 PM
.add(llvm::createAArch64ExpandPseudoPass());
56 std::unique_ptr
<BenchmarkRunner
>
57 createLatencyBenchmarkRunner(const LLVMState
&State
) const override
{
58 return llvm::make_unique
<AArch64LatencyBenchmarkRunner
>(State
);
64 static ExegesisTarget
*getTheExegesisAArch64Target() {
65 static ExegesisAArch64Target Target
;
69 void InitializeAArch64ExegesisTarget() {
70 ExegesisTarget::registerTarget(getTheExegesisAArch64Target());
73 } // namespace exegesis