//===- BasicTargetTransformInfo.cpp - Basic target-independent TTI impl ---===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// \file /// This file provides the implementation of a basic TargetTransformInfo pass /// predicated on the target abstractions present in the target independent /// code generator. It uses these (primarily TargetLowering) to model as much /// of the TTI query interface as possible. It is included by most targets so /// that they can specialize only a small subset of the query space. /// //===----------------------------------------------------------------------===// #include "llvm/CodeGen/BasicTTIImpl.h" #include "llvm/CodeGen/Passes.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/Analysis/TargetTransformInfoImpl.h" #include "llvm/Support/CommandLine.h" #include using namespace llvm; cl::opt llvm::PartialUnrollingThreshold("partial-unrolling-threshold", cl::init(0), cl::desc("Threshold for partial unrolling"), cl::Hidden); #define DEBUG_TYPE "basictti" namespace { class BasicTTIImpl : public BasicTTIImplBase { typedef BasicTTIImplBase BaseT; public: explicit BasicTTIImpl(const TargetMachine *TM = nullptr) : BaseT(TM) {} // Provide value semantics. MSVC requires that we spell all of these out. BasicTTIImpl(const BasicTTIImpl &Arg) : BaseT(static_cast(Arg)) {} BasicTTIImpl(BasicTTIImpl &&Arg) : BaseT(std::move(static_cast(Arg))) {} BasicTTIImpl &operator=(const BasicTTIImpl &RHS) { BaseT::operator=(static_cast(RHS)); return *this; } BasicTTIImpl &operator=(BasicTTIImpl &&RHS) { BaseT::operator=(std::move(static_cast(RHS))); return *this; } }; } ImmutablePass * llvm::createBasicTargetTransformInfoPass(const TargetMachine *TM) { return new TargetTransformInfoWrapperPass(BasicTTIImpl(TM)); } //===----------------------------------------------------------------------===// // // Calls used by the vectorizers. // //===----------------------------------------------------------------------===//