LLVM 17.0.0git
Classes | Enumerations | Functions | Variables
RISCVISAInfo.cpp File Reference
#include "llvm/Support/RISCVISAInfo.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/raw_ostream.h"
#include <array>
#include <optional>
#include <string>
#include <vector>

Go to the source code of this file.

Classes

struct  ImpliedExtsEntry
 
struct  CombinedExtsEntry
 

Enumerations

enum  RankFlags { RF_Z_EXTENSION = 1 << 6 , RF_S_EXTENSION = 1 << 7 , RF_X_EXTENSION = 1 << 8 }
 

Functions

static bool stripExperimentalPrefix (StringRef &Ext)
 
static size_t findFirstNonVersionCharacter (StringRef Ext)
 
static std::optional< RISCVExtensionVersion > findDefaultVersion (StringRef ExtName)
 
static StringRef getExtensionTypeDesc (StringRef Ext)
 
static StringRef getExtensionType (StringRef Ext)
 
static std::optional< RISCVExtensionVersion > isExperimentalExtension (StringRef Ext)
 
static unsigned singleLetterExtensionRank (char Ext)
 
static unsigned getExtensionRank (const std::string &ExtName)
 
static Error getExtensionVersion (StringRef Ext, StringRef In, unsigned &Major, unsigned &Minor, unsigned &ConsumeLength, bool EnableExperimentalExtension, bool ExperimentalExtensionVersionCheck)
 

Variables

static constexpr StringLiteral AllStdExts = "mafdqlcbkjtpvnh"
 
static const charRISCVGImplications []
 
static const RISCVSupportedExtension SupportedExtensions []
 
static const RISCVSupportedExtension SupportedExperimentalExtensions []
 
static const charImpliedExtsD [] = {"f"}
 
static const charImpliedExtsF [] = {"zicsr"}
 
static const charImpliedExtsV [] = {"zvl128b", "zve64d"}
 
static const charImpliedExtsXTHeadVdot [] = {"v"}
 
static const charImpliedExtsXsfvcp [] = {"zve32x"}
 
static const charImpliedExtsZcb [] = {"zca"}
 
static const charImpliedExtsZcmp [] = {"zca"}
 
static const charImpliedExtsZcmt [] = {"zca"}
 
static const charImpliedExtsZdinx [] = {"zfinx"}
 
static const charImpliedExtsZfa [] = {"f"}
 
static const charImpliedExtsZfbfmin [] = {"f"}
 
static const charImpliedExtsZfh [] = {"f"}
 
static const charImpliedExtsZfhmin [] = {"f"}
 
static const charImpliedExtsZfinx [] = {"zicsr"}
 
static const charImpliedExtsZhinx [] = {"zfinx"}
 
static const charImpliedExtsZhinxmin [] = {"zfinx"}
 
static const charImpliedExtsZicntr [] = {"zicsr"}
 
static const charImpliedExtsZihpm [] = {"zicsr"}
 
static const charImpliedExtsZk [] = {"zkn", "zkt", "zkr"}
 
static const charImpliedExtsZkn []
 
static const charImpliedExtsZks [] = {"zbkb", "zbkc", "zbkx", "zksed", "zksh"}
 
static const charImpliedExtsZve32f [] = {"zve32x", "f"}
 
static const charImpliedExtsZve32x [] = {"zvl32b", "zicsr"}
 
static const charImpliedExtsZve64d [] = {"zve64f", "d"}
 
static const charImpliedExtsZve64f [] = {"zve64x", "zve32f"}
 
static const charImpliedExtsZve64x [] = {"zve32x", "zvl64b"}
 
static const charImpliedExtsZvfbfmin [] = {"zve32f"}
 
static const charImpliedExtsZvfbfwma [] = {"zve32f"}
 
static const charImpliedExtsZvfh [] = {"zve32f", "zfhmin"}
 
static const charImpliedExtsZvkn []
 
static const charImpliedExtsZvkng [] = {"zvkg", "zvkn"}
 
static const charImpliedExtsZvknhb [] = {"zvknha"}
 
static const charImpliedExtsZvks []
 
static const charImpliedExtsZvksg [] = {"zvks", "zvkg"}
 
static const charImpliedExtsZvl1024b [] = {"zvl512b"}
 
static const charImpliedExtsZvl128b [] = {"zvl64b"}
 
static const charImpliedExtsZvl16384b [] = {"zvl8192b"}
 
static const charImpliedExtsZvl2048b [] = {"zvl1024b"}
 
static const charImpliedExtsZvl256b [] = {"zvl128b"}
 
static const charImpliedExtsZvl32768b [] = {"zvl16384b"}
 
