• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //=-- HexagonMCShuffler.h ---------------------------------------------------=//
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 declares the shuffling of insns inside a bundle according to the
11 // packet formation rules of the Hexagon ISA.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef HEXAGONMCSHUFFLER_H
16 #define HEXAGONMCSHUFFLER_H
17 
18 #include "MCTargetDesc/HexagonShuffler.h"
19 
20 namespace llvm {
21 
22 class MCInst;
23 
24 // Insn bundle shuffler.
25 class HexagonMCShuffler : public HexagonShuffler {
26   bool immext_present;
27   bool duplex_present;
28 
29 public:
HexagonMCShuffler(MCInstrInfo const & MCII,MCSubtargetInfo const & STI,MCInst & MCB)30   HexagonMCShuffler(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
31                     MCInst &MCB)
32       : HexagonShuffler(MCII, STI) {
33     init(MCB);
34   };
35   HexagonMCShuffler(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
36                     MCInst &MCB, const MCInst *AddMI,
37                     bool bInsertAtFront = false)
HexagonShuffler(MCII,STI)38       : HexagonShuffler(MCII, STI) {
39     init(MCB, AddMI, bInsertAtFront);
40   };
41 
42   // Copy reordered bundle to another.
43   void copyTo(MCInst &MCB);
44   // Reorder and copy result to another.
45   bool reshuffleTo(MCInst &MCB);
46 
immextPresent()47   bool immextPresent() const { return immext_present; };
duplexPresent()48   bool duplexPresent() const { return duplex_present; };
49 
50 private:
51   void init(MCInst &MCB);
52   void init(MCInst &MCB, const MCInst *AddMI, bool bInsertAtFront = false);
53 };
54 
55 // Invocation of the shuffler.
56 bool HexagonMCShuffle(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
57                       MCInst &);
58 bool HexagonMCShuffle(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
59                       MCInst &, const MCInst *, int);
60 unsigned HexagonMCShuffle(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
61                           MCContext &Context, MCInst &,
62                           SmallVector<DuplexCandidate, 8>);
63 }
64 
65 #endif // HEXAGONMCSHUFFLER_H
66