https://github.com/ZijunZhaoCCK updated https://github.com/llvm/llvm-project/pull/78655
>From f440f44e7e270d4636ad39f4e4223c904e496d3a Mon Sep 17 00:00:00 2001 From: zijunzhao <zijunz...@google.com> Date: Fri, 19 Jan 2024 00:47:05 +0000 Subject: [PATCH] Make clang report invalid target versions for all environment. Followup for https://github.com/llvm/llvm-project/pull/75373 1. Make this feature not just available for android, but everyone. 2. Correct some target triples/ 3. Add opencl to the environment type list. --- clang/lib/Driver/Driver.cpp | 19 ++++++++++--------- clang/test/CodeGen/fp128_complex.c | 2 +- clang/test/Driver/mips-features.c | 4 ++-- clang/test/Frontend/fixed_point_bit_widths.c | 4 ++-- llvm/include/llvm/TargetParser/Triple.h | 2 +- llvm/lib/TargetParser/Triple.cpp | 14 ++++++++++++++ 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 1889ea28079df10..2d6986d145483b8 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1430,15 +1430,16 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { const ToolChain &TC = getToolChain( *UArgs, computeTargetTriple(*this, TargetTriple, *UArgs)); - if (TC.getTriple().isAndroid()) { - llvm::Triple Triple = TC.getTriple(); - StringRef TripleVersionName = Triple.getEnvironmentVersionString(); - - if (Triple.getEnvironmentVersion().empty() && TripleVersionName != "") { - Diags.Report(diag::err_drv_triple_version_invalid) - << TripleVersionName << TC.getTripleString(); - ContainsError = true; - } + // Check if the environment version is valid. + llvm::Triple Triple = TC.getTriple(); + StringRef TripleVersionName = Triple.getEnvironmentVersionString(); + StringRef TripleObjectFormat = Triple.getObjectFormatTypeName(Triple.getObjectFormat()); + + if (Triple.getEnvironmentVersion().empty() && TripleVersionName != "" + && TripleVersionName != TripleObjectFormat) { + Diags.Report(diag::err_drv_triple_version_invalid) + << TripleVersionName << TC.getTripleString(); + ContainsError = true; } // Report warning when arm64EC option is overridden by specified target diff --git a/clang/test/CodeGen/fp128_complex.c b/clang/test/CodeGen/fp128_complex.c index 48659d224168416..0e87cbe8ce81219 100644 --- a/clang/test/CodeGen/fp128_complex.c +++ b/clang/test/CodeGen/fp128_complex.c @@ -1,4 +1,4 @@ -// RUN: %clang -target aarch64-linux-gnuabi %s -S -emit-llvm -o - | FileCheck %s +// RUN: %clang -target aarch64-linux-gnueabi %s -S -emit-llvm -o - | FileCheck %s _Complex long double a, b, c, d; void test_fp128_compound_assign(void) { diff --git a/clang/test/Driver/mips-features.c b/clang/test/Driver/mips-features.c index fad6009ffb89bab..18edcd05ea85c9f 100644 --- a/clang/test/Driver/mips-features.c +++ b/clang/test/Driver/mips-features.c @@ -400,12 +400,12 @@ // LONG-CALLS-DEF-NOT: "long-calls" // // -mbranch-likely -// RUN: %clang -target -mips-mti-linux-gnu -### -c %s -mbranch-likely 2>&1 \ +// RUN: %clang -target mips-mti-linux-gnu -### -c %s -mbranch-likely 2>&1 \ // RUN: | FileCheck --check-prefix=BRANCH-LIKELY %s // BRANCH-LIKELY: argument unused during compilation: '-mbranch-likely' // // -mno-branch-likely -// RUN: %clang -target -mips-mti-linux-gnu -### -c %s -mno-branch-likely 2>&1 \ +// RUN: %clang -target mips-mti-linux-gnu -### -c %s -mno-branch-likely 2>&1 \ // RUN: | FileCheck --check-prefix=NO-BRANCH-LIKELY %s // NO-BRANCH-LIKELY: argument unused during compilation: '-mno-branch-likely' diff --git a/clang/test/Frontend/fixed_point_bit_widths.c b/clang/test/Frontend/fixed_point_bit_widths.c index ac8db49ed516aef..e56f787e824f24a 100644 --- a/clang/test/Frontend/fixed_point_bit_widths.c +++ b/clang/test/Frontend/fixed_point_bit_widths.c @@ -1,7 +1,7 @@ // RUN: %clang -x c -ffixed-point -S -emit-llvm -o - %s | FileCheck %s -// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=x86_64-scei-ps4-ubuntu-fast %s | FileCheck %s +// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=x86_64-scei-ps4 %s | FileCheck %s // RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=ppc64 %s | FileCheck %s -// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=x86_64-scei-ps4-windows10pro-fast %s | FileCheck %s +// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=x86_64-scei-ps4 %s | FileCheck %s /* Primary signed _Accum */ diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 95014a546f72453..525ea6df3643ca6 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -273,7 +273,7 @@ class Triple { Callable, Mesh, Amplification, - + OpenCL, OpenHOS, LastEnvironmentType = OpenHOS diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index b9971c25af71f39..7bb2fb9d1365e2f 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -320,6 +320,7 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) { case Callable: return "callable"; case Mesh: return "mesh"; case Amplification: return "amplification"; + case OpenCL: return "opencl"; case OpenHOS: return "ohos"; } @@ -687,6 +688,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) { .StartsWith("callable", Triple::Callable) .StartsWith("mesh", Triple::Mesh) .StartsWith("amplification", Triple::Amplification) + .StartsWith("opencl", Triple::OpenCL) .StartsWith("ohos", Triple::OpenHOS) .Default(Triple::UnknownEnvironment); } @@ -1211,8 +1213,20 @@ VersionTuple Triple::getEnvironmentVersion() const { StringRef Triple::getEnvironmentVersionString() const { StringRef EnvironmentName = getEnvironmentName(); + + // none is a valid environment type - it basically amounts to a freestanding environment. + if (EnvironmentName == "none") + return ""; + StringRef EnvironmentTypeName = getEnvironmentTypeName(getEnvironment()); EnvironmentName.consume_front(EnvironmentTypeName); + + if (EnvironmentName.starts_with("-")) { + // arch-vendor-os-env-obj is correct + StringRef ObjectFormatType = getObjectFormatTypeName(getObjectFormat()); + if (ObjectFormatType == StringRef(EnvironmentName).split('-').second) + return ""; + } return EnvironmentName; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits