brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 92b2c65 Raw
63 lines · c
1//===- RDFCopy.h ------------------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIB_TARGET_HEXAGON_RDFCOPY_H10#define LLVM_LIB_TARGET_HEXAGON_RDFCOPY_H11 12#include "llvm/CodeGen/RDFGraph.h"13#include "llvm/CodeGen/RDFLiveness.h"14#include "llvm/CodeGen/RDFRegisters.h"15#include "llvm/CodeGen/MachineFunction.h"16#include <map>17#include <vector>18 19namespace llvm {20 21class MachineBasicBlock;22class MachineDominatorTree;23class MachineInstr;24 25namespace rdf {26 27  struct CopyPropagation {28    CopyPropagation(DataFlowGraph &dfg)29        : MDT(dfg.getDT()), DFG(dfg), RDefMap(RegisterRefLess(DFG.getPRI())) {}30 31    virtual ~CopyPropagation() = default;32 33    bool run();34    void trace(bool On) { Trace = On; }35    bool trace() const { return Trace; }36    DataFlowGraph &getDFG() { return DFG; }37 38    using EqualityMap = std::map<RegisterRef, RegisterRef, RegisterRefLess>;39    virtual bool interpretAsCopy(const MachineInstr *MI, EqualityMap &EM);40 41  private:42    const MachineDominatorTree &MDT;43    DataFlowGraph &DFG;44    DataFlowGraph::DefStackMap DefM;45    bool Trace = false;46 47    // map: register -> (map: stmt -> reaching def)48    std::map<RegisterRef, std::map<NodeId, NodeId>, RegisterRefLess> RDefMap;49    // map: statement -> (map: dst reg -> src reg)50    std::map<NodeId, EqualityMap> CopyMap;51    std::vector<NodeId> Copies;52 53    void recordCopy(NodeAddr<StmtNode*> SA, EqualityMap &EM);54    void updateMap(NodeAddr<InstrNode*> IA);55    bool scanBlock(MachineBasicBlock *B);56  };57 58} // end namespace rdf59 60} // end namespace llvm61 62#endif // LLVM_LIB_TARGET_HEXAGON_RDFCOPY_H63