xref: /llvm-project/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp (revision 705b185f90a67b15922f7537f13944e74321f344)
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