> Could we instead do something like:
>
> diff --git a/gcc/expmed.cc b/gcc/expmed.cc
> index 13803c6bbd0..c6494484251 100644
> --- a/gcc/expmed.cc
> +++ b/gcc/expmed.cc
> @@ -2022,14 +2022,16 @@ extract_integral_bit_field (rtx op0, 
> opt_scalar_int_mode op0_mode,
>                                  (unsignedp ? 1 : -1), target_part,
>                                  mode, word_mode, reverse, fallback_p, NULL);
>  
> -       gcc_assert (target_part);
>         if (!result_part)
>           {
>             delete_insns_since (last);
>             return NULL;
>           }
>  
> -       if (result_part != target_part)
> +       if (!target_part)
> +         store_bit_field (target, BITS_PER_WORD, i * BITS_PER_WORD,
> +                          0, 0, word_mode, result_part, false, i == 0);
> +       else if (result_part != target_part)
>           emit_move_insn (target_part, result_part);
>       }
>  
> It fixes the ICE but I haven't tested beyond that.

This is almost exactly what I had initially until I realized the 
operand_subword in the if (unsignedp).  Even though I didn't manage to 
trigger it, it looked vulnerable.  But if you're OK with the above,
I'll go ahead with that.  It's even bootstrapped and regtested already 
:)

>> diff --git a/gcc/testsuite/g++.target/riscv/rvv/autovec/pr127323.C 
>> b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr127323.C
>> new file mode 100644
>> index 00000000000..3809d81b6fe
>> --- /dev/null
>> +++ b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr127323.C
>> @@ -0,0 +1,39 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-O3 -mrvv-max-lmul=conv-dynamic -march=rv64gcv -mabi=lp64d 
>> -mvector-strict-align" } */
>
> For me the ICE only triggered with -mtune=generic-ooo, as in the PR.

Yes, and that's due to a riscv target issue.  Our 
riscv_slow_unaligned_access is currently wrong and sends generic-ooo the 
"unsupported" way even though it should do the opposite.
I think, strictly, this particular ICE wouldn't even happen anymore 
after fixing riscv_slow_unaligned_access, regardless of the option.
We aren't going to see element-misaligned vectors here and only those 
are unsupported.

So yeah, I guess the test is then misleading at best.  Maybe I should 
even drop the patch then, as we won't hit this particular case right 
now?  It's still wrong as written I guess.

-- 
Regards
 Robin

Reply via email to