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 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>); 63} 64 65#endif // HEXAGONMCSHUFFLER_H 66