1 //===- BasicTargetTransformInfo.cpp - Basic target-independent TTI impl ---===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// \file 10 /// This file provides the implementation of a basic TargetTransformInfo pass 11 /// predicated on the target abstractions present in the target independent 12 /// code generator. It uses these (primarily TargetLowering) to model as much 13 /// of the TTI query interface as possible. It is included by most targets so 14 /// that they can specialize only a small subset of the query space. 15 /// 16 //===----------------------------------------------------------------------===// 17 18 #include "llvm/CodeGen/BasicTTIImpl.h" 19 #include "llvm/CodeGen/Passes.h" 20 #include "llvm/Analysis/LoopInfo.h" 21 #include "llvm/Analysis/TargetTransformInfo.h" 22 #include "llvm/Analysis/TargetTransformInfoImpl.h" 23 #include "llvm/Support/CommandLine.h" 24 #include <utility> 25 using namespace llvm; 26 27 cl::opt<unsigned> 28 llvm::PartialUnrollingThreshold("partial-unrolling-threshold", cl::init(0), 29 cl::desc("Threshold for partial unrolling"), 30 cl::Hidden); 31 32 #define DEBUG_TYPE "basictti" 33 34 namespace { 35 class BasicTTIImpl : public BasicTTIImplBase<BasicTTIImpl> { 36 typedef BasicTTIImplBase<BasicTTIImpl> BaseT; 37 38 public: 39 explicit BasicTTIImpl(const TargetMachine *TM = nullptr) : BaseT(TM) {} 40 41 // Provide value semantics. MSVC requires that we spell all of these out. 42 BasicTTIImpl(const BasicTTIImpl &Arg) 43 : BaseT(static_cast<const BaseT &>(Arg)) {} 44 BasicTTIImpl(BasicTTIImpl &&Arg) 45 : BaseT(std::move(static_cast<BaseT &>(Arg))) {} 46 BasicTTIImpl &operator=(const BasicTTIImpl &RHS) { 47 BaseT::operator=(static_cast<const BaseT &>(RHS)); 48 return *this; 49 } 50 BasicTTIImpl &operator=(BasicTTIImpl &&RHS) { 51 BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); 52 return *this; 53 } 54 }; 55 } 56 57 ImmutablePass * 58 llvm::createBasicTargetTransformInfoPass(const TargetMachine *TM) { 59 return new TargetTransformInfoWrapperPass(BasicTTIImpl(TM)); 60 } 61 62 63 //===----------------------------------------------------------------------===// 64 // 65 // Calls used by the vectorizers. 66 // 67 //===----------------------------------------------------------------------===// 68 69