blob: a21cce1fc2409ab5dcda6171502a96b65dffdd61 [file] [log] [blame]
Colin LeMahieub23c47b2015-05-31 21:57:09 +00001//=-- 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
20namespace llvm {
21
22class MCInst;
23
24// Insn bundle shuffler.
25class HexagonMCShuffler : public HexagonShuffler {
26 bool immext_present;
27 bool duplex_present;
28
29public:
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)
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
47 bool immextPresent() const { return immext_present; };
48 bool duplexPresent() const { return duplex_present; };
49
50private:
51 void init(MCInst &MCB);
52 void init(MCInst &MCB, const MCInst *AddMI, bool bInsertAtFront = false);
53};
54
55// Invocation of the shuffler.
56bool HexagonMCShuffle(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
57 MCInst &);
58bool HexagonMCShuffle(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
59 MCInst &, const MCInst *, int);
60unsigned HexagonMCShuffle(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,
61 MCContext &Context, MCInst &,
62 SmallVector<DuplexCandidate, 8>);
Alexander Kornienkof00654e2015-06-23 09:49:53 +000063}
Colin LeMahieub23c47b2015-05-31 21:57:09 +000064
65#endif // HEXAGONMCSHUFFLER_H