65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===--- CodeGenHwModes.h ---------------------------------------*- C++ -*-===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| // Classes to parse and store HW mode information for instruction selection.
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
 | |
| #define LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
 | |
| 
 | |
| #include "llvm/ADT/StringMap.h"
 | |
| #include <cassert>
 | |
| #include <map>
 | |
| #include <string>
 | |
| #include <vector>
 | |
| 
 | |
| // HwModeId -> list of predicates (definition)
 | |
| 
 | |
| namespace llvm {
 | |
|   class Record;
 | |
|   class RecordKeeper;
 | |
| 
 | |
|   struct CodeGenHwModes;
 | |
| 
 | |
|   struct HwMode {
 | |
|     HwMode(Record *R);
 | |
|     StringRef Name;
 | |
|     std::string Features;
 | |
|     void dump() const;
 | |
|   };
 | |
| 
 | |
|   struct HwModeSelect {
 | |
|     HwModeSelect(Record *R, CodeGenHwModes &CGH);
 | |
|     typedef std::pair<unsigned, Record*> PairType;
 | |
|     std::vector<PairType> Items;
 | |
|     void dump() const;
 | |
|   };
 | |
| 
 | |
|   struct CodeGenHwModes {
 | |
|     enum : unsigned { DefaultMode = 0 };
 | |
|     static StringRef DefaultModeName;
 | |
| 
 | |
|     CodeGenHwModes(RecordKeeper &R);
 | |
|     unsigned getHwModeId(StringRef Name) const;
 | |
|     const HwMode &getMode(unsigned Id) const {
 | |
|       assert(Id != 0 && "Mode id of 0 is reserved for the default mode");
 | |
|       return Modes[Id-1];
 | |
|     }
 | |
|     const HwModeSelect &getHwModeSelect(Record *R) const;
 | |
|     unsigned getNumModeIds() const { return Modes.size()+1; }
 | |
|     void dump() const;
 | |
| 
 | |
|   private:
 | |
|     RecordKeeper &Records;
 | |
|     StringMap<unsigned> ModeIds;  // HwMode (string) -> HwModeId
 | |
|     std::vector<HwMode> Modes;
 | |
|     std::map<Record*,HwModeSelect> ModeSelects;
 | |
|   };
 | |
| }
 | |
| 
 | |
| #endif // LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
 |