public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* Issue during combine.
@ 2020-10-19 12:53 Henri Cloetens
  2020-10-19 15:55 ` Henri Cloetens
  2020-10-20 13:19 ` Richard Earnshaw
  0 siblings, 2 replies; 8+ messages in thread
From: Henri Cloetens @ 2020-10-19 12:53 UTC (permalink / raw)
  To: gcc-help

Hello all,

I am building a gcc 9.2.0 custom compiler, and I am running in an issue 
during step 263, combine.

Before combine:

/(insn 2354 2352 1743 175 (set (reg/v:SI 197 [ dig ])//
//        (if_then_else (eq (subreg:QI (reg:SI 632) 1)//
//                (const_int 1 [0x1]))//
//            (reg:SI 708)//
//            (reg/v:SI 197 [ dig ]))) 
"/home/henri/blueICe/gcc/newlib/newlib/libc/stdlib/dtoa.c":771:6 35 
{select_internal3}//
//     (expr_list:REG_DEAD (reg:SI 708)//
//        (expr_list:REG_DEAD (reg:SI 632)//
//            (nil))))//
//(insn 1743 2354 124 175 (set (mem:QI (reg:SI 316 [ ivtmp.118 ]) [0 
*s_304+0 S1 A8])//
//        (subreg:QI (reg/v:SI 197 [ dig ]) 0)) 
"/home/henri/blueICe/gcc/newlib/newlib/libc/stdlib/dtoa.c":772:13 6 
{movqi_internal}//
//     (expr_list:REG_DEAD (reg:SI 316 [ ivtmp.118 ])//
//        (expr_list:REG_DEAD (reg/v:SI 197 [ dig ])//
//            (nil))))/

This is during the combine-step transformed into:

/(insn 1743 2354 124 175 (set (mem:QI (reg:SI 316 [ ivtmp.118 ]) [0 
*s_304+0 S1 A8])//
//        (subreg:QI (if_then_else (eq (subreg:QI (reg:SI 632) 1)//
//                    (const_int 1 [0x1]))//
//                (reg:SI 708)//
//                (reg/v:SI 197 [ dig ])) 0)) 
"/home/henri/blueICe/gcc/newlib/newlib/libc/stdlib/dtoa.c":772:13 6 
{movqi_internal}//
//     (expr_list:REG_DEAD (reg:SI 316 [ ivtmp.118 ])//
//        (expr_list:REG_DEAD (reg/v:SI 197 [ dig ])//
//            (nil))))/

This, of course, is not correct any more. Now, how should I prevent this 
?, the pattern is defined in the .md-file as:

/(define_insn "movqi_internal" //
//[(set (match_operand:QI 0 "movqi_operand_0" 
"=r,r,r,r,r,r,u,u,W,t,r,c,*c*l,*h,*h,y")//
//(match_operand:QI 1 "movqi_operand_1" "O,k,i,r,W,t,W,t,r,r,*h,u, r,   
r, 0,y"))]/

/.../
and /movqi_operand_1/ is defined as:

/(define_predicate "movqi_operand_1"//
//  (ior (match_operand 0 "gpc_reg_operand")//
//       (ior (match_operand 0 
"quarterword_offset21_memref_operand_or_indirect")//
//            (match_operand 0 "immediate_operand"))))/


and /gpc_reg_operand/ as:

/(define_predicate "gpc_reg_operand"//
//   (and (match_operand 0 "register_operand")//
//        (match_test "(GET_CODE (op) != REG && GET_CODE(op) != SUBREG//
//                      || (REGNO (op) >= ARG_POINTER_REGNUM//
//                          && !CA_REGNO_P (REGNO (op)))//
//                      || REGNO (op) == SFP_REGNO//
//                      || REGNO (op) == ARG_POINTER_REGNUM//
//                      || REGNO (op) <= MAX_REGFILE_REGNO)")))/

Any of you any idea why the combine succeeds ?. I mean, it should fail 
!. After combine, it does not match /movqi_internal/ pattern
any more, but the compiler seems to think otherwise !.

Best Regards,

Henri.



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-10-20 15:49 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-19 12:53 Issue during combine Henri Cloetens
2020-10-19 15:55 ` Henri Cloetens
2020-10-19 19:28   ` Segher Boessenkool
2020-10-19 19:56     ` Henri Cloetens
2020-10-19 21:20       ` Segher Boessenkool
2020-10-20 13:19 ` Richard Earnshaw
2020-10-20 15:01   ` Henri Cloetens
2020-10-20 15:48     ` Segher Boessenkool

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).