-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[clang][LoongArch] Ensure target("lasx") implies LSX support
#153542
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-backend-loongarch @llvm/pr-subscribers-clang Author: None (Ami-zhang) ChangesCurrently, Fixes #149512. Full diff: https://github.com/llvm/llvm-project/pull/153542.diff 2 Files Affected:
diff --git a/clang/lib/Basic/Targets/LoongArch.cpp b/clang/lib/Basic/Targets/LoongArch.cpp
index f6915df1520b7..33001b23f48c6 100644
--- a/clang/lib/Basic/Targets/LoongArch.cpp
+++ b/clang/lib/Basic/Targets/LoongArch.cpp
@@ -460,7 +460,12 @@ LoongArchTargetInfo::parseTargetAttr(StringRef Features) const {
break;
case AttrFeatureKind::Feature:
- Ret.Features.push_back("+" + Value.str());
+ if (Value == "lasx") {
+ Ret.Features.push_back("+lasx");
+ Ret.Features.push_back("+lsx");
+ } else {
+ Ret.Features.push_back("+" + Value.str());
+ }
break;
}
}
diff --git a/clang/test/CodeGen/LoongArch/targetattr-lasx.c b/clang/test/CodeGen/LoongArch/targetattr-lasx.c
new file mode 100644
index 0000000000000..28b06605289a8
--- /dev/null
+++ b/clang/test/CodeGen/LoongArch/targetattr-lasx.c
@@ -0,0 +1,16 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 5
+// RUN: %clang_cc1 -triple loongarch64 -target-feature -lsx -emit-llvm %s -o - | FileCheck %s
+
+__attribute__((target("lasx")))
+// CHECK-LABEL: define dso_local void @testlasx(
+// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
+// CHECK-NEXT: [[ENTRY:.*:]]
+// CHECK-NEXT: ret void
+//
+void testlasx() {}
+//.
+// CHECK: attributes #[[ATTR0]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+64bit,+lasx,+lsx" }
+//.
+// CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
+// CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+//.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| if (Value == "lasx") { | |
| Ret.Features.push_back("+lasx"); | |
| Ret.Features.push_back("+lsx"); | |
| } else { | |
| Ret.Features.push_back("+" + Value.str()); | |
| } | |
| Ret.Features.push_back("+" + Value.str()); | |
| if (Value == "lasx") | |
| Ret.Features.push_back("+lsx"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Simplify.
SixWeining
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Currently, `__attribute__((target("lasx")))` does not automatically
enable LSX support, causing Clang to fail with `-mno-lsx`. Since
LASX depends on LSX, enabling LASX should implicitly enable LSX to
avoid clang error.
Fixes llvm#149512.
|
Can it be backported to LLVM 21? |
Yes. |
|
/pull-request #153739 |
…153542) Currently, `__attribute__((target("lasx")))` does not automatically enable LSX support, causing Clang to fail with `-mno-lsx`. Since LASX depends on LSX, enabling LASX should implicitly enable LSX to avoid clang error. Fixes llvm#149512. Depends on llvm#153541 (cherry picked from commit a1b6e7f)
Currently,
__attribute__((target("lasx")))does not automaticallyenable LSX support, causing Clang to fail with
-mno-lsx. SinceLASX depends on LSX, enabling LASX should implicitly enable LSX to
avoid clang error.
Fixes #149512.
Depends on #153541