LLVM 18.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 <atomic>
#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 void verifyTables ()
 
static void PrintExtension (const std::string Name, const std::string Version, const std::string Description)
 
static bool stripExperimentalPrefix (StringRef &Ext)
 
static size_t findLastNonVersionCharacter (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 charImpliedExtsXsfvfnrclipxfqf [] = {"zve32f"}
 
static const charImpliedExtsXsfvfwmaccqqq [] = {"zve32f", "zvfbfmin"}
 
static const charImpliedExtsXsfvqmaccdod [] = {"zve32x"}
 
static const charImpliedExtsXsfvqmaccqoq [] = {"zve32x"}
 
static const charImpliedExtsZacas [] = {"a"}
 
static const charImpliedExtsZcb [] = {"zca"}
 
static const charImpliedExtsZcd [] = {"d", "zca"}
 
static const charImpliedExtsZce [] = {"zcb", "zcmp", "zcmt"}
 
static const charImpliedExtsZcf [] = {"f", "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 charImpliedExtsZvbb [] = {"zvkb"}
 
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", "zfbfmin"}
 
static const charImpliedExtsZvfbfwma [] = {"zvfbfmin"}
 
static const charImpliedExtsZvfh [] = {"zve32f", "zfhmin"}
 
static const charImpliedExtsZvfhmin [] = {"zve32f"}
 
static const charImpliedExtsZvkn [] = {"zvkb", "zvkned", "zvknhb", "zvkt"}
 
static const charImpliedExtsZvknc [] = {"zvbc", "zvkn"}
 
static const charImpliedExtsZvkng [] = {"zvkg", "zvkn"}
 
static const charImpliedExtsZvknhb [] = {"zve64x"}
 
static const charImpliedExtsZvks [] = {"zvkb", "zvksed", "zvksh", "zvkt"}
 
static const charImpliedExtsZvksc [] = {"zvbc", "zvks"}
 
static const charImpliedExtsZvksg [] = {"zvkg", "zvks"}
 
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 402 of file RISCVISAInfo.cpp.

Function Documentation

◆ findDefaultVersion()

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

◆ findLastNonVersionCharacter()

static size_t findLastNonVersionCharacter ( StringRef  Ext)
static

◆ getExtensionRank()

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

◆ getExtensionType()

static StringRef getExtensionType ( StringRef  Ext)
static

Definition at line 324 of file RISCVISAInfo.cpp.

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

◆ getExtensionTypeDesc()

static StringRef getExtensionTypeDesc ( StringRef  Ext)
static

Definition at line 314 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

◆ PrintExtension()

static void PrintExtension ( const std::string  Name,
const std::string  Version,
const std::string  Description 
)
static

Definition at line 218 of file RISCVISAInfo.cpp.

References llvm::format(), Name, and llvm::outs().

Referenced by llvm::riscvExtensionsHelp().

◆ singleLetterExtensionRank()

static unsigned singleLetterExtensionRank ( char  Ext)
static

◆ stripExperimentalPrefix()

static bool stripExperimentalPrefix ( StringRef Ext)
static

◆ verifyTables()

static void verifyTables ( )
static

Variable Documentation

◆ AllStdExts

constexpr StringLiteral AllStdExts = "mafdqlcbkjtpvnh"
staticconstexpr

◆ CombineIntoExts

constexpr CombinedExtsEntry CombineIntoExts[]
staticconstexpr
Initial value:
= {
{{"zk"}, {ImpliedExtsZk}},
{{"zkn"}, {ImpliedExtsZkn}},
{{"zks"}, {ImpliedExtsZks}},
{{"zvkn"}, {ImpliedExtsZvkn}},
{{"zvknc"}, {ImpliedExtsZvknc}},
{{"zvkng"}, {ImpliedExtsZvkng}},
{{"zvks"}, {ImpliedExtsZvks}},
{{"zvksc"}, {ImpliedExtsZvksc}},
{{"zvksg"}, {ImpliedExtsZvksg}},
}
static const char * ImpliedExtsZks[]
static const char * ImpliedExtsZvksg[]
static const char * ImpliedExtsZvkn[]
static const char * ImpliedExtsZvkng[]
static const char * ImpliedExtsZvks[]
static const char * ImpliedExtsZk[]
static const char * ImpliedExtsZvknc[]
static const char * ImpliedExtsZkn[]
static const char * ImpliedExtsZvksc[]

Definition at line 1173 of file RISCVISAInfo.cpp.

◆ ImpliedExts

constexpr ImpliedExtsEntry ImpliedExts[]
staticconstexpr

Definition at line 1065 of file RISCVISAInfo.cpp.

Referenced by llvm::AArch64::CpuInfo::getImpliedExtensions().

◆ ImpliedExtsD

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

Definition at line 994 of file RISCVISAInfo.cpp.

◆ ImpliedExtsF

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

Definition at line 995 of file RISCVISAInfo.cpp.

◆ ImpliedExtsV

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

Definition at line 996 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXsfvcp

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

Definition at line 998 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXsfvfnrclipxfqf

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

Definition at line 999 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXsfvfwmaccqqq

const char* ImpliedExtsXsfvfwmaccqqq[] = {"zve32f", "zvfbfmin"}
static

Definition at line 1000 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXsfvqmaccdod

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

Definition at line 1001 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXsfvqmaccqoq

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

Definition at line 1002 of file RISCVISAInfo.cpp.

◆ ImpliedExtsXTHeadVdot

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

Definition at line 997 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZacas

const char* ImpliedExtsZacas[] = {"a"}
static

Definition at line 1003 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcb

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

Definition at line 1004 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcd

const char* ImpliedExtsZcd[] = {"d", "zca"}
static

Definition at line 1005 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZce

const char* ImpliedExtsZce[] = {"zcb", "zcmp", "zcmt"}
static

Definition at line 1006 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcf

const char* ImpliedExtsZcf[] = {"f", "zca"}
static

Definition at line 1007 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcmp

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

Definition at line 1008 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZcmt

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

Definition at line 1009 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZdinx

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

Definition at line 1010 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfa

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

Definition at line 1011 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfbfmin

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

Definition at line 1012 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfh

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

Definition at line 1013 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfhmin

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

Definition at line 1014 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZfinx

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

Definition at line 1015 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZhinx

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

Definition at line 1016 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZhinxmin

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

Definition at line 1017 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZicntr

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

Definition at line 1018 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZihpm

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

Definition at line 1019 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZk

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

Definition at line 1020 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZkn

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

Definition at line 1021 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZks

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

Definition at line 1023 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvbb

const char* ImpliedExtsZvbb[] = {"zvkb"}
static

Definition at line 1024 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve32f

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

Definition at line 1025 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve32x

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

Definition at line 1026 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve64d

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

Definition at line 1027 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve64f

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

Definition at line 1028 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZve64x

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

Definition at line 1029 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfbfmin

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

Definition at line 1030 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfbfwma

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

Definition at line 1031 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfh

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

Definition at line 1032 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvfhmin

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

Definition at line 1033 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvkn

const char* ImpliedExtsZvkn[] = {"zvkb", "zvkned", "zvknhb", "zvkt"}
static

Definition at line 1034 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvknc

const char* ImpliedExtsZvknc[] = {"zvbc", "zvkn"}
static

Definition at line 1035 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvkng

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

Definition at line 1036 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvknhb

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

Definition at line 1037 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvks

const char* ImpliedExtsZvks[] = {"zvkb", "zvksed", "zvksh", "zvkt"}
static

Definition at line 1038 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvksc

const char* ImpliedExtsZvksc[] = {"zvbc", "zvks"}
static

Definition at line 1039 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvksg

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

Definition at line 1040 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl1024b

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

Definition at line 1041 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl128b

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

Definition at line 1042 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl16384b

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

Definition at line 1043 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl2048b

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

Definition at line 1044 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl256b

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

Definition at line 1045 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl32768b

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

Definition at line 1046 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl4096b

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

Definition at line 1047 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl512b

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

Definition at line 1048 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl64b

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

Definition at line 1049 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl65536b

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

Definition at line 1050 of file RISCVISAInfo.cpp.

◆ ImpliedExtsZvl8192b

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

Definition at line 1051 of file RISCVISAInfo.cpp.

◆ RISCVGImplications

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

Definition at line 47 of file RISCVISAInfo.cpp.

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

◆ SupportedExperimentalExtensions

const RISCVSupportedExtension SupportedExperimentalExtensions[]
static

◆ SupportedExtensions

const RISCVSupportedExtension SupportedExtensions[]
static