public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Trouble with MDs: "const" RTL object stops recognition of RTL expressions by insn patterns
@ 2010-05-25 17:09 Sergio Ruocco
  0 siblings, 0 replies; only message in thread
From: Sergio Ruocco @ 2010-05-25 17:09 UTC (permalink / raw)
  To: GCC Mailing List


Dear All,

I am porting GCC to a 16 bit micro (with 16 bit bytes, thus
BITS_PER_UNIT=16, 16 bit ints become "QI"s etc).

The port compiles is nearly done and simple C programs, but now chokes
on a trivial line such as:

	yyy(&array[4], &e, &p);

with this error:

xxx.c: In function ‘yyy’:
xxx.c:193: error: unrecognizable insn:
(insn 183 181 184 4 (set (reg/f:QI 37 [ D.1127 ])
        (const:QI (plus:QI (symbol_ref:QI ("digest") [flags 0x2]
<var_decl 0x7fbe4d21f270 digest>)
                (const_int 8 [0x8])))) -1 (nil)
    (nil))
sha1_16_struct2.c:193: internal compiler error: in extract_insn, at
recog.c:2020
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

I determined that the problem is triggered by the computation of array
address+const (4/8 in this case).


My MD contains:

(define_insn "addqi3"
        [(set (match_operand:QI 0 "register_operand" "=r,r")
              (plus:QI (match_operand:QI 1 "register_operand" "0,0")
                       (match_operand:QI 2 "nonmemory_operand" "r,K"))
         )]
        ""
        "@
         ADD  \\t%2 %0
         ADDI \\t%h2 %0"
)

which correctly compiles ordinary arithmetic expressions: x = 5+y etc.

However, when a symbol is involved, the addqi3 isns pattern cannot
recognise the RTL: Symbol+Int.


Is maybe the surrounding  (const:QI...) the reason why addqi3 does not
match?!  Grepping the GCC source I found in rtl.h that CONST is defined as:

....
/* This is used to encapsulate an expression whose value is constant
(such as the sum of a SYMBOL_REF and a CONST_INT) so that it will be
recognized as a constant operand rather than by arithmetic instructions.  */
DEF_RTL_EXPR(CONST, "const", "e", RTX_CONST_OBJ)


So, what is my port missing to make it compile such RTL expressions?

I feel that it must be something really trivial which I am overlooking..

Thanks for your help,

	Sergio






^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-05-25 15:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-25 17:09 Trouble with MDs: "const" RTL object stops recognition of RTL expressions by insn patterns Sergio Ruocco

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).