RISC-V: Don't unconditionally add m,a,f,d in arch-canonicalize

Message ID 6210fc0f-caaf-7bf8-4ab1-ec08760914d7@embecosm.com
State Committed
Commit 63f198553d3940495bfaa49da30b2ce93375c916
Headers
Series RISC-V: Don't unconditionally add m,a,f,d in arch-canonicalize |

Commit Message

Simon Cook May 25, 2022, 1:25 p.m. UTC
  This solves an issue where rv32i, etc. are canonicalized to rv32imafd
since the g->i addition of 'm', 'a', 'f', 'd' is not actually gated by
whether the input was rv32g/rv64g.

gcc/ChangeLog:

	* config/riscv/arch-canonicalize: Only add mafd extension if
 	base was rv32/rv64g.
---
 gcc/config/riscv/arch-canonicalize | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Kito Cheng May 25, 2022, 2 p.m. UTC | #1
Committed, Thanks for fixing my stupid bug :P


On Wed, May 25, 2022 at 9:26 PM Simon Cook <simon.cook@embecosm.com> wrote:
>
> This solves an issue where rv32i, etc. are canonicalized to rv32imafd
> since the g->i addition of 'm', 'a', 'f', 'd' is not actually gated by
> whether the input was rv32g/rv64g.
>
> gcc/ChangeLog:
>
>         * config/riscv/arch-canonicalize: Only add mafd extension if
>         base was rv32/rv64g.
> ---
>  gcc/config/riscv/arch-canonicalize | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/config/riscv/arch-canonicalize
> b/gcc/config/riscv/arch-canonicalize
> index 71b2232b29e..fd7651ac491 100755
> --- a/gcc/config/riscv/arch-canonicalize
> +++ b/gcc/config/riscv/arch-canonicalize
> @@ -73,8 +73,8 @@ def arch_canonicalize(arch, isa_spec):
>    std_exts = []
>    if arch[:5] in ['rv32e', 'rv32i', 'rv32g', 'rv64i', 'rv64g']:
>      new_arch = arch[:5].replace("g", "i")
> -    std_exts = ['m', 'a', 'f', 'd']
>      if arch[:5] in ['rv32g', 'rv64g']:
> +      std_exts = ['m', 'a', 'f', 'd']
>        if not is_isa_spec_2p2:
>          extra_long_ext = ['zicsr', 'zifencei']
>    else:
> --
> 2.32.1
  
Palmer Dabbelt May 25, 2022, 9:32 p.m. UTC | #2
On Wed, 25 May 2022 07:00:11 PDT (-0700), gcc-patches@gcc.gnu.org wrote:
> Committed, Thanks for fixing my stupid bug :P

IMO this is a good candidate for a backport.

> On Wed, May 25, 2022 at 9:26 PM Simon Cook <simon.cook@embecosm.com> wrote:
>>
>> This solves an issue where rv32i, etc. are canonicalized to rv32imafd
>> since the g->i addition of 'm', 'a', 'f', 'd' is not actually gated by
>> whether the input was rv32g/rv64g.
>>
>> gcc/ChangeLog:
>>
>>         * config/riscv/arch-canonicalize: Only add mafd extension if
>>         base was rv32/rv64g.
>> ---
>>  gcc/config/riscv/arch-canonicalize | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/gcc/config/riscv/arch-canonicalize
>> b/gcc/config/riscv/arch-canonicalize
>> index 71b2232b29e..fd7651ac491 100755
>> --- a/gcc/config/riscv/arch-canonicalize
>> +++ b/gcc/config/riscv/arch-canonicalize
>> @@ -73,8 +73,8 @@ def arch_canonicalize(arch, isa_spec):
>>    std_exts = []
>>    if arch[:5] in ['rv32e', 'rv32i', 'rv32g', 'rv64i', 'rv64g']:
>>      new_arch = arch[:5].replace("g", "i")
>> -    std_exts = ['m', 'a', 'f', 'd']
>>      if arch[:5] in ['rv32g', 'rv64g']:
>> +      std_exts = ['m', 'a', 'f', 'd']
>>        if not is_isa_spec_2p2:
>>          extra_long_ext = ['zicsr', 'zifencei']
>>    else:
>> --
>> 2.32.1
  
Kito Cheng May 26, 2022, 6:51 a.m. UTC | #3
Back ported to releases/gcc-11 and releases/gcc-12 branch :)

On Thu, May 26, 2022 at 5:33 AM Palmer Dabbelt <palmer@dabbelt.com> wrote:
>
> On Wed, 25 May 2022 07:00:11 PDT (-0700), gcc-patches@gcc.gnu.org wrote:
> > Committed, Thanks for fixing my stupid bug :P
>
> IMO this is a good candidate for a backport.
>
> > On Wed, May 25, 2022 at 9:26 PM Simon Cook <simon.cook@embecosm.com> wrote:
> >>
> >> This solves an issue where rv32i, etc. are canonicalized to rv32imafd
> >> since the g->i addition of 'm', 'a', 'f', 'd' is not actually gated by
> >> whether the input was rv32g/rv64g.
> >>
> >> gcc/ChangeLog:
> >>
> >>         * config/riscv/arch-canonicalize: Only add mafd extension if
> >>         base was rv32/rv64g.
> >> ---
> >>  gcc/config/riscv/arch-canonicalize | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/gcc/config/riscv/arch-canonicalize
> >> b/gcc/config/riscv/arch-canonicalize
> >> index 71b2232b29e..fd7651ac491 100755
> >> --- a/gcc/config/riscv/arch-canonicalize
> >> +++ b/gcc/config/riscv/arch-canonicalize
> >> @@ -73,8 +73,8 @@ def arch_canonicalize(arch, isa_spec):
> >>    std_exts = []
> >>    if arch[:5] in ['rv32e', 'rv32i', 'rv32g', 'rv64i', 'rv64g']:
> >>      new_arch = arch[:5].replace("g", "i")
> >> -    std_exts = ['m', 'a', 'f', 'd']
> >>      if arch[:5] in ['rv32g', 'rv64g']:
> >> +      std_exts = ['m', 'a', 'f', 'd']
> >>        if not is_isa_spec_2p2:
> >>          extra_long_ext = ['zicsr', 'zifencei']
> >>    else:
> >> --
> >> 2.32.1
  

Patch

diff --git a/gcc/config/riscv/arch-canonicalize
b/gcc/config/riscv/arch-canonicalize
index 71b2232b29e..fd7651ac491 100755
--- a/gcc/config/riscv/arch-canonicalize
+++ b/gcc/config/riscv/arch-canonicalize
@@ -73,8 +73,8 @@  def arch_canonicalize(arch, isa_spec):
   std_exts = []
   if arch[:5] in ['rv32e', 'rv32i', 'rv32g', 'rv64i', 'rv64g']:
     new_arch = arch[:5].replace("g", "i")
-    std_exts = ['m', 'a', 'f', 'd']
     if arch[:5] in ['rv32g', 'rv64g']:
+      std_exts = ['m', 'a', 'f', 'd']
       if not is_isa_spec_2p2:
         extra_long_ext = ['zicsr', 'zifencei']
   else: