-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[X86][CFE] Support EGPR in GCCRegNames. #91323
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-x86 Author: Freddy Ye (FreddyLeaf) ChangesFull diff: https://github.com/llvm/llvm-project/pull/91323.diff 2 Files Affected:
diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp
index bf1767c87fe1c..55c1bde31158e 100644
--- a/clang/lib/Basic/Targets/X86.cpp
+++ b/clang/lib/Basic/Targets/X86.cpp
@@ -66,6 +66,11 @@ static const char *const GCCRegNames[] = {
"tmm0", "tmm1", "tmm2", "tmm3", "tmm4", "tmm5", "tmm6", "tmm7",
};
+static const char *const ExtendedGCCRegNames[] = {
+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+ "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+};
+
const TargetInfo::AddlRegName AddlRegNames[] = {
{{"al", "ah", "eax", "rax"}, 0},
{{"bl", "bh", "ebx", "rbx"}, 3},
@@ -85,6 +90,16 @@ const TargetInfo::AddlRegName AddlRegNames[] = {
{{"r15d", "r15w", "r15b"}, 45},
};
+const TargetInfo::AddlRegName ExtendedAddlRegNames[] = {
+ {{"r16d", "r16w", "r16b"}, 165}, {{"r17d", "r17w", "r17b"}, 166},
+ {{"r18d", "r18w", "r18b"}, 167}, {{"r19d", "r19w", "r19b"}, 168},
+ {{"r20d", "r20w", "r20b"}, 169}, {{"r21d", "r21w", "r21b"}, 170},
+ {{"r22d", "r22w", "r22b"}, 171}, {{"r23d", "r23w", "r23b"}, 172},
+ {{"r24d", "r24w", "r24b"}, 173}, {{"r25d", "r25w", "r25b"}, 174},
+ {{"r26d", "r26w", "r26b"}, 175}, {{"r27d", "r27w", "r27b"}, 176},
+ {{"r28d", "r28w", "r28b"}, 177}, {{"r29d", "r29w", "r29b"}, 178},
+ {{"r30d", "r30w", "r30b"}, 179}, {{"r31d", "r31w", "r31b"}, 180},
+};
} // namespace targets
} // namespace clang
@@ -1763,10 +1778,16 @@ void X86TargetInfo::fillValidTuneCPUList(SmallVectorImpl<StringRef> &Values) con
}
ArrayRef<const char *> X86TargetInfo::getGCCRegNames() const {
+ if (HasEGPR)
+ GCCRegNames.insert(GCCRegNames.end(), ExtendedGCCRegNames.begin(),
+ ExtendedGCCRegNames.end());
return llvm::ArrayRef(GCCRegNames);
}
ArrayRef<TargetInfo::AddlRegName> X86TargetInfo::getGCCAddlRegNames() const {
+ if (HasEGPR)
+ AddlRegNames.insert(AddlRegNames.end(), ExtendedAddlRegNames.begin(),
+ ExtendedAddlRegNames.end());
return llvm::ArrayRef(AddlRegNames);
}
diff --git a/clang/test/CodeGen/X86/register_asm.c b/clang/test/CodeGen/X86/register_asm.c
new file mode 100644
index 0000000000000..7986b392deed3
--- /dev/null
+++ b/clang/test/CodeGen/X86/register_asm.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -o /dev/null
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +egpr %s -o /dev/null
+
+int foo(void) {
+ register int a __asm__("ebx");
+#ifdef __EGPR__
+ register int b __asm__("r16");
+#endif // __EGPR__
+ return a;
+}
|
@llvm/pr-subscribers-clang Author: Freddy Ye (FreddyLeaf) ChangesFull diff: https://github.com/llvm/llvm-project/pull/91323.diff 2 Files Affected:
diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp
index bf1767c87fe1c..55c1bde31158e 100644
--- a/clang/lib/Basic/Targets/X86.cpp
+++ b/clang/lib/Basic/Targets/X86.cpp
@@ -66,6 +66,11 @@ static const char *const GCCRegNames[] = {
"tmm0", "tmm1", "tmm2", "tmm3", "tmm4", "tmm5", "tmm6", "tmm7",
};
+static const char *const ExtendedGCCRegNames[] = {
+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+ "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+};
+
const TargetInfo::AddlRegName AddlRegNames[] = {
{{"al", "ah", "eax", "rax"}, 0},
{{"bl", "bh", "ebx", "rbx"}, 3},
@@ -85,6 +90,16 @@ const TargetInfo::AddlRegName AddlRegNames[] = {
{{"r15d", "r15w", "r15b"}, 45},
};
+const TargetInfo::AddlRegName ExtendedAddlRegNames[] = {
+ {{"r16d", "r16w", "r16b"}, 165}, {{"r17d", "r17w", "r17b"}, 166},
+ {{"r18d", "r18w", "r18b"}, 167}, {{"r19d", "r19w", "r19b"}, 168},
+ {{"r20d", "r20w", "r20b"}, 169}, {{"r21d", "r21w", "r21b"}, 170},
+ {{"r22d", "r22w", "r22b"}, 171}, {{"r23d", "r23w", "r23b"}, 172},
+ {{"r24d", "r24w", "r24b"}, 173}, {{"r25d", "r25w", "r25b"}, 174},
+ {{"r26d", "r26w", "r26b"}, 175}, {{"r27d", "r27w", "r27b"}, 176},
+ {{"r28d", "r28w", "r28b"}, 177}, {{"r29d", "r29w", "r29b"}, 178},
+ {{"r30d", "r30w", "r30b"}, 179}, {{"r31d", "r31w", "r31b"}, 180},
+};
} // namespace targets
} // namespace clang
@@ -1763,10 +1778,16 @@ void X86TargetInfo::fillValidTuneCPUList(SmallVectorImpl<StringRef> &Values) con
}
ArrayRef<const char *> X86TargetInfo::getGCCRegNames() const {
+ if (HasEGPR)
+ GCCRegNames.insert(GCCRegNames.end(), ExtendedGCCRegNames.begin(),
+ ExtendedGCCRegNames.end());
return llvm::ArrayRef(GCCRegNames);
}
ArrayRef<TargetInfo::AddlRegName> X86TargetInfo::getGCCAddlRegNames() const {
+ if (HasEGPR)
+ AddlRegNames.insert(AddlRegNames.end(), ExtendedAddlRegNames.begin(),
+ ExtendedAddlRegNames.end());
return llvm::ArrayRef(AddlRegNames);
}
diff --git a/clang/test/CodeGen/X86/register_asm.c b/clang/test/CodeGen/X86/register_asm.c
new file mode 100644
index 0000000000000..7986b392deed3
--- /dev/null
+++ b/clang/test/CodeGen/X86/register_asm.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -o /dev/null
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +egpr %s -o /dev/null
+
+int foo(void) {
+ register int a __asm__("ebx");
+#ifdef __EGPR__
+ register int b __asm__("r16");
+#endif // __EGPR__
+ return a;
+}
|
You can test this locally with the following command:git-clang-format --diff 05f4448d40f00b9fb2447e1c32cd18a7a9b8b011 a627464ef0ed4e999dc52b6b2d445548b559fe8b -- clang/test/CodeGen/X86/inline-asm-gcc-regs.c clang/lib/Basic/Targets/X86.cpp View the diff from clang-format here.diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp
index 67e2126cf7..7cf53dee62 100644
--- a/clang/lib/Basic/Targets/X86.cpp
+++ b/clang/lib/Basic/Targets/X86.cpp
@@ -59,13 +59,12 @@ static const char *const GCCRegNames[] = {
"zmm10", "zmm11", "zmm12", "zmm13", "zmm14", "zmm15", "zmm16", "zmm17",
"zmm18", "zmm19", "zmm20", "zmm21", "zmm22", "zmm23", "zmm24", "zmm25",
"zmm26", "zmm27", "zmm28", "zmm29", "zmm30", "zmm31", "k0", "k1",
- "k2", "k3", "k4", "k5", "k6", "k7",
- "cr0", "cr2", "cr3", "cr4", "cr8",
- "dr0", "dr1", "dr2", "dr3", "dr6", "dr7",
- "bnd0", "bnd1", "bnd2", "bnd3",
- "tmm0", "tmm1", "tmm2", "tmm3", "tmm4", "tmm5", "tmm6", "tmm7",
- "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
- "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+ "k2", "k3", "k4", "k5", "k6", "k7", "cr0", "cr2",
+ "cr3", "cr4", "cr8", "dr0", "dr1", "dr2", "dr3", "dr6",
+ "dr7", "bnd0", "bnd1", "bnd2", "bnd3", "tmm0", "tmm1", "tmm2",
+ "tmm3", "tmm4", "tmm5", "tmm6", "tmm7", "r16", "r17", "r18",
+ "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26",
+ "r27", "r28", "r29", "r30", "r31",
};
const TargetInfo::AddlRegName AddlRegNames[] = {
|
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
No description provided.