181ad6265SDimitry Andric //===- SPIRVTargetTransformInfo.h - SPIR-V specific TTI ---------*- C++ -*-===// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric // \file 981ad6265SDimitry Andric // This file contains a TargetTransformInfo::Concept conforming object specific 1081ad6265SDimitry Andric // to the SPIRV target machine. It uses the target's detailed information to 1181ad6265SDimitry Andric // provide more precise answers to certain TTI queries, while letting the 1281ad6265SDimitry Andric // target independent and default TTI implementations handle the rest. 1381ad6265SDimitry Andric // 1481ad6265SDimitry Andric //===----------------------------------------------------------------------===// 1581ad6265SDimitry Andric 1681ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_SPIRV_SPIRVTARGETTRANSFORMINFO_H 1781ad6265SDimitry Andric #define LLVM_LIB_TARGET_SPIRV_SPIRVTARGETTRANSFORMINFO_H 1881ad6265SDimitry Andric 1981ad6265SDimitry Andric #include "SPIRV.h" 2081ad6265SDimitry Andric #include "SPIRVTargetMachine.h" 2181ad6265SDimitry Andric #include "llvm/Analysis/TargetTransformInfo.h" 2281ad6265SDimitry Andric #include "llvm/CodeGen/BasicTTIImpl.h" 2381ad6265SDimitry Andric 2481ad6265SDimitry Andric namespace llvm { 2581ad6265SDimitry Andric class SPIRVTTIImpl : public BasicTTIImplBase<SPIRVTTIImpl> { 2681ad6265SDimitry Andric using BaseT = BasicTTIImplBase<SPIRVTTIImpl>; 2781ad6265SDimitry Andric 2881ad6265SDimitry Andric friend BaseT; 2981ad6265SDimitry Andric 3081ad6265SDimitry Andric const SPIRVSubtarget *ST; 3181ad6265SDimitry Andric const SPIRVTargetLowering *TLI; 3281ad6265SDimitry Andric 3381ad6265SDimitry Andric const TargetSubtargetInfo *getST() const { return ST; } 3481ad6265SDimitry Andric const SPIRVTargetLowering *getTLI() const { return TLI; } 3581ad6265SDimitry Andric 3681ad6265SDimitry Andric public: 3781ad6265SDimitry Andric explicit SPIRVTTIImpl(const SPIRVTargetMachine *TM, const Function &F) 38*0fca6ea1SDimitry Andric : BaseT(TM, F.getDataLayout()), ST(TM->getSubtargetImpl(F)), 3981ad6265SDimitry Andric TLI(ST->getTargetLowering()) {} 4081ad6265SDimitry Andric }; 4181ad6265SDimitry Andric 4281ad6265SDimitry Andric } // namespace llvm 4381ad6265SDimitry Andric 4481ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_SPIRV_SPIRVTARGETTRANSFORMINFO_H 45