40 for (
const auto &FE : FeatureTable)
41 if (Implies.
test(FE.Value))
60 [[maybe_unused]]
unsigned BitSize = Bits.size();
62 assert(FE.Value < BitSize &&
"Target Feature is out of range");
64 DefaultFeatures[FE.Key] =
true;
66 return DefaultFeatures;
73 "Generic AMDGCN arch not classified correctly!");
83#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) \
86#include "llvm/TargetParser/AMDGPUTargetParser.def"
94#define R600_GPU(NAME, ENUM, FEATURES) \
97#include "llvm/TargetParser/AMDGPUTargetParser.def"
105#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) .Case(NAME, ENUM)
106#define AMDGCN_GPU_ALIAS(NAME, ENUM) .Case(NAME, ENUM)
107#include "llvm/TargetParser/AMDGPUTargetParser.def"
113#define R600_GPU(NAME, ENUM, FEATURES) .Case(NAME, ENUM)
114#define R600_GPU_ALIAS(NAME, ENUM) .Case(NAME, ENUM)
115#include "llvm/TargetParser/AMDGPUTargetParser.def"
121#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) \
124#include "llvm/TargetParser/AMDGPUTargetParser.def"
132#define R600_GPU(NAME, ENUM, FEATURES) \
135#include "llvm/TargetParser/AMDGPUTargetParser.def"
144#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) NAME,
145#define AMDGCN_GPU_ALIAS(NAME, ENUM) NAME,
146#include "llvm/TargetParser/AMDGPUTargetParser.def"
152#define R600_GPU(NAME, ENUM, FEATURES) NAME,
153#define R600_GPU_ALIAS(NAME, ENUM) NAME,
154#include "llvm/TargetParser/AMDGPUTargetParser.def"
161 if (GPU ==
"generic-hsa")
163 if (GPU ==
"generic")
169#define MAKE_ISAVERSION(A, B, C) {A, B, C}
170#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) \
172 return MAKE_ISAVERSION ISAVERSION;
173#include "llvm/TargetParser/AMDGPUTargetParser.def"
174#undef MAKE_ISAVERSION
189static std::pair<FeatureError, StringRef>
193 const bool IsNullGPU = GPU.
empty();
194 const bool TargetHasWave32 = DefaultFeatures.
count(
"wavefrontsize32");
195 const bool TargetHasWave64 = DefaultFeatures.
count(
"wavefrontsize64");
197 auto Wave32Itr = Features.
find(
"wavefrontsize32");
198 auto Wave64Itr = Features.
find(
"wavefrontsize64");
199 const bool EnableWave32 =
200 Wave32Itr != Features.
end() && Wave32Itr->getValue();
201 const bool EnableWave64 =
202 Wave64Itr != Features.
end() && Wave64Itr->getValue();
203 const bool DisableWave32 =
204 Wave32Itr != Features.
end() && !Wave32Itr->getValue();
205 const bool DisableWave64 =
206 Wave64Itr != Features.
end() && !Wave64Itr->getValue();
208 if (EnableWave32 && EnableWave64)
210 "'+wavefrontsize32' and '+wavefrontsize64' are mutually exclusive"};
211 if (DisableWave32 && DisableWave64)
213 "'-wavefrontsize32' and '-wavefrontsize64' are mutually exclusive"};
216 if (TargetHasWave64) {
223 if (TargetHasWave32) {
233 if (!IsNullGPU && !EnableWave32 && !EnableWave64 && !TargetHasWave32 &&
235 Features.
insert(std::make_pair(
"wavefrontsize32",
true));
237 for (
const auto &Entry : DefaultFeatures) {
238 if (!Features.
count(Entry.getKey()))
239 Features[Entry.getKey()] = Entry.getValue();
255 case GK_GFX12_5_GENERIC:
256 Features[
"ci-insts"] =
true;
257 Features[
"dot7-insts"] =
true;
258 Features[
"dot8-insts"] =
true;
259 Features[
"dl-insts"] =
true;
260 Features[
"16-bit-insts"] =
true;
261 Features[
"dpp"] =
true;
262 Features[
"gfx8-insts"] =
true;
263 Features[
"gfx9-insts"] =
true;
264 Features[
"gfx10-insts"] =
true;
265 Features[
"gfx10-3-insts"] =
true;
266 Features[
"gfx11-insts"] =
true;
267 Features[
"gfx12-insts"] =
true;
268 Features[
"gfx1250-insts"] =
true;
269 Features[
"bitop3-insts"] =
true;
270 Features[
"prng-inst"] =
true;
271 Features[
"tanh-insts"] =
true;
272 Features[
"tensor-cvt-lut-insts"] =
true;
273 Features[
"transpose-load-f4f6-insts"] =
true;
274 Features[
"bf16-trans-insts"] =
true;
275 Features[
"bf16-cvt-insts"] =
true;
276 Features[
"bf16-pk-insts"] =
true;
277 Features[
"fp8-conversion-insts"] =
true;
278 Features[
"fp8e5m3-insts"] =
true;
279 Features[
"permlane16-swap"] =
true;
280 Features[
"ashr-pk-insts"] =
true;
281 Features[
"add-min-max-insts"] =
true;
282 Features[
"pk-add-min-max-insts"] =
true;
283 Features[
"atomic-buffer-pk-add-bf16-inst"] =
true;
284 Features[
"vmem-pref-insts"] =
true;
285 Features[
"atomic-fadd-rtn-insts"] =
true;
286 Features[
"atomic-buffer-global-pk-add-f16-insts"] =
true;
287 Features[
"atomic-flat-pk-add-16-insts"] =
true;
288 Features[
"atomic-global-pk-add-bf16-inst"] =
true;
289 Features[
"atomic-ds-pk-add-16-insts"] =
true;
290 Features[
"setprio-inc-wg-inst"] =
true;
291 Features[
"s-wakeup-barrier-inst"] =
true;
292 Features[
"atomic-fmin-fmax-global-f32"] =
true;
293 Features[
"atomic-fmin-fmax-global-f64"] =
true;
294 Features[
"wavefrontsize32"] =
true;
295 Features[
"clusters"] =
true;
296 Features[
"mcast-load-insts"] =
true;
297 Features[
"cube-insts"] =
true;
298 Features[
"lerp-inst"] =
true;
299 Features[
"sad-insts"] =
true;
300 Features[
"qsad-insts"] =
true;
301 Features[
"cvt-pknorm-vop2-insts"] =
true;
305 case GK_GFX12_GENERIC:
306 Features[
"ci-insts"] =
true;
307 Features[
"dot7-insts"] =
true;
308 Features[
"dot8-insts"] =
true;
309 Features[
"dot9-insts"] =
true;
310 Features[
"dot10-insts"] =
true;
311 Features[
"dot11-insts"] =
true;
312 Features[
"dot12-insts"] =
true;
313 Features[
"dl-insts"] =
true;
314 Features[
"atomic-ds-pk-add-16-insts"] =
true;
315 Features[
"atomic-flat-pk-add-16-insts"] =
true;
316 Features[
"atomic-buffer-global-pk-add-f16-insts"] =
true;
317 Features[
"atomic-buffer-pk-add-bf16-inst"] =
true;
318 Features[
"atomic-global-pk-add-bf16-inst"] =
true;
319 Features[
"16-bit-insts"] =
true;
320 Features[
"dpp"] =
true;
321 Features[
"gfx8-insts"] =
true;
322 Features[
"gfx9-insts"] =
true;
323 Features[
"gfx10-insts"] =
true;
324 Features[
"gfx10-3-insts"] =
true;
325 Features[
"gfx11-insts"] =
true;
326 Features[
"gfx12-insts"] =
true;
327 Features[
"atomic-fadd-rtn-insts"] =
true;
328 Features[
"image-insts"] =
true;
329 Features[
"cube-insts"] =
true;
330 Features[
"lerp-inst"] =
true;
331 Features[
"sad-insts"] =
true;
332 Features[
"qsad-insts"] =
true;
333 Features[
"cvt-pknorm-vop2-insts"] =
true;
334 Features[
"fp8-conversion-insts"] =
true;
335 Features[
"wmma-128b-insts"] =
true;
336 Features[
"atomic-fmin-fmax-global-f32"] =
true;
339 Features[
"ci-insts"] =
true;
340 Features[
"dot7-insts"] =
true;
341 Features[
"dot8-insts"] =
true;
342 Features[
"dot9-insts"] =
true;
343 Features[
"dot10-insts"] =
true;
344 Features[
"dot12-insts"] =
true;
345 Features[
"dl-insts"] =
true;
346 Features[
"16-bit-insts"] =
true;
347 Features[
"dpp"] =
true;
348 Features[
"gfx8-insts"] =
true;
349 Features[
"gfx9-insts"] =
true;
350 Features[
"gfx10-insts"] =
true;
351 Features[
"gfx10-3-insts"] =
true;
352 Features[
"gfx11-insts"] =
true;
353 Features[
"atomic-fadd-rtn-insts"] =
true;
354 Features[
"image-insts"] =
true;
355 Features[
"cube-insts"] =
true;
356 Features[
"lerp-inst"] =
true;
357 Features[
"sad-insts"] =
true;
358 Features[
"qsad-insts"] =
true;
359 Features[
"cvt-pknorm-vop2-insts"] =
true;
360 Features[
"gws"] =
true;
361 Features[
"dot11-insts"] =
true;
362 Features[
"fp8-conversion-insts"] =
true;
363 Features[
"wmma-128b-insts"] =
true;
364 Features[
"atomic-fmin-fmax-global-f32"] =
true;
374 case GK_GFX11_GENERIC:
375 Features[
"ci-insts"] =
true;
376 Features[
"dot5-insts"] =
true;
377 Features[
"dot7-insts"] =
true;
378 Features[
"dot8-insts"] =
true;
379 Features[
"dot9-insts"] =
true;
380 Features[
"dot10-insts"] =
true;
381 Features[
"dot12-insts"] =
true;
382 Features[
"dl-insts"] =
true;
383 Features[
"16-bit-insts"] =
true;
384 Features[
"dpp"] =
true;
385 Features[
"gfx8-insts"] =
true;
386 Features[
"gfx9-insts"] =
true;
387 Features[
"gfx10-insts"] =
true;
388 Features[
"gfx10-3-insts"] =
true;
389 Features[
"gfx11-insts"] =
true;
390 Features[
"atomic-fadd-rtn-insts"] =
true;
391 Features[
"image-insts"] =
true;
392 Features[
"cube-insts"] =
true;
393 Features[
"lerp-inst"] =
true;
394 Features[
"sad-insts"] =
true;
395 Features[
"qsad-insts"] =
true;
396 Features[
"cvt-pknorm-vop2-insts"] =
true;
397 Features[
"gws"] =
true;
398 Features[
"wmma-256b-insts"] =
true;
399 Features[
"atomic-fmin-fmax-global-f32"] =
true;
408 case GK_GFX10_3_GENERIC:
409 Features[
"ci-insts"] =
true;
410 Features[
"dot1-insts"] =
true;
411 Features[
"dot2-insts"] =
true;
412 Features[
"dot5-insts"] =
true;
413 Features[
"dot6-insts"] =
true;
414 Features[
"dot7-insts"] =
true;
415 Features[
"dot10-insts"] =
true;
416 Features[
"dl-insts"] =
true;
417 Features[
"16-bit-insts"] =
true;
418 Features[
"dpp"] =
true;
419 Features[
"gfx8-insts"] =
true;
420 Features[
"gfx9-insts"] =
true;
421 Features[
"gfx10-insts"] =
true;
422 Features[
"gfx10-3-insts"] =
true;
423 Features[
"image-insts"] =
true;
424 Features[
"s-memrealtime"] =
true;
425 Features[
"s-memtime-inst"] =
true;
426 Features[
"gws"] =
true;
427 Features[
"vmem-to-lds-load-insts"] =
true;
428 Features[
"atomic-fmin-fmax-global-f32"] =
true;
429 Features[
"atomic-fmin-fmax-global-f64"] =
true;
430 Features[
"cube-insts"] =
true;
431 Features[
"lerp-inst"] =
true;
432 Features[
"sad-insts"] =
true;
433 Features[
"qsad-insts"] =
true;
434 Features[
"cvt-pknorm-vop2-insts"] =
true;
438 Features[
"dot1-insts"] =
true;
439 Features[
"dot2-insts"] =
true;
440 Features[
"dot5-insts"] =
true;
441 Features[
"dot6-insts"] =
true;
442 Features[
"dot7-insts"] =
true;
443 Features[
"dot10-insts"] =
true;
447 case GK_GFX10_1_GENERIC:
448 Features[
"dl-insts"] =
true;
449 Features[
"ci-insts"] =
true;
450 Features[
"16-bit-insts"] =
true;
451 Features[
"dpp"] =
true;
452 Features[
"gfx8-insts"] =
true;
453 Features[
"gfx9-insts"] =
true;
454 Features[
"gfx10-insts"] =
true;
455 Features[
"image-insts"] =
true;
456 Features[
"s-memrealtime"] =
true;
457 Features[
"s-memtime-inst"] =
true;
458 Features[
"gws"] =
true;
459 Features[
"vmem-to-lds-load-insts"] =
true;
460 Features[
"atomic-fmin-fmax-global-f32"] =
true;
461 Features[
"atomic-fmin-fmax-global-f64"] =
true;
462 Features[
"cube-insts"] =
true;
463 Features[
"lerp-inst"] =
true;
464 Features[
"sad-insts"] =
true;
465 Features[
"qsad-insts"] =
true;
466 Features[
"cvt-pknorm-vop2-insts"] =
true;
469 Features[
"bitop3-insts"] =
true;
470 Features[
"fp6bf6-cvt-scale-insts"] =
true;
471 Features[
"fp4-cvt-scale-insts"] =
true;
472 Features[
"bf8-cvt-scale-insts"] =
true;
473 Features[
"fp8-cvt-scale-insts"] =
true;
474 Features[
"f16bf16-to-fp6bf6-cvt-scale-insts"] =
true;
475 Features[
"f32-to-f16bf16-cvt-sr-insts"] =
true;
476 Features[
"prng-inst"] =
true;
477 Features[
"permlane16-swap"] =
true;
478 Features[
"permlane32-swap"] =
true;
479 Features[
"ashr-pk-insts"] =
true;
480 Features[
"dot12-insts"] =
true;
481 Features[
"dot13-insts"] =
true;
482 Features[
"atomic-buffer-pk-add-bf16-inst"] =
true;
483 Features[
"gfx950-insts"] =
true;
486 Features[
"fp8-insts"] =
true;
487 Features[
"fp8-conversion-insts"] =
true;
488 if (Kind != GK_GFX950)
489 Features[
"xf32-insts"] =
true;
491 case GK_GFX9_4_GENERIC:
492 Features[
"gfx940-insts"] =
true;
493 Features[
"atomic-ds-pk-add-16-insts"] =
true;
494 Features[
"atomic-flat-pk-add-16-insts"] =
true;
495 Features[
"atomic-global-pk-add-bf16-inst"] =
true;
496 Features[
"gfx90a-insts"] =
true;
497 Features[
"atomic-buffer-global-pk-add-f16-insts"] =
true;
498 Features[
"atomic-fadd-rtn-insts"] =
true;
499 Features[
"dot3-insts"] =
true;
500 Features[
"dot4-insts"] =
true;
501 Features[
"dot5-insts"] =
true;
502 Features[
"dot6-insts"] =
true;
503 Features[
"mai-insts"] =
true;
504 Features[
"dl-insts"] =
true;
505 Features[
"dot1-insts"] =
true;
506 Features[
"dot2-insts"] =
true;
507 Features[
"dot7-insts"] =
true;
508 Features[
"dot10-insts"] =
true;
509 Features[
"gfx9-insts"] =
true;
510 Features[
"gfx8-insts"] =
true;
511 Features[
"16-bit-insts"] =
true;
512 Features[
"dpp"] =
true;
513 Features[
"s-memrealtime"] =
true;
514 Features[
"ci-insts"] =
true;
515 Features[
"s-memtime-inst"] =
true;
516 Features[
"gws"] =
true;
517 Features[
"vmem-to-lds-load-insts"] =
true;
518 Features[
"atomic-fmin-fmax-global-f64"] =
true;
519 Features[
"wavefrontsize64"] =
true;
520 Features[
"cube-insts"] =
true;
521 Features[
"lerp-inst"] =
true;
522 Features[
"sad-insts"] =
true;
523 Features[
"qsad-insts"] =
true;
524 Features[
"cvt-pknorm-vop2-insts"] =
true;
527 Features[
"gfx90a-insts"] =
true;
528 Features[
"atomic-buffer-global-pk-add-f16-insts"] =
true;
529 Features[
"atomic-fadd-rtn-insts"] =
true;
530 Features[
"atomic-fmin-fmax-global-f64"] =
true;
533 Features[
"dot3-insts"] =
true;
534 Features[
"dot4-insts"] =
true;
535 Features[
"dot5-insts"] =
true;
536 Features[
"dot6-insts"] =
true;
537 Features[
"mai-insts"] =
true;
540 Features[
"dl-insts"] =
true;
541 Features[
"dot1-insts"] =
true;
542 Features[
"dot2-insts"] =
true;
543 Features[
"dot7-insts"] =
true;
544 Features[
"dot10-insts"] =
true;
551 case GK_GFX9_GENERIC:
552 Features[
"gfx9-insts"] =
true;
553 Features[
"vmem-to-lds-load-insts"] =
true;
560 Features[
"gfx8-insts"] =
true;
561 Features[
"16-bit-insts"] =
true;
562 Features[
"dpp"] =
true;
563 Features[
"s-memrealtime"] =
true;
564 Features[
"ci-insts"] =
true;
565 Features[
"image-insts"] =
true;
566 Features[
"s-memtime-inst"] =
true;
567 Features[
"gws"] =
true;
568 Features[
"wavefrontsize64"] =
true;
569 Features[
"cube-insts"] =
true;
570 Features[
"lerp-inst"] =
true;
571 Features[
"sad-insts"] =
true;
572 Features[
"qsad-insts"] =
true;
573 Features[
"cvt-pknorm-vop2-insts"] =
true;
581 Features[
"ci-insts"] =
true;
582 Features[
"cube-insts"] =
true;
583 Features[
"lerp-inst"] =
true;
584 Features[
"sad-insts"] =
true;
585 Features[
"qsad-insts"] =
true;
586 Features[
"cvt-pknorm-vop2-insts"] =
true;
587 Features[
"image-insts"] =
true;
588 Features[
"s-memtime-inst"] =
true;
589 Features[
"gws"] =
true;
590 Features[
"atomic-fmin-fmax-global-f32"] =
true;
591 Features[
"atomic-fmin-fmax-global-f64"] =
true;
592 Features[
"wavefrontsize64"] =
true;
597 Features[
"image-insts"] =
true;
598 Features[
"s-memtime-inst"] =
true;
599 Features[
"gws"] =
true;
600 Features[
"atomic-fmin-fmax-global-f32"] =
true;
601 Features[
"atomic-fmin-fmax-global-f64"] =
true;
602 Features[
"wavefrontsize64"] =
true;
603 Features[
"cube-insts"] =
true;
604 Features[
"lerp-inst"] =
true;
605 Features[
"sad-insts"] =
true;
606 Features[
"cvt-pknorm-vop2-insts"] =
true;
618std::pair<FeatureError, StringRef>
626 Features[
"16-bit-insts"] =
true;
627 Features[
"ashr-pk-insts"] =
true;
628 Features[
"atomic-buffer-pk-add-bf16-inst"] =
true;
629 Features[
"atomic-buffer-global-pk-add-f16-insts"] =
true;
630 Features[
"atomic-ds-pk-add-16-insts"] =
true;
631 Features[
"atomic-fadd-rtn-insts"] =
true;
632 Features[
"atomic-flat-pk-add-16-insts"] =
true;
633 Features[
"atomic-global-pk-add-bf16-inst"] =
true;
634 Features[
"bf16-trans-insts"] =
true;
635 Features[
"bf16-cvt-insts"] =
true;
636 Features[
"bf8-cvt-scale-insts"] =
true;
637 Features[
"bitop3-insts"] =
true;
638 Features[
"ci-insts"] =
true;
639 Features[
"dl-insts"] =
true;
640 Features[
"dot1-insts"] =
true;
641 Features[
"dot2-insts"] =
true;
642 Features[
"dot3-insts"] =
true;
643 Features[
"dot4-insts"] =
true;
644 Features[
"dot5-insts"] =
true;
645 Features[
"dot6-insts"] =
true;
646 Features[
"dot7-insts"] =
true;
647 Features[
"dot8-insts"] =
true;
648 Features[
"dot9-insts"] =
true;
649 Features[
"dot10-insts"] =
true;
650 Features[
"dot11-insts"] =
true;
651 Features[
"dot12-insts"] =
true;
652 Features[
"dot13-insts"] =
true;
653 Features[
"dpp"] =
true;
654 Features[
"f16bf16-to-fp6bf6-cvt-scale-insts"] =
true;
655 Features[
"f32-to-f16bf16-cvt-sr-insts"] =
true;
656 Features[
"fp4-cvt-scale-insts"] =
true;
657 Features[
"fp6bf6-cvt-scale-insts"] =
true;
658 Features[
"fp8e5m3-insts"] =
true;
659 Features[
"fp8-conversion-insts"] =
true;
660 Features[
"fp8-cvt-scale-insts"] =
true;
661 Features[
"fp8-insts"] =
true;
662 Features[
"gfx8-insts"] =
true;
663 Features[
"gfx9-insts"] =
true;
664 Features[
"gfx90a-insts"] =
true;
665 Features[
"gfx940-insts"] =
true;
666 Features[
"gfx950-insts"] =
true;
667 Features[
"gfx10-insts"] =
true;
668 Features[
"gfx10-3-insts"] =
true;
669 Features[
"gfx11-insts"] =
true;
670 Features[
"gfx12-insts"] =
true;
671 Features[
"gfx1250-insts"] =
true;
672 Features[
"gws"] =
true;
673 Features[
"image-insts"] =
true;
674 Features[
"mai-insts"] =
true;
675 Features[
"permlane16-swap"] =
true;
676 Features[
"permlane32-swap"] =
true;
677 Features[
"prng-inst"] =
true;
678 Features[
"setprio-inc-wg-inst"] =
true;
679 Features[
"s-memrealtime"] =
true;
680 Features[
"s-memtime-inst"] =
true;
681 Features[
"tanh-insts"] =
true;
682 Features[
"tensor-cvt-lut-insts"] =
true;
683 Features[
"transpose-load-f4f6-insts"] =
true;
684 Features[
"vmem-pref-insts"] =
true;
685 Features[
"vmem-to-lds-load-insts"] =
true;
686 Features[
"wavefrontsize32"] =
true;
687 Features[
"wavefrontsize64"] =
true;
688 }
else if (
T.isAMDGCN()) {
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
static void fillAMDGCNFeatureMap(StringRef GPU, const Triple &T, StringMap< bool > &Features)
Fills Features map with default values for given target GPU.
static void setImpliedBits(FeatureBitset &Bits, const FeatureBitset &Implies, ArrayRef< BasicSubtargetFeatureKV > FeatureTable)
For each feature that is (transitively) implied by this feature, set it.
static std::pair< FeatureError, StringRef > insertWaveSizeFeature(StringRef GPU, const Triple &T, const StringMap< bool > &DefaultFeatures, StringMap< bool > &Features)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
const FeatureBitset & getAsBitset() const
Container class for subtarget features.
constexpr bool test(unsigned I) const
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void append(ItTy in_start, ItTy in_end)
Add the specified range to the end of the SmallVector.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
iterator find(StringRef Key)
size_type count(StringRef Key) const
count - Return 1 if the element is in the map, 0 otherwise.
bool insert(MapEntryTy *KeyValue)
insert - Insert the specified key/value pair into the map.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
StringRef take_front(size_t N=1) const
Return a StringRef equal to 'this' but with only the first N elements remaining.
size_t find(char C, size_t From=0) const
Search for the first character C in the string.
bool ends_with(StringRef Suffix) const
Check if this string ends with the given Suffix.
StringRef drop_back(size_t N=1) const
Return a StringRef equal to 'this' but with the last N elements dropped.
A switch()-like statement whose cases are string literals.
Triple - Helper class for working with autoconf configuration names.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
LLVM_ABI StringRef getArchNameR600(GPUKind AK)
GPUKind
GPU kinds supported by the AMDGPU target.
@ GK_AMDGCN_GENERIC_FIRST
LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch)
LLVM_ABI void fillValidArchListR600(SmallVectorImpl< StringRef > &Values)
LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK)
LLVM_ABI IsaVersion getIsaVersion(StringRef GPU)
LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl< StringRef > &Values)
LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU)
@ UNSUPPORTED_TARGET_FEATURE
@ INVALID_FEATURE_COMBINATION
LLVM_ABI std::pair< FeatureError, StringRef > fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap< bool > &Features)
Fills Features map with default values for given target GPU.
LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK)
LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK)
LLVM_ABI unsigned getArchAttrR600(GPUKind AK)
LLVM_ABI GPUKind parseArchR600(StringRef CPU)
This is an optimization pass for GlobalISel generic memory operations.
auto find(R &&Range, const T &Val)
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...
LLVM_ABI std::optional< llvm::StringMap< bool > > getCPUDefaultTargetFeatures(StringRef CPU, ArrayRef< BasicSubtargetSubTypeKV > ProcDesc, ArrayRef< BasicSubtargetFeatureKV > ProcFeatures)
Instruction set architecture version.
Used to provide key value pairs for feature and CPU bit flags.
FeatureBitArray Implies
K-V bit mask.