MBlazeSubtarget.h revision 0ddff1b5359433faf2eb1c4ff5320ddcbd42f52f
1//=====-- MBlazeSubtarget.h - Define Subtarget for the MBlaze -*- C++ -*--====//
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//
10// This file declares the MBlaze specific subclass of TargetSubtargetInfo.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MBLAZESUBTARGET_H
15#define MBLAZESUBTARGET_H
16
17#include "llvm/Target/TargetSubtargetInfo.h"
18#include "llvm/MC/MCInstrItineraries.h"
19#include <string>
20
21#define GET_SUBTARGETINFO_HEADER
22#include "MBlazeGenSubtargetInfo.inc"
23
24namespace llvm {
25class StringRef;
26
27class MBlazeSubtarget : public MBlazeGenSubtargetInfo {
28
29protected:
30  bool HasBarrel;
31  bool HasDiv;
32  bool HasMul;
33  bool HasPatCmp;
34  bool HasFPU;
35  bool HasMul64;
36  bool HasSqrt;
37  bool HasItin;
38
39  InstrItineraryData InstrItins;
40
41public:
42
43  /// This constructor initializes the data members to match that
44  /// of the specified triple.
45  MBlazeSubtarget(const std::string &TT, const std::string &CPU,
46                  const std::string &FS);
47
48  /// ParseSubtargetFeatures - Parses features string setting specified
49  /// subtarget options.  Definition of function is auto generated by tblgen.
50  void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
51
52  /// Compute the number of maximum number of issues per cycle for the
53  /// MBlaze scheduling itineraries.
54  void computeIssueWidth();
55
56  /// enablePostRAScheduler - True at 'More' optimization.
57  bool enablePostRAScheduler(CodeGenOpt::Level OptLevel,
58                             TargetSubtargetInfo::AntiDepBreakMode& Mode,
59                             RegClassVector& CriticalPathRCs) const;
60
61  /// getInstrItins - Return the instruction itineraies based on subtarget.
62  const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
63
64  bool hasItin()   const { return HasItin; }
65  bool hasPCMP()   const { return HasPatCmp; }
66  bool hasFPU()    const { return HasFPU; }
67  bool hasSqrt()   const { return HasSqrt; }
68  bool hasMul()    const { return HasMul; }
69  bool hasMul64()  const { return HasMul64; }
70  bool hasDiv()    const { return HasDiv; }
71  bool hasBarrel() const { return HasBarrel; }
72};
73} // End llvm namespace
74
75#endif
76