From: Vineet Gupta <vineetg@rivosinc.com>
To: Jeff Law <jeffreyalaw@gmail.com>,
gcc-patches@gcc.gnu.org, Kito Cheng <kito.cheng@gmail.com>
Subject: Re: [PATCH] riscv: generate builtin macro for compilation with strict alignment
Date: Fri, 28 Apr 2023 14:37:33 -0700 [thread overview]
Message-ID: <7a5c650c-b97f-33dc-6e8c-df6612dff295@rivosinc.com> (raw)
In-Reply-To: <3dbcefe5-5b62-eb89-442a-abebe621f3bc@gmail.com>
On 4/20/23 09:56, Jeff Law via Gcc-patches wrote:
>
>
> On 1/17/23 15:59, Vineet Gupta wrote:
>> This could be useful for library writers who want to write code variants
>> for fast vs. slow unaligned accesses.
>>
>> We distinguish explicit -mstrict-align (1) vs. slow_unaligned_access
>> cpu tune param (2) for even more code divesity.
>>
>> gcc/ChangeLog:
>>
>> * config/riscv-c.cc (riscv_cpu_cpp_builtins):
>> Generate __riscv_strict_align with value 1 or 2.
>> * config/riscv/riscv.cc: Define riscv_user_wants_strict_align.
>> (riscv_option_override) Set riscv_user_wants_strict_align to
>> TARGET_STRICT_ALIGN.
>> * config/riscv/riscv.h: Declare riscv_user_wants_strict_align.
>>
>> gcc/testsuite/ChangeLog:
>>
>> * gcc.target/riscv/attribute.c: Check for
>> __riscv_strict_align=1.
>> * gcc.target/riscv/predef-align-1.c: New test.
>> * gcc.target/riscv/predef-align-2.c: New test.
>> * gcc.target/riscv/predef-align-3.c: New test.
>> * gcc.target/riscv/predef-align-4.c: New test.
>> * gcc.target/riscv/predef-align-5.c: New test.
>>
>> Signed-off-by: Vineet Gupta <vineetg@rivosinc.com>
>> ---
>> gcc/config/riscv/riscv-c.cc | 11 +++++++++++
>> gcc/config/riscv/riscv.cc | 9 +++++++++
>> gcc/config/riscv/riscv.h | 1 +
>> gcc/testsuite/gcc.target/riscv/attribute-4.c | 9 +++++++++
>> gcc/testsuite/gcc.target/riscv/predef-align-1.c | 12 ++++++++++++
>> gcc/testsuite/gcc.target/riscv/predef-align-2.c | 11 +++++++++++
>> gcc/testsuite/gcc.target/riscv/predef-align-3.c | 15 +++++++++++++++
>> gcc/testsuite/gcc.target/riscv/predef-align-4.c | 16 ++++++++++++++++
>> gcc/testsuite/gcc.target/riscv/predef-align-5.c | 16 ++++++++++++++++
>> 9 files changed, 100 insertions(+)
>> create mode 100644 gcc/testsuite/gcc.target/riscv/predef-align-1.c
>> create mode 100644 gcc/testsuite/gcc.target/riscv/predef-align-2.c
>> create mode 100644 gcc/testsuite/gcc.target/riscv/predef-align-3.c
>> create mode 100644 gcc/testsuite/gcc.target/riscv/predef-align-4.c
>> create mode 100644 gcc/testsuite/gcc.target/riscv/predef-align-5.c
>>
>> diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
>> index 826ae0067bb8..47a396501d74 100644
>> --- a/gcc/config/riscv/riscv-c.cc
>> +++ b/gcc/config/riscv/riscv-c.cc
>> @@ -102,6 +102,17 @@ riscv_cpu_cpp_builtins (cpp_reader *pfile)
>> }
>> + /* TARGET_STRICT_ALIGN does not cover all cases. */
>> + if (riscv_slow_unaligned_access_p)
>> + {
>> + /* Explicit -mstruct-align preceedes cpu tune param
>> + slow_unaligned_access=true. */
> Did you mean "-mstrict-align" above?
Doh sorry yes.
>
>
>> + if (riscv_user_wants_strict_align)
>> + builtin_define_with_int_value ("__riscv_strict_align", 1);
>> + else
>> + builtin_define_with_int_value ("__riscv_strict_align", 2);
> So I don't understand why we're testing
> "riscv_user_wants_strict_align" instead of TARGET_STRICT_ALIGN here.
> AFAICT they're equivalent. But maybe there's something subtle I'm
> missing.
The missing part is slightly over-engineered unaligned access signaling
in RV gcc frontend IMHO.
Thing is -mno-strict-align can be over-ruled by the cpu tune param
slow_unaligned_access=true (and behave as if -mstrict-align was passed)
And I wanted the macro to reflect this (for future proofing) by being
defined but with different values.
There's some renewed discussion with Kito on [1] so I need to respin
this after getting the agreed upon specification in there.
Thx,
-Vineet
[1] https://github.com/riscv-non-isa/riscv-c-api-doc/issues/32
prev parent reply other threads:[~2023-04-28 21:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-17 22:59 Vineet Gupta
2023-04-20 16:56 ` Jeff Law
2023-04-28 21:37 ` Vineet Gupta [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7a5c650c-b97f-33dc-6e8c-df6612dff295@rivosinc.com \
--to=vineetg@rivosinc.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jeffreyalaw@gmail.com \
--cc=kito.cheng@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).