https://github.com/ilovepi created https://github.com/llvm/llvm-project/pull/141998
Reverts llvm/llvm-project#140700 This breaks bots both in buildbot and downstream CI: - https://lab.llvm.org/buildbot/#/builders/11/builds/16173 - https://ci.chromium.org/ui/p/fuchsia/builders/toolchain.ci/clang-host-linux-x64/b8713537585914796017/overview >From 21ac3ae0e4be720474a1eceb287eada6bd07c1f4 Mon Sep 17 00:00:00 2001 From: Paul Kirth <paulki...@google.com> Date: Thu, 29 May 2025 10:49:51 -0700 Subject: [PATCH] Revert "[Clang][LoongArch] Support target attribute for function (#140700)" This reverts commit b359422eebbc61f0e0fb03c27ec1a93c818701ee. --- clang/lib/Basic/Targets/LoongArch.cpp | 71 -------------- clang/lib/Basic/Targets/LoongArch.h | 4 - clang/lib/Sema/SemaDeclAttr.cpp | 11 --- clang/test/CodeGen/LoongArch/targetattr.c | 92 ------------------- clang/test/Sema/attr-target-loongarch.c | 25 ----- .../llvm/TargetParser/LoongArchTargetParser.h | 1 - .../TargetParser/LoongArchTargetParser.cpp | 12 --- 7 files changed, 216 deletions(-) delete mode 100644 clang/test/CodeGen/LoongArch/targetattr.c delete mode 100644 clang/test/Sema/attr-target-loongarch.c diff --git a/clang/lib/Basic/Targets/LoongArch.cpp b/clang/lib/Basic/Targets/LoongArch.cpp index 6e5e5a6d1a3e6..f4bcb54bd470d 100644 --- a/clang/lib/Basic/Targets/LoongArch.cpp +++ b/clang/lib/Basic/Targets/LoongArch.cpp @@ -393,73 +393,6 @@ bool LoongArchTargetInfo::handleTargetFeatures( return true; } -enum class AttrFeatureKind { Arch, Tune, NoFeature, Feature }; - -static std::pair<AttrFeatureKind, llvm::StringRef> -getAttrFeatureTypeAndValue(llvm::StringRef AttrFeature) { - if (auto Split = AttrFeature.split("="); !Split.second.empty()) { - if (Split.first.trim() == "arch") - return {AttrFeatureKind::Arch, Split.second.trim()}; - if (Split.first.trim() == "tune") - return {AttrFeatureKind::Tune, Split.second.trim()}; - } - if (AttrFeature.starts_with("no-")) - return {AttrFeatureKind::NoFeature, AttrFeature.drop_front(3)}; - return {AttrFeatureKind::Feature, AttrFeature}; -} - -ParsedTargetAttr -LoongArchTargetInfo::parseTargetAttr(StringRef Features) const { - ParsedTargetAttr Ret; - if (Features == "default") - return Ret; - SmallVector<StringRef, 1> AttrFeatures; - Features.split(AttrFeatures, ","); - - for (auto &Feature : AttrFeatures) { - auto [Kind, Value] = getAttrFeatureTypeAndValue(Feature.trim()); - - switch (Kind) { - case AttrFeatureKind::Arch: { - if (llvm::LoongArch::isValidArchName(Value) || Value == "la64v1.0" || - Value == "la64v1.1") { - std::vector<llvm::StringRef> ArchFeatures; - if (llvm::LoongArch::getArchFeatures(Value, ArchFeatures)) { - Ret.Features.insert(Ret.Features.end(), ArchFeatures.begin(), - ArchFeatures.end()); - } - - if (!Ret.CPU.empty()) - Ret.Duplicate = "arch="; - else if (Value == "la64v1.0" || Value == "la64v1.1") - Ret.CPU = "loongarch64"; - else - Ret.CPU = Value; - } else { - Ret.Features.push_back("!arch=" + Value.str()); - } - break; - } - - case AttrFeatureKind::Tune: - if (!Ret.Tune.empty()) - Ret.Duplicate = "tune="; - else - Ret.Tune = Value; - break; - - case AttrFeatureKind::NoFeature: - Ret.Features.push_back("-" + Value.str()); - break; - - case AttrFeatureKind::Feature: - Ret.Features.push_back("+" + Value.str()); - break; - } - } - return Ret; -} - bool LoongArchTargetInfo::isValidCPUName(StringRef Name) const { return llvm::LoongArch::isValidCPUName(Name); } @@ -468,7 +401,3 @@ void LoongArchTargetInfo::fillValidCPUList( SmallVectorImpl<StringRef> &Values) const { llvm::LoongArch::fillValidCPUList(Values); } - -bool LoongArchTargetInfo::isValidFeatureName(StringRef Name) const { - return llvm::LoongArch::isValidFeatureName(Name); -} diff --git a/clang/lib/Basic/Targets/LoongArch.h b/clang/lib/Basic/Targets/LoongArch.h index a83bb925bc310..4c7b53abfef9b 100644 --- a/clang/lib/Basic/Targets/LoongArch.h +++ b/clang/lib/Basic/Targets/LoongArch.h @@ -101,9 +101,6 @@ class LLVM_LIBRARY_VISIBILITY LoongArchTargetInfo : public TargetInfo { bool handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) override; - ParsedTargetAttr parseTargetAttr(StringRef Str) const override; - bool supportsTargetAttributeTune() const override { return true; } - bool initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, @@ -113,7 +110,6 @@ class LLVM_LIBRARY_VISIBILITY LoongArchTargetInfo : public TargetInfo { bool isValidCPUName(StringRef Name) const override; void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override; - bool isValidFeatureName(StringRef Name) const override; }; class LLVM_LIBRARY_VISIBILITY LoongArch32TargetInfo diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 5bc358ca5fca0..119ba8486b09f 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3195,17 +3195,6 @@ bool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) { } } - if (Context.getTargetInfo().getTriple().isLoongArch()) { - for (const auto &Feature : ParsedAttrs.Features) { - StringRef CurFeature = Feature; - if (CurFeature.starts_with("!arch=")) { - StringRef ArchValue = CurFeature.split("=").second.trim(); - return Diag(LiteralLoc, diag::err_attribute_unsupported) - << "target(arch=..)" << ArchValue; - } - } - } - if (ParsedAttrs.Duplicate != "") return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Duplicate << None << ParsedAttrs.Duplicate << Target; diff --git a/clang/test/CodeGen/LoongArch/targetattr.c b/clang/test/CodeGen/LoongArch/targetattr.c deleted file mode 100644 index 5546af8fc856c..0000000000000 --- a/clang/test/CodeGen/LoongArch/targetattr.c +++ /dev/null @@ -1,92 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 5 -// RUN: %clang --target=loongarch64-linux-gnu %s -S -emit-llvm -o - \ -// RUN: | FileCheck %s - -__attribute__((target("div32"))) -// CHECK-LABEL: define dso_local void @testdiv32( -// CHECK-SAME: ) #[[ATTR0:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void testdiv32() {} - -__attribute__((target("arch=loongarch64"))) -// CHECK-LABEL: define dso_local void @testLoongarch64( -// CHECK-SAME: ) #[[ATTR1:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void testLoongarch64() {} - -__attribute__((target("arch=la64v1.0"))) -// CHECK-LABEL: define dso_local void @testLa64v10( -// CHECK-SAME: ) #[[ATTR1]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void testLa64v10() {} - -__attribute__((target("arch=la64v1.1"))) -// CHECK-LABEL: define dso_local void @testLa64v11( -// CHECK-SAME: ) #[[ATTR2:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void testLa64v11() {} - -__attribute__((target("arch=la464"))) -// CHECK-LABEL: define dso_local void @testLa464( -// CHECK-SAME: ) #[[ATTR3:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void testLa464() {} - -__attribute__((target("arch=la664"))) -// CHECK-LABEL: define dso_local void @testLa664( -// CHECK-SAME: ) #[[ATTR4:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void testLa664() {} - -__attribute__((target("arch=la664, no-div32"))) -// CHECK-LABEL: define dso_local void @la664Nodiv32( -// CHECK-SAME: ) #[[ATTR5:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void la664Nodiv32() {} - -__attribute__((target("tune=la464"))) -// CHECK-LABEL: define dso_local void @tuneLa464( -// CHECK-SAME: ) #[[ATTR6:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void tuneLa464() {} - -__attribute__((target("arch=la464, tune=la664"))) -// CHECK-LABEL: define dso_local void @archLa464tuneLa664( -// CHECK-SAME: ) #[[ATTR7:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: ret void -// -void archLa464tuneLa664() {} - -//. -// CHECK: attributes #[[ATTR0]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="loongarch64" "target-features"="+64bit,+d,+div32,+f,+lsx,+ual" } -// CHECK: attributes #[[ATTR1]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="loongarch64" "target-features"="+64bit,+d,+f,+lsx,+ual" } -// CHECK: attributes #[[ATTR2]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="loongarch64" "target-features"="+64bit,+d,+div32,+f,+frecipe,+lam-bh,+lamcas,+ld-seq-sa,+lsx,+scq,+ual" } -// CHECK: attributes #[[ATTR3]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="la464" "target-features"="+64bit,+d,+f,+lasx,+lsx,+ual" } -// CHECK: attributes #[[ATTR4]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="la664" "target-features"="+64bit,+d,+div32,+f,+frecipe,+lam-bh,+lamcas,+lasx,+ld-seq-sa,+lsx,+scq,+ual" } -// CHECK: attributes #[[ATTR5]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="la664" "target-features"="+64bit,+d,+f,+frecipe,+lam-bh,+lamcas,+lasx,+ld-seq-sa,+lsx,+scq,+ual,-div32" } -// CHECK: attributes #[[ATTR6]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="loongarch64" "target-features"="+64bit,+d,+f,+lsx,+ual" "tune-cpu"="la464" } -// CHECK: attributes #[[ATTR7]] = { noinline nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="la464" "target-features"="+64bit,+d,+f,+lasx,+lsx,+ual" "tune-cpu"="la664" } -//. -// CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4} -// CHECK: [[META1:![0-9]+]] = !{i32 8, !"PIC Level", i32 2} -// CHECK: [[META2:![0-9]+]] = !{i32 7, !"PIE Level", i32 2} -// CHECK: [[META3:![0-9]+]] = !{i32 7, !"frame-pointer", i32 2} -// CHECK: [[META4:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"} -//. diff --git a/clang/test/Sema/attr-target-loongarch.c b/clang/test/Sema/attr-target-loongarch.c deleted file mode 100644 index 10ac8334bdb0c..0000000000000 --- a/clang/test/Sema/attr-target-loongarch.c +++ /dev/null @@ -1,25 +0,0 @@ -// RUN: %clang_cc1 -triple loongarch64-linux-gnu -fsyntax-only -verify %s - -// expected-error@+1 {{function multiversioning is not supported on the current target}} -void __attribute__((target("default"))) bar(void) {} - -// expected-error@+1 {{target(arch=..) attribute is not supported on targets missing invalid; specify an appropriate -march= or -mcpu=}} -void __attribute__((target("arch=invalid"))) foo(void) {} - -// expected-warning@+1 {{unsupported '+div32' in the 'target' attribute string; 'target' attribute ignored}} -void __attribute__((target("+div32"))) plusfeature(void) {} - -// expected-warning@+1 {{unsupported '-div32' in the 'target' attribute string; 'target' attribute ignored}} -void __attribute__((target("-div32"))) minusfeature(void) {} - -// expected-warning@+1 {{unsupported 'aaa' in the 'target' attribute string; 'target' attribute ignored}} -int __attribute__((target("aaa"))) test_feature(void) { return 4; } - -// expected-warning@+1 {{unsupported 'aaa' in the 'target' attribute string; 'target' attribute ignored}} -int __attribute__((target("no-aaa"))) test_nofeature(void) { return 4; } - -// expected-warning@+1 {{duplicate 'arch=' in the 'target' attribute string; 'target' attribute ignored}} -int __attribute__((target("arch=la464,arch=la664"))) test_duplarch(void) { return 4; } - -// expected-warning@+1 {{unknown tune CPU 'la64v1.0' in the 'target' attribute string; 'target' attribute ignored}} -int __attribute__((target("tune=la64v1.0"))) test_tune(void) { return 4; } diff --git a/llvm/include/llvm/TargetParser/LoongArchTargetParser.h b/llvm/include/llvm/TargetParser/LoongArchTargetParser.h index a28e4e9eff811..e08e7bc182e11 100644 --- a/llvm/include/llvm/TargetParser/LoongArchTargetParser.h +++ b/llvm/include/llvm/TargetParser/LoongArchTargetParser.h @@ -85,7 +85,6 @@ struct ArchInfo { }; bool isValidArchName(StringRef Arch); -bool isValidFeatureName(StringRef Feature); bool getArchFeatures(StringRef Arch, std::vector<StringRef> &Features); bool isValidCPUName(StringRef TuneCPU); void fillValidCPUList(SmallVectorImpl<StringRef> &Values); diff --git a/llvm/lib/TargetParser/LoongArchTargetParser.cpp b/llvm/lib/TargetParser/LoongArchTargetParser.cpp index db68498609b57..e394c0c15b207 100644 --- a/llvm/lib/TargetParser/LoongArchTargetParser.cpp +++ b/llvm/lib/TargetParser/LoongArchTargetParser.cpp @@ -34,18 +34,6 @@ bool LoongArch::isValidArchName(StringRef Arch) { return false; } -bool LoongArch::isValidFeatureName(StringRef Feature) { - if (Feature.starts_with("+") || Feature.starts_with("-")) - return false; - for (const auto &F : AllFeatures) { - StringRef CanonicalName = - F.Name.starts_with("+") ? F.Name.drop_front() : F.Name; - if (CanonicalName == Feature) - return true; - } - return false; -} - bool LoongArch::getArchFeatures(StringRef Arch, std::vector<StringRef> &Features) { for (const auto A : AllArchs) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits