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

Hongtao Liu <liuhongt at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |liuhongt at gcc dot 
gnu.org
                 CC|                            |liuhongt at gcc dot gnu.org
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2024-10-16
     Ever confirmed|0                           |1

--- Comment #1 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
zero_extend is transformed into a subreg which make reload think the upper part
is garbage, it's related to below pattern, I'll take a look.

 4299;; Since vpcmpd implicitly clear the upper bits of dest, transform         
 4300;; vpcmpd + zero_extend to vpcmpd since the instruction                    
 4301(define_insn_and_split
"*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>"                  
 4302  [(set (match_operand:SWI248x 0 "register_operand")                       
 4303    (zero_extend:SWI248x                                                   
 4304      (unspec:<V48H_AVX512VL:avx512fmaskmode>                              
 4305        [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand")            
 4306         (match_operand:V48H_AVX512VL 2 "nonimmediate_operand")            
 4307         (match_operand:SI 3 "const_0_to_7_operand")]                      
 4308        UNSPEC_PCMP)))]                                                    
 4309  "TARGET_AVX512F                                                          
 4310   && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)  
 4311   && ix86_pre_reload_split ()                                             
 4312   && (GET_MODE_NUNITS (<V48H_AVX512VL:MODE>mode)                          
 4313      < GET_MODE_PRECISION (<SWI248x:MODE>mode))"                          
 4314  "#"                                                                      
 4315  "&& 1"                                                                   
 4316  [(set (match_dup 0)                                                      
 4317    (unspec:<V48H_AVX512VL:avx512fmaskmode>                                
 4318      [(match_dup 1)                                                       
 4319       (match_dup 2)                                                       
 4320       (match_dup 3)]                                                      
 4321      UNSPEC_PCMP))]                                                       
 4322{                                                                          
 4323  operands[1] = force_reg (<V48H_AVX512VL:MODE>mode, operands[1]);         
 4324  operands[0] = lowpart_subreg (<V48H_AVX512VL:avx512fmaskmode>mode,       
 4325                 operands[0], <SWI248x:MODE>mode);                         
 4326}                                                                          
 4327  [(set_attr "type" "ssecmp")                                              
 4328   (set_attr "length_immediate" "1")                                       
 4329   (set_attr "prefix" "evex")                                              
 4330   (set_attr "mode" "<V48H_AVX512VL:sseinsnmode>")])

Reply via email to