static const charImpliedExtsZvl4096b [] = {"zvl2048b"}
 
static const charImpliedExtsZvl512b [] = {"zvl256b"}
 
static const charImpliedExtsZvl64b [] = {"zvl32b"}
 
static const charImpliedExtsZvl65536b [] = {"zvl32768b"}
 
static const charImpliedExtsZvl8192b [] = {"zvl4096b"}
 
static constexpr ImpliedExtsEntry ImpliedExts []
 
static constexpr CombinedExtsEntry CombineIntoExts []
 

Enumeration Type Documentation

◆ RankFlags

enum RankFlags
Enumerator
RF_Z_EXTENSION 
RF_S_EXTENSION 
RF_X_EXTENSION 

Definition at line 307 of file RISCVISAInfo.cpp.

Function Documentation

◆ findDefaultVersion()

static std::optional< RISCVExtensionVersion > findDefaultVersion ( StringRef  ExtName)
static

◆ findFirstNonVersionCharacter()

static size_t findFirstNonVersionCharacter ( StringRef  Ext)
static

Definition at line 184 of file RISCVISAInfo.cpp.

References assert(), and isDigit().

Referenced by llvm::RISCVISAInfo::parseArchString().

◆ getExtensionRank()

static unsigned getExtensionRank ( const std::string &  ExtName)
static

◆ getExtensionType()

static StringRef getExtensionType ( StringRef  Ext)
static

Definition at line 243 of file RISCVISAInfo.cpp.

Referenced by llvm::RISCVISAInfo::parseArchString(), and performMemPairCombine().

◆ getExtensionTypeDesc()

static StringRef getExtensionTypeDesc ( StringRef  Ext)
static

Definition at line 233 of file RISCVISAInfo.cpp.

Referenced by llvm::RISCVISAInfo::parseArchString().

◆ getExtensionVersion()

static Error getExtensionVersion ( StringRef  Ext,
StringRef  In,
unsigned Major,
unsigned Minor,
unsigned ConsumeLength,
bool  EnableExperimentalExtension,
bool  ExperimentalExtensionVersionCheck 
)
static

◆ isExperimentalExtension()

static std::optional< RISCVExtensionVersion > isExperimentalExtension ( StringRef  Ext)
static

◆ singleLetterExtensionRank()

static unsigned singleLetterExtensionRank ( char  Ext)
static

◆ stripExperimentalPrefix()

static bool stripExperimentalPrefix ( StringRef Ext)
static

Variable Documentation

◆ AllStdExts

constexpr StringLiteral AllStdExts = "mafdqlcbkjtpvnh"
staticconstexpr

◆ CombineIntoExts

constexpr CombinedExtsEntry CombineIntoExts[]
staticconstexpr
Initial value:
= {
{{"zk"}, {ImpliedExtsZk}},
{{"zkn"}, {ImpliedExtsZkn}},
{{"zks"}, {ImpliedExtsZks}},
}
static const char * ImpliedExtsZks[]
static const char * ImpliedExtsZk[]
static const char * ImpliedExtsZkn[]

Definition at line 1067 of file RISCVISAInfo.cpp.

◆ ImpliedExts

constexpr ImpliedExtsEntry ImpliedExts[]
staticconstexpr

Definition at line 978 of file RISCVISAInfo.cpp.

◆ ImpliedExtsD

const char* ImpliedExtsD[] = {"f"}
static

Definition at line 917 of file RISCVISAInfo.cpp.

◆ ImpliedExtsF

const char* ImpliedExtsF[] = {"zicsr"}
static

Definition at line 918 of file RISCVISAInfo.cpp.

◆ ImpliedExtsV

const char* ImpliedExtsV[] = {"zvl128b", "zve64d"}
static

Definition at line 919 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXsfvcp

const char* ImpliedExtsXsfvcp[] = {"zve32x"}
static

Definition at line 921 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXTHeadVdot

const char* ImpliedExtsXTHeadVdot[] = {"v"}
static

Definition at line 920 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcb

const char* ImpliedExtsZcb[] = {"zca"}
static

Definition at line 922 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcmp

const char* ImpliedExtsZcmp[] = {"zca"}
static

Definition at line 923 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcmt

const char* ImpliedExtsZcmt[] = {"zca"}
static

Definition at line 924 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZdinx

const char* ImpliedExtsZdinx[] = {"zfinx"}
static

Definition at line 925 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfa

const char* ImpliedExtsZfa[] = {"f"}
static

Definition at line 926 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfbfmin

const char* ImpliedExtsZfbfmin[] = {"f"}
static

Definition at line 927 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfh

const char* ImpliedExtsZfh[] = {"f"}
static

