It is 627.cam4_s or 527.cam4_r? I can help to reproduce this from k1 board.

Pan

-----Original Message-----
From: Vineet Gupta <vine...@rivosinc.com> 
Sent: Friday, January 17, 2025 10:23 AM
To: Li, Pan2 <pan2...@intel.com>
Cc: Jeff Law <jeffreya...@gmail.com>; Palmer Dabbelt <pal...@rivosinc.com>; 
gnu-toolchain <gnu-toolch...@rivosinc.com>; Robin Dapp <rdapp....@gmail.com>; 
juzhe.zh...@rivai.ai; GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: gcc mode switching issue (was Re: RISC-V round_away () handling of 
non canonical rounding modes)

On 1/16/25 18:02, Li, Pan2 wrote:
> Hi Vineet,
>
> Is there any more information about the issue description here? Like steps 
> for reproducing, as well as expect behavior but actual result.. etc.
> It is not easy to start the investigation with blow mail thread. Thanks a lot.

At a high level SPEC2017 cam4 aborts at runtime with upstream gcc :-)

Sorry this started as a potential glibc issue but as I dug it is turning out to
be a gcc issue.
I looped in gcc folks to get the glibc folks off the hook and solicit some brain
waves from gcc folks :-)
Understand your frustration that this doesn't help chase the problem down.

I'm running reducer - will update in proper gcc channels.

Thx,
-Vineet

>
> Pan
>
> -----Original Message-----
> From: Vineet Gupta <vine...@rivosinc.com> 
> Sent: Friday, January 17, 2025 9:28 AM
> To: Andrew Waterman <and...@sifive.com>
> Cc: Joseph Myers <josmy...@redhat.com>; GNU C Library 
> <libc-al...@sourceware.org>; Jeff Law <jeffreya...@gmail.com>; Palmer Dabbelt 
> <pal...@rivosinc.com>; gnu-toolchain <gnu-toolch...@rivosinc.com>; Robin Dapp 
> <rdapp....@gmail.com>; juzhe.zh...@rivai.ai; GCC Patches 
> <gcc-patches@gcc.gnu.org>
> Subject: gcc mode switching issue (was Re: RISC-V round_away () handling of 
> non canonical rounding modes)
>
> On 1/16/25 15:07, Vineet Gupta wrote:
>> +CC Juzhe, Robin, gcc patches mailing list
>>
>> On 1/16/25 14:49, Andrew Waterman wrote:
>>> On Thu, Jan 16, 2025 at 11:43 AM Vineet Gupta <vine...@rivosinc.com> wrote:
>>>> On 1/16/25 11:14, Joseph Myers wrote:
>>>>> The simple thing to do is to change sysdeps/riscv/rvf/get-rounding-mode.h
>>>>> so it only returns a supported value (so making code using
>>>>> get_rounding_mode treat FE_TONEARESTFROMZERO the same as FE_TONEAREST,
>>>>> effectively).  That doesn't give you actual support for this rounding
>>>>> mode, but should at least avoid aborts if it's set, in the absence of the
>>>>> larger changes discussed above to implement full FE_TONEARESTFROMZERO
>>>>> support.
>>>> The simple approach feels simpler 😉
>>>> We can certainly fudge get_round_mode() to return FE_TONEARESTFROMZERO as
>>>> FE_TONEAREST.
>>>> But is that correct semantically as in the machine itself is in a different
>>>> rounding mode than what glibc thinks it in and could compute values 
>>>> numerically
>>>> differently than is expected.
>>>>
>>>> I wonder if gcc should even be generating insns with such rounding mode 
>>>> for the
>>>> general (not explicit) cases.
>>> I was wondering the same thing.  On the scalar side, the FP ops have
>>> the static rounding mode field, so there isn't a reason to change the
>>> dynamic rounding mode if the compiler wants to use directed rounding
>>> for a specific scalar instruction.  The vector instructions mostly do
>>> not have static rounding modes, so maybe this is the result of
>>> autovectorization of e.g. a loop that invokes `lround`?
>> Either autovec or just vec
>>
>> I notice the following pattern in generated code
>>
>>    90610:    00225073              fsrmi    zero,4
>>    90614:    0d707057              vsetvli    zero,zero,e32,mf2,ta,ma
>>    90618:    4a1890d7              vfncvt.x.f.w    v1,v1
>>
>> I have a feeling it is generated by following
>>
>> (define_insn "@pred_narrow_fcvt_x<v_su>_f<mode>"
>>   [(set (match_operand:<VNCONVERT> 0 "register_operand"        "=vd, vd, vr,
>> vr,  &vr,  &vr")
>>     (if_then_else:<VNCONVERT>
>>       (unspec:<VM>
>>         [(match_operand:<VM> 1 "vector_mask_operand"       " vm,
>> vm,Wc1,Wc1,vmWc1,vmWc1")
>>          (match_operand 4 "vector_length_operand"          " rK, rK, rK, rK, 
>>  
>> rK,   rK")
>>          (match_operand 5 "const_int_operand"              "  i,  i,  i,  i, 
>>   
>> i,    i")
>>          (match_operand 6 "const_int_operand"              "  i,  i,  i,  i, 
>>   
>> i,    i")
>>          (match_operand 7 "const_int_operand"              "  i,  i,  i,  i, 
>>   
>> i,    i")
>>          (match_operand 8 "const_int_operand"              "  i,  i,  i,  i, 
>>   
>> i,    i")
>>          (reg:SI VL_REGNUM)
>>          (reg:SI VTYPE_REGNUM)
>>          (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE)
>>       (unspec:<VNCONVERT>
>>          [(match_operand:V_VLSF 3 "register_operand"       "  0,  0,  0,  0, 
>>  
>> vr,   vr")] VFCVTS)
>>       (match_operand:<VNCONVERT> 2 "vector_merge_operand"  " vu,  0, vu,  0, 
>>  
>> vu,    0")))]
>>   "TARGET_VECTOR"
>>   "vfncvt.x<v_su>.f.w\t%0,%3%p1"
>>   [(set_attr "type" "vfncvtftoi")
>>    (set_attr "mode" "<VNCONVERT>")
>>    (set (attr "frm_mode")
>>     (symbol_ref "riscv_vector::get_frm_mode (operands[8])"))
>>    (set_attr "spec_restriction" "none,none,thv,thv,none,none")])
>>
>>
>> Although I'm not sure how exactly this generates the FSRM (assuming I'm 
>> looking
>> at right thing)
>>
>> FWIW all the testsuite tests for narrowing conversion from float2int seem to 
>> be
>> checking rtz variant.
>> Will have to reduce Fortran - oh well !
> Nope it is not the vfncvt stuff, rather some issue in gcc RISC-V mode 
> switching.
> We don't need any glibc changes.
>
> -Vineet

Reply via email to