//===- ARMTargetTransformInfo.h - ARM specific TTI --------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file /// This file a TargetTransformInfo::Concept conforming object specific to the /// ARM target machine. It uses the target's detailed information to /// provide more precise answers to certain TTI queries, while letting the /// target independent and default TTI implementations handle the rest. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_ARM_ARMTARGETTRANSFORMINFO_H #define LLVM_LIB_TARGET_ARM_ARMTARGETTRANSFORMINFO_H #include "ARM.h" #include "ARMSubtarget.h" #include "ARMTargetMachine.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/CodeGen/BasicTTIImpl.h" #include "llvm/IR/Constant.h" #include "llvm/IR/Function.h" #include "llvm/TargetParser/SubtargetFeature.h" #include <optional> namespace llvm { class APInt; class ARMTargetLowering; class Instruction; class Loop; class SCEV; class ScalarEvolution; class Type; class Value; namespace TailPredication { enum Mode { … }; } // For controlling conversion of memcpy into Tail Predicated loop. namespace TPLoop { enum MemTransfer { … }; } class ARMTTIImpl : public BasicTTIImplBase<ARMTTIImpl> { … }; /// isVREVMask - Check if a vector shuffle corresponds to a VREV /// instruction with the specified blocksize. (The order of the elements /// within each block of the vector is reversed.) inline bool isVREVMask(ArrayRef<int> M, EVT VT, unsigned BlockSize) { … } } // end namespace llvm #endif // LLVM_LIB_TARGET_ARM_ARMTARGETTRANSFORMINFO_H