Definition at line 928 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfhmin

const char* ImpliedExtsZfhmin[] = {"f"}
static

Definition at line 929 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfinx

const char* ImpliedExtsZfinx[] = {"zicsr"}
static

Definition at line 930 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZhinx

const char* ImpliedExtsZhinx[] = {"zfinx"}
static

Definition at line 931 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZhinxmin

const char* ImpliedExtsZhinxmin[] = {"zfinx"}
static

Definition at line 932 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZicntr

const char* ImpliedExtsZicntr[] = {"zicsr"}
static

Definition at line 933 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZihpm

const char* ImpliedExtsZihpm[] = {"zicsr"}
static

Definition at line 934 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZk

const char* ImpliedExtsZk[] = {"zkn", "zkt", "zkr"}
static

Definition at line 935 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZkn

const char* ImpliedExtsZkn[]
static
Initial value:
= {"zbkb", "zbkc", "zbkx",
"zkne", "zknd", "zknh"}

Definition at line 936 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZks

const char* ImpliedExtsZks[] = {"zbkb", "zbkc", "zbkx", "zksed", "zksh"}
static

Definition at line 938 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve32f

const char* ImpliedExtsZve32f[] = {"zve32x", "f"}
static

Definition at line 939 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve32x

const char* ImpliedExtsZve32x[] = {"zvl32b", "zicsr"}
static

Definition at line 940 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve64d

const char* ImpliedExtsZve64d[] = {"zve64f", "d"}
static

Definition at line 941 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve64f

const char* ImpliedExtsZve64f[] = {"zve64x", "zve32f"}
static

Definition at line 942 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve64x

const char* ImpliedExtsZve64x[] = {"zve32x", "zvl64b"}
static

Definition at line 943 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfbfmin

const char* ImpliedExtsZvfbfmin[] = {"zve32f"}
static

Definition at line 944 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfbfwma

const char* ImpliedExtsZvfbfwma[] = {"zve32f"}
static

Definition at line 945 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfh

const char* ImpliedExtsZvfh[] = {"zve32f", "zfhmin"}
static

Definition at line 946 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvkn

const char* ImpliedExtsZvkn[]
static
Initial value:
= {"zvbb", "zvbc", "zvkned", "zvknhb",
"zvkt"}

Definition at line 947 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvkng

const char* ImpliedExtsZvkng[] = {"zvkg", "zvkn"}
static

Definition at line 949 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvknhb

const char* ImpliedExtsZvknhb[] = {"zvknha"}
static

Definition at line 950 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvks

const char* ImpliedExtsZvks[]
static
Initial value:
= {"zvbb", "zvbc", "zvksed", "zvksh",
"zvkt"}

Definition at line 951 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvksg

const char* ImpliedExtsZvksg[] = {"zvks", "zvkg"}
static

Definition at line 953 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl1024b

const char* ImpliedExtsZvl1024b[] = {"zvl512b"}
static

Definition at line 954 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl128b

const char* ImpliedExtsZvl128b[] = {"zvl64b"}
static

Definition at line 955 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl16384b

const char* ImpliedExtsZvl16384b[] = {"zvl8192b"}
static

Definition at line 956 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl2048b

const char* ImpliedExtsZvl2048b[] = {"zvl1024b"}
static

Definition at line 957 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl256b

const char* ImpliedExtsZvl256b[] = {"zvl128b"}
static

Definition at line 958 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl32768b

const char* ImpliedExtsZvl32768b[] = {"zvl16384b"}
static

Definition at line 959 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl4096b

const char* ImpliedExtsZvl4096b[] = {"zvl2048b"}
static

Definition at line 960 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl512b

const char* ImpliedExtsZvl512b[] = {"zvl256b"}
static

Definition at line 961 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl64b

const char* ImpliedExtsZvl64b[] = {"zvl32b"}
static

Definition at line 962 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl65536b

const char* ImpliedExtsZvl65536b[] = {"zvl32768b"}
static

Definition at line 963 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl8192b

const char* ImpliedExtsZvl8192b[] = {"zvl4096b"}
static

Definition at line 964 of file RISCVISAInfo.cpp.

◆ RISCVGImplications

const char* RISCVGImplications[]
static
Initial value:
= {
"i", "m", "a", "f", "d", "zicsr", "zifencei"
}

Definition at line 42 of file RISCVISAInfo.cpp.

Referenced by llvm::RISCVISAInfo::parseArchString().

◆ SupportedExperimentalExtensions

const RISCVSupportedExtension SupportedExperimentalExtensions[]
static

◆ SupportedExtensions

const RISCVSupportedExtension SupportedExtensions[]
static