Lines Matching defs:Ext
157 static bool stripExperimentalPrefix(StringRef &Ext) {
158 return Ext.consume_front("experimental-");
168 static size_t findLastNonVersionCharacter(StringRef Ext) {
169 assert(!Ext.empty() &&
172 int Pos = Ext.size() - 1;
173 while (Pos > 0 && isDigit(Ext[Pos]))
175 if (Pos > 0 && Ext[Pos] == 'p' && isDigit(Ext[Pos - 1])) {
177 while (Pos > 0 && isDigit(Ext[Pos]))
210 static StringRef getExtensionTypeDesc(StringRef Ext) {
211 if (Ext.starts_with('s'))
213 if (Ext.starts_with('x'))
215 if (Ext.starts_with('z'))
220 static StringRef getExtensionType(StringRef Ext) {
221 if (Ext.starts_with('s'))
223 if (Ext.starts_with('x'))
225 if (Ext.starts_with('z'))
231 isExperimentalExtension(StringRef Ext) {
233 llvm::lower_bound(SupportedExperimentalExtensions, Ext, LessExtName());
234 if (I == std::end(SupportedExperimentalExtensions) || I->Name != Ext)
240 bool RISCVISAInfo::isSupportedExtensionFeature(StringRef Ext) {
241 bool IsExperimental = stripExperimentalPrefix(Ext);
247 auto I = llvm::lower_bound(ExtInfo, Ext, LessExtName());
248 return I != ExtInfo.end() && I->Name == Ext;
251 bool RISCVISAInfo::isSupportedExtension(StringRef Ext) {
256 auto I = llvm::lower_bound(ExtInfo, Ext, LessExtName());
257 if (I != ExtInfo.end() && I->Name == Ext)
264 bool RISCVISAInfo::isSupportedExtension(StringRef Ext, unsigned MajorVersion,
269 std::equal_range(ExtInfo.begin(), ExtInfo.end(), Ext, LessExtName());
278 bool RISCVISAInfo::hasExtension(StringRef Ext) const {
279 stripExperimentalPrefix(Ext);
281 if (!isSupportedExtension(Ext))
284 return Exts.count(Ext.str()) != 0;
306 for (const RISCVSupportedExtension &Ext : SupportedExtensions) {
307 if (Exts.count(Ext.Name))
309 Features.push_back((llvm::Twine("-") + Ext.Name).str());
312 for (const RISCVSupportedExtension &Ext : SupportedExperimentalExtensions) {
313 if (Exts.count(Ext.Name))
315 Features.push_back((llvm::Twine("-experimental-") + Ext.Name).str());
339 static Error getExtensionVersion(StringRef Ext, StringRef In, unsigned &Major,
357 Ext + "'");
363 Ext + "'");
367 Ext + "'");
377 if (Ext.size() > 1 && In.size())
382 if (auto ExperimentalExtension = isExperimentalExtension(Ext)) {
386 Ext + "'");
391 "experimental extension requires explicit version number `" + Ext +
400 Error += " for experimental extension '" + Ext.str() +
410 if (Ext == "g")
414 if (auto DefaultVersion = findDefaultVersion(Ext)) {
423 if (RISCVISAInfo::isSupportedExtension(Ext, Major, Minor))
426 if (!RISCVISAInfo::isSupportedExtension(Ext))
427 return getErrorForInvalidExt(Ext);
432 Error += " for extension '" + Ext.str() + "'";
510 StringRef Ext = Arch.slice(0, Idx);
514 std::tie(Prefix, MinorVersionStr) = Ext.rsplit('p');
643 for (const char *Ext : RISCVGImplications) {
644 auto Version = findDefaultVersion(Ext);
647 ISAInfo->Exts[std::string(Ext)] = {Version->Major, Version->Minor};
664 StringRef Ext = Arch.slice(0, Idx);
669 if (RISCVISAUtils::AllStdExts.contains(Ext.front())) {
670 Name = Ext.take_front(1);
671 Ext = Ext.drop_front();
672 Vers = Ext;
674 } else if (Ext.front() == 'z' || Ext.front() == 's' ||
675 Ext.front() == 'x') {
684 StringRef Type = getExtensionType(Ext);
685 Desc = getExtensionTypeDesc(Ext);
686 auto Pos = findLastNonVersionCharacter(Ext) + 1;
687 Name = Ext.substr(0, Pos);
688 Vers = Ext.substr(Pos);
689 Ext = StringRef();
696 Twine(Ext.front()) + "'");
706 Ext = Ext.substr(ConsumeLength);
718 } while (!Ext.empty());
729 static Error getExtensionRequiresError(StringRef Ext, StringRef ReqExt) {
730 return getError("'" + Ext + "' requires '" + ReqExt +
777 for (auto Ext : XqciExts)
778 if (Exts.count(Ext.str()) && (XLen != 32))
779 return getError("'" + Twine(Ext) + "'" + " is only supported for 'rv32'");
823 for (auto const &Ext : Exts)
824 WorkList.push_back(Ext.first);
894 for (auto const &Ext : Exts) {
895 StringRef ExtName = Ext.first;
935 for (auto const &Ext : Exts) {
936 StringRef ExtName = Ext.first;
937 auto ExtInfo = Ext.second;
977 bool RISCVISAInfo::isSupportedExtensionWithVersion(StringRef Ext) {
978 if (Ext.empty())
981 auto Pos = findLastNonVersionCharacter(Ext) + 1;
982 StringRef Name = Ext.substr(0, Pos);
983 StringRef Vers = Ext.substr(Pos);
997 std::string RISCVISAInfo::getTargetFeatureForExtension(StringRef Ext) {
998 if (Ext.empty())
1001 auto Pos = findLastNonVersionCharacter(Ext) + 1;
1002 StringRef Name = Ext.substr(0, Pos);
1004 if (Pos != Ext.size() && !isSupportedExtensionWithVersion(Ext))
1049 std::pair<int, int> RISCVISAInfo::getRISCVFeaturesBitsInfo(StringRef Ext) {
1054 if (E.ext.equals_insensitive(Ext))