https://github.com/kamaub updated https://github.com/llvm/llvm-project/pull/96109
>From 87983d169582bc5156220594e0fc4812f424bf75 Mon Sep 17 00:00:00 2001 From: Kamau Bridgeman <kamau.bridgeman....@gmail.com> Date: Wed, 19 Jun 2024 14:59:53 -0500 Subject: [PATCH 1/2] [PPC][InlineASM] Mark the 'a' constraint as unsupported 'a' is an input/ouput constraint for restraining assembly variables to an indexed or indirect address operand. It previously was marked as supported but would throw an assertion for unknown constraint type in the back-end when this test case was compiled. This change marks it as unsupported until we can add full support for address operands constraining to the compiler code generation. --- clang/lib/Basic/Targets/PPC.h | 4 +++- .../PowerPC/inline-asm-unsupported-constraint-error.c | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c diff --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h index fc23c30c68523..e4d6a02386da5 100644 --- a/clang/lib/Basic/Targets/PPC.h +++ b/clang/lib/Basic/Targets/PPC.h @@ -305,9 +305,11 @@ class LLVM_LIBRARY_VISIBILITY PPCTargetInfo : public TargetInfo { // asm statements) Info.setAllowsMemory(); break; - case 'R': // AIX TOC entry case 'a': // Address operand that is an indexed or indirect from a // register (`p' is preferable for asm statements) + // TODO: Add full support for this constraint + return false; + case 'R': // AIX TOC entry case 'S': // Constant suitable as a 64-bit mask operand case 'T': // Constant suitable as a 32-bit mask operand case 'U': // System V Release 4 small data area reference diff --git a/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c b/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c new file mode 100644 index 0000000000000..457908f016b0c --- /dev/null +++ b/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -emit-llvm -triple powerpc64le-unknown-unknown -verify %s +// This test case exist to test marking the 'a' inline assembly constraint as +// unsupported because powerpc previously marked it as supported. +int foo(int arg){ + asm goto ("bc %0,%1,%l[TEST_LABEL]" : : "a"(&&TEST_LABEL) : : TEST_LABEL); //expected-error {{invalid input constraint 'a' in asm}} + return 0; +TEST_LABEL: return arg + 1; +} >From 6c3ff4ab36bb565d53dc6bac2577fd0f8c033f6b Mon Sep 17 00:00:00 2001 From: Kamau Bridgeman <kamau.bridgeman....@gmail.com> Date: Fri, 21 Jun 2024 13:02:50 -0500 Subject: [PATCH 2/2] Addressing review comment Adding test case run lines for aix 32 and 64 bit targets. --- .../PowerPC/inline-asm-unsupported-constraint-error.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c b/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c index 457908f016b0c..ebabc1d90b051 100644 --- a/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c +++ b/clang/test/CodeGen/PowerPC/inline-asm-unsupported-constraint-error.c @@ -1,8 +1,10 @@ -// RUN: %clang_cc1 -emit-llvm -triple powerpc64le-unknown-unknown -verify %s +// RUN: %clang_cc1 -emit-llvm -triple powerpc64le-linux-gnu -verify %s +// RUN: %clang_cc1 -emit-llvm -triple powerpc64-ibm-aix-xcoff -verify %s +// RUN: %clang_cc1 -emit-llvm -triple powerpc-ibm-aix-xcoff -verify %s // This test case exist to test marking the 'a' inline assembly constraint as // unsupported because powerpc previously marked it as supported. int foo(int arg){ - asm goto ("bc %0,%1,%l[TEST_LABEL]" : : "a"(&&TEST_LABEL) : : TEST_LABEL); //expected-error {{invalid input constraint 'a' in asm}} + asm goto ("bc 12,2,%l[TEST_LABEL]" : : "a"(&&TEST_LABEL) : : TEST_LABEL); //expected-error {{invalid input constraint 'a' in asm}} return 0; TEST_LABEL: return arg + 1; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits