================
@@ -63,3 +64,26 @@ std::string llvm::IntelGPU::getNumericArchName(uint32_t 
GPUIPVersion) {
   return ("xe_" + Twine(Major) + "." + Twine(Minor) + "." + Twine(Revision))
       .str();
 }
+
+IGCATarget llvm::IntelGPU::parseIGCATarget(StringRef MaybeTarget) {
+  return StringSwitch<IGCATarget>(MaybeTarget)
+#define INTEL_IGCA_TARGET(NAME, TARGET, FEATURE_SET)                           
\
+  .Case(NAME, IGCATarget(TARGET, IGCAFeatureSet::FEATURE_SET))
+#include "llvm/TargetParser/IntelGPUTargetParser.def"
+      .Default(IGCATarget::invalid());
+}
+
+StringRef llvm::IntelGPU::getIGCATargetName(IGCATarget T) {
+  switch (T.pack()) {
+#define INTEL_IGCA_TARGET(NAME, TARGET, FEATURE_SET)                           
\
+  case IGCATarget(TARGET, IGCAFeatureSet::FEATURE_SET).pack():                 
\
+    return NAME;
+#include "llvm/TargetParser/IntelGPUTargetParser.def"
+  default:
+    return "";
+  }
+}
+
+// FIXME(IGCA): Make -fsycl --offload-arch provides a list of valid IGCA
+// targets upon a bad IGCA target, similar to how compiling for an nvptx triple
+// returns a list of valid GPU architectures.
----------------
ianayl wrote:

The easiest way to do this would be to add more diagnostics on top of the 
invalid IGCA diagnostic I introduced in this PR, but this is not what is done 
by AMD and NVIDIA, they instead relied on `TargetOptions` to produce a list of 
valid CPUs. To not break convention, I'd have to look into modifying that part 
of the code, which seems like it doesn't belong in this PR.

Conveniently, my other PR stacked on this for producing predefined IGCA macros 
touches `TargetOptions` and `TargetInfo`, so I was thinking of looking into it 
there.

https://github.com/llvm/llvm-project/pull/227468
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to