https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112469

--- Comment #2 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
(In reply to Andrew Pinski from comment #1)
> I don't see anything wrong with that patch but just exposing a latent bug in
> SCCVN/FRE:
> 
> ```
> Value numbering stmt = vect_iftmp.22_46 = VEC_COND_EXPR <mask__23.21_44, {
> 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 3, 4, 5, 6, 7, 8 }>;
> Applying pattern match.pd:5029, generic-match-7.cc:9560
> Match-and-simplified VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1
> }, { 1, 2, 3, 4, 5, 6, 7, 8 }> to { 1, 2, 3, 4, 5, 6, 7, 8 }
> RHS VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 3, 4,
> 5, 6, 7, 8 }> simplified to { 1, 2, 3, 4, 5, 6, 7, 8 }
> Setting value number of vect_iftmp.22_46 to { 1, 2, 3, 4, 5, 6, 7, 8 }
> (changed)
> Replaced VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2,
> 3, 4, 5, 6, 7, 8 }> with { 1, 2, 3, 4, 5, 6, 7, 8 } in all uses of
> vect_iftmp.22_46 = VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1
> }, { 1, 2, 3, 4, 5, 6, 7, 8 }>;
> Value numbering stmt = _55 = { -1, -1, -1, -1, -1, -1, -1, -1 };
> RHS { -1, -1, -1, -1, -1, -1, -1, -1 } simplified to { -1, -1, -1, -1, -1,
> -1, -1, -1 }
> Setting value number of _55 to { -1, -1, -1, -1, -1, -1, -1, -1 } (changed)
> Value numbering stmt = vect_prephitmp_11.23_50 = .COND_NEG (_55,
> vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 });
> Applying pattern match.pd:5027, generic-match-7.cc:9542
> Match-and-simplified .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1, -1,
> -1, -1, -1 }) to { 4294967295, 4294967294, 4294967293, 4294967292,
> 4294967291, 4294967290, 4294967289, 4294967288 }
> call .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 })
> simplified to { 4294967295, 4294967294, 4294967293, 4294967292, 4294967291,
> 4294967290, 4294967289, 4294967288 }
> Setting value number of vect_prephitmp_11.23_50 to { 4294967295, 4294967294,
> 4294967293, 4294967292, 4294967291, 4294967290, 4294967289, 4294967288 }
> (changed)
> Replaced .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 })
> with { 4294967295, 4294967294, 4294967293, 4294967292, 4294967291,
> 4294967290, 4294967289, 4294967288 } in vect_prephitmp_11.23_50 = .COND_NEG
> (_55, vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 });
> 
> 
> ```
> 
> Then crash.
> 
> What we had before FRE4:
> ```
>   _39 = { 9, 10, 11, 12, 13, 14, 15, 16 };
>   vect__29.18_40 = { 1, 2, 3, 4, 5, 6, 7, 8 };
>   mask__23.21_44 = { 0, 0, 0, 0, 0, 0, 0, 0 };
>   vect_iftmp.22_46 = VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1
> }, { 1, 2, 3, 4, 5, 6, 7, 8 }>;
>   _55 = { -1, -1, -1, -1, -1, -1, -1, -1 };
>   vect_prephitmp_11.23_50 = .COND_NEG (_55, vect__29.18_40, { -1, -1, -1,
> -1, -1, -1, -1, -1 });
>   ivtmp_54 = 1;
>   _52 = BIT_FIELD_REF <vect_prephitmp_11.23_50, 32, 224>;
>   prephitmp_32 = _52;
>   _48 = BIT_FIELD_REF <vect_iftmp.22_46, 32, 224>;
>   iftmp.0_31 = _48;
>   b = iftmp.0_31;
>   c = prephitmp_32;
>   a = 9;
> ```
> 
> Confirmed.

Yes. I am agree with Andrew. It's not the RISC-V backend issue.

CCing Richard to see whether we should fix on middle-end or find a way in 
RISC-V backend to walk around this issue.

Reply via email to