================ @@ -84,31 +84,27 @@ OffloadTargetInfo::OffloadTargetInfo(const StringRef Target, : BundlerConfig(BC) { // TODO: Add error checking from ClangOffloadBundler.cpp - auto TargetFeatures = Target.split(':'); - auto TripleOrGPU = TargetFeatures.first.rsplit('-'); - - if (clang::StringToOffloadArch(TripleOrGPU.second) != - clang::OffloadArch::UNKNOWN) { - auto KindTriple = TripleOrGPU.first.split('-'); - this->OffloadKind = KindTriple.first; - - // Enforce optional env field to standardize bundles - llvm::Triple t = llvm::Triple(KindTriple.second); - this->Triple = llvm::Triple(t.getArchName(), t.getVendorName(), - t.getOSName(), t.getEnvironmentName()); - - this->TargetID = Target.substr(Target.find(TripleOrGPU.second)); - } else { - auto KindTriple = TargetFeatures.first.split('-'); - this->OffloadKind = KindTriple.first; - - // Enforce optional env field to standardize bundles - llvm::Triple t = llvm::Triple(KindTriple.second); - this->Triple = llvm::Triple(t.getArchName(), t.getVendorName(), - t.getOSName(), t.getEnvironmentName()); - + // <kind>-<triple>[-<target id>[:target features]] + // <triple> := <arch>-<vendor>-<os>-<env> + SmallVector<StringRef, 6> Components; + Target.split(Components, '-', /*MaxSplit=*/5); + assert((Components.size() == 5 || Components.size() == 6) && ---------------- shiltian wrote:
I added some error check mechanism but that is really limited. If someone still uses 3-field triple, they will get an error saying `<kind>-<arch>-<vendor>-<os>--` is not found. We really can't tell whether a string is a valid data triple or not, given the flexibility of how data layout parsing is. However, it will error out later when it comes to comparison/ https://github.com/llvm/llvm-project/pull/122629 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits