forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
//=- llvm/CodeGen/ExactHazardRecognizer.h - Scheduling Support -*- C++ -*-=//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file implements the ExactHazardRecognizer class, which
 | 
						|
// implements hazard-avoidance heuristics for scheduling, based on the
 | 
						|
// scheduling itineraries specified for the target.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
 | 
						|
#define LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
 | 
						|
 | 
						|
#include "llvm/CodeGen/ScheduleHazardRecognizer.h"
 | 
						|
#include "llvm/CodeGen/ScheduleDAG.h"
 | 
						|
#include "llvm/Target/TargetInstrItineraries.h"
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
  class ExactHazardRecognizer : public ScheduleHazardRecognizer {
 | 
						|
    // Itinerary data for the target.
 | 
						|
    const InstrItineraryData &ItinData;
 | 
						|
 | 
						|
    // Scoreboard to track function unit usage. Scoreboard[0] is a
 | 
						|
    // mask of the FUs in use in the cycle currently being
 | 
						|
    // schedule. Scoreboard[1] is a mask for the next cycle. The
 | 
						|
    // Scoreboard is used as a circular buffer with the current cycle
 | 
						|
    // indicated by ScoreboardHead.
 | 
						|
    unsigned *Scoreboard;
 | 
						|
 | 
						|
    // The maximum number of cycles monitored by the Scoreboard. This
 | 
						|
    // value is determined based on the target itineraries to ensure
 | 
						|
    // that all hazards can be tracked.
 | 
						|
    unsigned ScoreboardDepth;
 | 
						|
 | 
						|
    // Indices into the Scoreboard that represent the current cycle.
 | 
						|
    unsigned ScoreboardHead;
 | 
						|
 | 
						|
    // Return the scoreboard index to use for 'offset' cycles in the
 | 
						|
    // future. 'offset' of 0 returns ScoreboardHead.
 | 
						|
    unsigned getFutureIndex(unsigned offset);
 | 
						|
 | 
						|
    // Print the scoreboard.
 | 
						|
    void dumpScoreboard();
 | 
						|
 | 
						|
  public:
 | 
						|
    ExactHazardRecognizer(const InstrItineraryData &ItinData);
 | 
						|
    ~ExactHazardRecognizer();
 | 
						|
    
 | 
						|
    virtual HazardType getHazardType(SUnit *SU);
 | 
						|
    virtual void Reset();
 | 
						|
    virtual void EmitInstruction(SUnit *SU);
 | 
						|
    virtual void AdvanceCycle();
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |