~louis/ubuntu/trusty/clamav/lp799623_fix_logrotate

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2010-03-12 11:30:04 UTC
  • mfrom: (0.41.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100312113004-b0fop4bkycszdd0z
Tags: 0.96~rc1+dfsg-0ubuntu1
* New upstream RC - FFE (LP: #537636):
  - Add OfficialDatabaseOnly option to clamav-base.postinst.in
  - Add LocalSocketGroup option to clamav-base.postinst.in
  - Add LocalSocketMode option to clamav-base.postinst.in
  - Add CrossFilesystems option to clamav-base.postinst.in
  - Add ClamukoScannerCount option to clamav-base.postinst.in
  - Add BytecodeSecurity opiton to clamav-base.postinst.in
  - Add DetectionStatsHostID option to clamav-freshclam.postinst.in
  - Add Bytecode option to clamav-freshclam.postinst.in
  - Add MilterSocketGroup option to clamav-milter.postinst.in
  - Add MilterSocketMode option to clamav-milter.postinst.in
  - Add ReportHostname option to clamav-milter.postinst.in
  - Bump libclamav SO version to 6.1.0 in libclamav6.install
  - Drop clamdmon from clamav.examples (no longer shipped by upstream)
  - Drop libclamav.a from libclamav-dev.install (not built by upstream)
  - Update SO version for lintian override for libclamav6
  - Add new Bytecode Testing Tool, usr/bin/clambc, to clamav.install
  - Add build-depends on python and python-setuptools for new test suite
  - Update debian/copyright for the embedded copy of llvm (using the system
    llvm is not currently feasible)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===---- ScheduleDAGSDNodes.h - SDNode Scheduling --------------*- 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 implements the ScheduleDAGSDNodes class, which implements
 
11
// scheduling for an SDNode-based dependency graph.
 
12
//
 
13
//===----------------------------------------------------------------------===//
 
14
 
 
15
#ifndef SCHEDULEDAGSDNODES_H
 
16
#define SCHEDULEDAGSDNODES_H
 
17
 
 
18
#include "llvm/CodeGen/ScheduleDAG.h"
 
19
#include "llvm/CodeGen/SelectionDAG.h"
 
20
 
 
21
namespace llvm {
 
22
  /// ScheduleDAGSDNodes - A ScheduleDAG for scheduling SDNode-based DAGs.
 
23
  /// 
 
24
  /// Edges between SUnits are initially based on edges in the SelectionDAG,
 
25
  /// and additional edges can be added by the schedulers as heuristics.
 
26
  /// SDNodes such as Constants, Registers, and a few others that are not
 
27
  /// interesting to schedulers are not allocated SUnits.
 
28
  ///
 
29
  /// SDNodes with MVT::Flag operands are grouped along with the flagged
 
30
  /// nodes into a single SUnit so that they are scheduled together.
 
31
  ///
 
32
  /// SDNode-based scheduling graphs do not use SDep::Anti or SDep::Output
 
33
  /// edges.  Physical register dependence information is not carried in
 
34
  /// the DAG and must be handled explicitly by schedulers.
 
35
  ///
 
36
  class ScheduleDAGSDNodes : public ScheduleDAG {
 
37
  public:
 
38
    SelectionDAG *DAG;                    // DAG of the current basic block
 
39
 
 
40
    explicit ScheduleDAGSDNodes(MachineFunction &mf);
 
41
 
 
42
    virtual ~ScheduleDAGSDNodes() {}
 
43
 
 
44
    /// Run - perform scheduling.
 
45
    ///
 
46
    void Run(SelectionDAG *dag, MachineBasicBlock *bb,
 
47
             MachineBasicBlock::iterator insertPos);
 
48
 
 
49
    /// isPassiveNode - Return true if the node is a non-scheduled leaf.
 
50
    ///
 
51
    static bool isPassiveNode(SDNode *Node) {
 
52
      if (isa<ConstantSDNode>(Node))       return true;
 
53
      if (isa<ConstantFPSDNode>(Node))     return true;
 
54
      if (isa<RegisterSDNode>(Node))       return true;
 
55
      if (isa<GlobalAddressSDNode>(Node))  return true;
 
56
      if (isa<BasicBlockSDNode>(Node))     return true;
 
57
      if (isa<FrameIndexSDNode>(Node))     return true;
 
58
      if (isa<ConstantPoolSDNode>(Node))   return true;
 
59
      if (isa<JumpTableSDNode>(Node))      return true;
 
60
      if (isa<ExternalSymbolSDNode>(Node)) return true;
 
61
      if (isa<BlockAddressSDNode>(Node))   return true;
 
62
      if (Node->getOpcode() == ISD::EntryToken) return true;
 
63
      return false;
 
64
    }
 
65
 
 
66
    /// NewSUnit - Creates a new SUnit and return a ptr to it.
 
67
    ///
 
68
    SUnit *NewSUnit(SDNode *N) {
 
69
#ifndef NDEBUG
 
70
      const SUnit *Addr = 0;
 
71
      if (!SUnits.empty())
 
72
        Addr = &SUnits[0];
 
73
#endif
 
74
      SUnits.push_back(SUnit(N, (unsigned)SUnits.size()));
 
75
      assert((Addr == 0 || Addr == &SUnits[0]) &&
 
76
             "SUnits std::vector reallocated on the fly!");
 
77
      SUnits.back().OrigNode = &SUnits.back();
 
78
      return &SUnits.back();
 
79
    }
 
80
 
 
81
    /// Clone - Creates a clone of the specified SUnit. It does not copy the
 
82
    /// predecessors / successors info nor the temporary scheduling states.
 
83
    ///
 
84
    SUnit *Clone(SUnit *N);
 
85
    
 
86
    /// BuildSchedGraph - Build the SUnit graph from the selection dag that we
 
87
    /// are input.  This SUnit graph is similar to the SelectionDAG, but
 
88
    /// excludes nodes that aren't interesting to scheduling, and represents
 
89
    /// flagged together nodes with a single SUnit.
 
90
    virtual void BuildSchedGraph(AliasAnalysis *AA);
 
91
 
 
92
    /// ComputeLatency - Compute node latency.
 
93
    ///
 
94
    virtual void ComputeLatency(SUnit *SU);
 
95
 
 
96
    virtual MachineBasicBlock *
 
97
    EmitSchedule(DenseMap<MachineBasicBlock*, MachineBasicBlock*> *EM);
 
98
 
 
99
    /// Schedule - Order nodes according to selected style, filling
 
100
    /// in the Sequence member.
 
101
    ///
 
102
    virtual void Schedule() = 0;
 
103
 
 
104
    virtual void dumpNode(const SUnit *SU) const;
 
105
 
 
106
    virtual std::string getGraphNodeLabel(const SUnit *SU) const;
 
107
 
 
108
    virtual void getCustomGraphFeatures(GraphWriter<ScheduleDAG*> &GW) const;
 
109
 
 
110
  private:
 
111
    /// ClusterNeighboringLoads - Cluster loads from "near" addresses into
 
112
    /// combined SUnits.
 
113
    void ClusterNeighboringLoads();
 
114
 
 
115
    /// BuildSchedUnits, AddSchedEdges - Helper functions for BuildSchedGraph.
 
116
    void BuildSchedUnits();
 
117
    void AddSchedEdges();
 
118
  };
 
119
}
 
120
 
 
121
#endif