cpplib.h (struct cpp_options): New member, warn_endif_labels.
[official-gcc.git] / gcc / rtl.c
blob7d70059cbba1b2de40ea979f6b5d7fb128c99c76
1 /* RTL utility routines.
2 Copyright (C) 1987, 1988, 1991, 1994, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
22 #include "config.h"
23 #include "system.h"
24 #include "rtl.h"
25 #include "real.h"
26 #include "ggc.h"
27 #include "errors.h"
30 /* Calculate the format for CONST_DOUBLE. This depends on the relative
31 widths of HOST_WIDE_INT and REAL_VALUE_TYPE.
33 We need to go out to 0wwwww, since real.c assumes 16 bits per element
34 in REAL_VALUE_TYPE.
36 This is duplicated in gengenrtl.c.
38 A number of places assume that there are always at least two 'w'
39 slots in a CONST_DOUBLE, so we provide them even if one would suffice. */
41 #if MAX_LONG_DOUBLE_TYPE_SIZE == 96
42 # define REAL_WIDTH \
43 (11*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
44 #else
45 # if MAX_LONG_DOUBLE_TYPE_SIZE == 128
46 # define REAL_WIDTH \
47 (19*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
48 # else
49 # if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
50 # define REAL_WIDTH \
51 (7*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
52 # endif
53 # endif
54 #endif
56 #ifndef REAL_WIDTH
57 # if HOST_BITS_PER_WIDE_INT*2 >= MAX_LONG_DOUBLE_TYPE_SIZE
58 # define REAL_WIDTH 2
59 # else
60 # if HOST_BITS_PER_WIDE_INT*3 >= MAX_LONG_DOUBLE_TYPE_SIZE
61 # define REAL_WIDTH 3
62 # else
63 # if HOST_BITS_PER_WIDE_INT*4 >= MAX_LONG_DOUBLE_TYPE_SIZE
64 # define REAL_WIDTH 4
65 # endif
66 # endif
67 # endif
68 #endif /* REAL_WIDTH */
70 #if REAL_WIDTH == 1
71 # define CONST_DOUBLE_FORMAT "0ww"
72 #else
73 # if REAL_WIDTH == 2
74 # define CONST_DOUBLE_FORMAT "0ww"
75 # else
76 # if REAL_WIDTH == 3
77 # define CONST_DOUBLE_FORMAT "0www"
78 # else
79 # if REAL_WIDTH == 4
80 # define CONST_DOUBLE_FORMAT "0wwww"
81 # else
82 # if REAL_WIDTH == 5
83 # define CONST_DOUBLE_FORMAT "0wwwww"
84 # else
85 # define CONST_DOUBLE_FORMAT /* nothing - will cause syntax error */
86 # endif
87 # endif
88 # endif
89 # endif
90 #endif
92 /* Indexed by rtx code, gives number of operands for an rtx with that code.
93 Does NOT include rtx header data (code and links). */
95 #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) sizeof FORMAT - 1 ,
97 const unsigned char rtx_length[NUM_RTX_CODE] = {
98 #include "rtl.def"
101 #undef DEF_RTL_EXPR
103 /* Indexed by rtx code, gives the name of that kind of rtx, as a C string. */
105 #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME ,
107 const char * const rtx_name[NUM_RTX_CODE] = {
108 #include "rtl.def" /* rtl expressions are documented here */
111 #undef DEF_RTL_EXPR
113 /* Indexed by machine mode, gives the name of that machine mode.
114 This name does not include the letters "mode". */
116 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) NAME,
118 const char * const mode_name[NUM_MACHINE_MODES] = {
119 #include "machmode.def"
122 #undef DEF_MACHMODE
124 /* Indexed by machine mode, gives the class mode for GET_MODE_CLASS. */
126 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) CLASS,
128 const enum mode_class mode_class[NUM_MACHINE_MODES] = {
129 #include "machmode.def"
132 #undef DEF_MACHMODE
134 /* Indexed by machine mode, gives the length of the mode, in bits.
135 GET_MODE_BITSIZE uses this. */
137 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) BITSIZE,
139 const unsigned short mode_bitsize[NUM_MACHINE_MODES] = {
140 #include "machmode.def"
143 #undef DEF_MACHMODE
145 /* Indexed by machine mode, gives the length of the mode, in bytes.
146 GET_MODE_SIZE uses this. */
148 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) SIZE,
150 const unsigned char mode_size[NUM_MACHINE_MODES] = {
151 #include "machmode.def"
154 #undef DEF_MACHMODE
156 /* Indexed by machine mode, gives the length of the mode's subunit.
157 GET_MODE_UNIT_SIZE uses this. */
159 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) UNIT,
161 const unsigned char mode_unit_size[NUM_MACHINE_MODES] = {
162 #include "machmode.def" /* machine modes are documented here */
165 #undef DEF_MACHMODE
167 /* Indexed by machine mode, gives next wider natural mode
168 (QI -> HI -> SI -> DI, etc.) Widening multiply instructions
169 use this. */
171 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) \
172 (unsigned char) WIDER,
174 const unsigned char mode_wider_mode[NUM_MACHINE_MODES] = {
175 #include "machmode.def" /* machine modes are documented here */
178 #undef DEF_MACHMODE
180 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) \
181 ((BITSIZE) >= HOST_BITS_PER_WIDE_INT) ? ~(unsigned HOST_WIDE_INT) 0 : ((unsigned HOST_WIDE_INT) 1 << (BITSIZE)) - 1,
183 /* Indexed by machine mode, gives mask of significant bits in mode. */
185 const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES] = {
186 #include "machmode.def"
189 #undef DEF_MACHMODE
191 #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) INNER,
193 /* Indexed by machine mode, gives the mode of the inner elements in a
194 vector type. */
196 const enum machine_mode inner_mode_array[NUM_MACHINE_MODES] = {
197 #include "machmode.def"
200 /* Indexed by mode class, gives the narrowest mode for each class.
201 The Q modes are always of width 1 (2 for complex) - it is impossible
202 for any mode to be narrower.
204 Note that we use QImode instead of BImode for MODE_INT, since
205 otherwise the middle end will try to use it for bitfields in
206 structures and the like, which we do not want. Only the target
207 md file should generate BImode widgets. */
209 const enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS] = {
210 /* MODE_RANDOM */ VOIDmode,
211 /* MODE_INT */ QImode,
212 /* MODE_FLOAT */ QFmode,
213 /* MODE_PARTIAL_INT */ PQImode,
214 /* MODE_CC */ CCmode,
215 /* MODE_COMPLEX_INT */ CQImode,
216 /* MODE_COMPLEX_FLOAT */ QCmode,
217 /* MODE_VECTOR_INT */ V2QImode,
218 /* MODE_VECTOR_FLOAT */ V2SFmode
222 /* Indexed by rtx code, gives a sequence of operand-types for
223 rtx's of that code. The sequence is a C string in which
224 each character describes one operand. */
226 const char * const rtx_format[NUM_RTX_CODE] = {
227 /* "*" undefined.
228 can cause a warning message
229 "0" field is unused (or used in a phase-dependent manner)
230 prints nothing
231 "i" an integer
232 prints the integer
233 "n" like "i", but prints entries from `note_insn_name'
234 "w" an integer of width HOST_BITS_PER_WIDE_INT
235 prints the integer
236 "s" a pointer to a string
237 prints the string
238 "S" like "s", but optional:
239 the containing rtx may end before this operand
240 "T" like "s", but treated specially by the RTL reader;
241 only found in machine description patterns.
242 "e" a pointer to an rtl expression
243 prints the expression
244 "E" a pointer to a vector that points to a number of rtl expressions
245 prints a list of the rtl expressions
246 "V" like "E", but optional:
247 the containing rtx may end before this operand
248 "u" a pointer to another insn
249 prints the uid of the insn.
250 "b" is a pointer to a bitmap header.
251 "t" is a tree pointer. */
253 #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) FORMAT ,
254 #include "rtl.def" /* rtl expressions are defined here */
255 #undef DEF_RTL_EXPR
258 /* Indexed by rtx code, gives a character representing the "class" of
259 that rtx code. See rtl.def for documentation on the defined classes. */
261 const char rtx_class[NUM_RTX_CODE] = {
262 #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS,
263 #include "rtl.def" /* rtl expressions are defined here */
264 #undef DEF_RTL_EXPR
267 /* Names for kinds of NOTEs and REG_NOTEs. */
269 const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS] =
271 "", "NOTE_INSN_DELETED",
272 "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
273 "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
274 "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP",
275 "NOTE_INSN_LOOP_END_TOP_COND", "NOTE_INSN_FUNCTION_END",
276 "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
277 "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG",
278 "NOTE_INSN_EH_REGION_BEG", "NOTE_INSN_EH_REGION_END",
279 "NOTE_INSN_REPEATED_LINE_NUMBER", "NOTE_INSN_RANGE_BEG",
280 "NOTE_INSN_RANGE_END", "NOTE_INSN_LIVE",
281 "NOTE_INSN_BASIC_BLOCK", "NOTE_INSN_EXPECTED_VALUE"
284 const char * const reg_note_name[] =
286 "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_EQUAL",
287 "REG_WAS_0", "REG_RETVAL", "REG_LIBCALL", "REG_NONNEG",
288 "REG_NO_CONFLICT", "REG_UNUSED", "REG_CC_SETTER", "REG_CC_USER",
289 "REG_LABEL", "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB",
290 "REG_EXEC_COUNT", "REG_NOALIAS", "REG_SAVE_AREA", "REG_BR_PRED",
291 "REG_FRAME_RELATED_EXPR", "REG_EH_CONTEXT", "REG_EH_REGION",
292 "REG_SAVE_NOTE", "REG_MAYBE_DEAD", "REG_NORETURN",
293 "REG_NON_LOCAL_GOTO", "REG_SETJMP", "REG_ALWAYS_RETURN",
294 "REG_VTABLE_REF"
298 /* Allocate an rtx vector of N elements.
299 Store the length, and initialize all elements to zero. */
301 rtvec
302 rtvec_alloc (n)
303 int n;
305 rtvec rt;
307 rt = ggc_alloc_rtvec (n);
308 /* clear out the vector */
309 memset (&rt->elem[0], 0, n * sizeof (rtx));
311 PUT_NUM_ELEM (rt, n);
312 return rt;
315 /* Allocate an rtx of code CODE. The CODE is stored in the rtx;
316 all the rest is initialized to zero. */
319 rtx_alloc (code)
320 RTX_CODE code;
322 rtx rt;
323 int n = GET_RTX_LENGTH (code);
325 rt = ggc_alloc_rtx (n);
327 /* We want to clear everything up to the FLD array. Normally, this
328 is one int, but we don't want to assume that and it isn't very
329 portable anyway; this is. */
331 memset (rt, 0, sizeof (struct rtx_def) - sizeof (rtunion));
332 PUT_CODE (rt, code);
333 return rt;
337 /* Create a new copy of an rtx.
338 Recursively copies the operands of the rtx,
339 except for those few rtx codes that are sharable. */
342 copy_rtx (orig)
343 rtx orig;
345 rtx copy;
346 int i, j;
347 RTX_CODE code;
348 const char *format_ptr;
350 code = GET_CODE (orig);
352 switch (code)
354 case REG:
355 case QUEUED:
356 case CONST_INT:
357 case CONST_DOUBLE:
358 case CONST_VECTOR:
359 case SYMBOL_REF:
360 case CODE_LABEL:
361 case PC:
362 case CC0:
363 case SCRATCH:
364 /* SCRATCH must be shared because they represent distinct values. */
365 case ADDRESSOF:
366 return orig;
368 case CONST:
369 /* CONST can be shared if it contains a SYMBOL_REF. If it contains
370 a LABEL_REF, it isn't sharable. */
371 if (GET_CODE (XEXP (orig, 0)) == PLUS
372 && GET_CODE (XEXP (XEXP (orig, 0), 0)) == SYMBOL_REF
373 && GET_CODE (XEXP (XEXP (orig, 0), 1)) == CONST_INT)
374 return orig;
375 break;
377 /* A MEM with a constant address is not sharable. The problem is that
378 the constant address may need to be reloaded. If the mem is shared,
379 then reloading one copy of this mem will cause all copies to appear
380 to have been reloaded. */
382 default:
383 break;
386 copy = rtx_alloc (code);
388 /* Copy the various flags, and other information. We assume that
389 all fields need copying, and then clear the fields that should
390 not be copied. That is the sensible default behavior, and forces
391 us to explicitly document why we are *not* copying a flag. */
392 memcpy (copy, orig, sizeof (struct rtx_def) - sizeof (rtunion));
394 /* We do not copy the USED flag, which is used as a mark bit during
395 walks over the RTL. */
396 copy->used = 0;
398 /* We do not copy FRAME_RELATED for INSNs. */
399 if (GET_RTX_CLASS (code) == 'i')
400 copy->frame_related = 0;
401 copy->jump = orig->jump;
402 copy->call = orig->call;
404 format_ptr = GET_RTX_FORMAT (GET_CODE (copy));
406 for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++)
408 copy->fld[i] = orig->fld[i];
409 switch (*format_ptr++)
411 case 'e':
412 if (XEXP (orig, i) != NULL)
413 XEXP (copy, i) = copy_rtx (XEXP (orig, i));
414 break;
416 case 'E':
417 case 'V':
418 if (XVEC (orig, i) != NULL)
420 XVEC (copy, i) = rtvec_alloc (XVECLEN (orig, i));
421 for (j = 0; j < XVECLEN (copy, i); j++)
422 XVECEXP (copy, i, j) = copy_rtx (XVECEXP (orig, i, j));
424 break;
426 case 't':
427 case 'w':
428 case 'i':
429 case 's':
430 case 'S':
431 case 'T':
432 case 'u':
433 case '0':
434 /* These are left unchanged. */
435 break;
437 default:
438 abort ();
441 return copy;
444 /* Create a new copy of an rtx. Only copy just one level. */
447 shallow_copy_rtx (orig)
448 rtx orig;
450 int i;
451 RTX_CODE code = GET_CODE (orig);
452 rtx copy = rtx_alloc (code);
454 PUT_MODE (copy, GET_MODE (orig));
455 copy->in_struct = orig->in_struct;
456 copy->volatil = orig->volatil;
457 copy->unchanging = orig->unchanging;
458 copy->integrated = orig->integrated;
459 copy->frame_related = orig->frame_related;
461 for (i = 0; i < GET_RTX_LENGTH (code); i++)
462 copy->fld[i] = orig->fld[i];
464 return copy;
467 /* Return the alignment of MODE. This will be bounded by 1 and
468 BIGGEST_ALIGNMENT. */
470 unsigned int
471 get_mode_alignment (mode)
472 enum machine_mode mode;
474 unsigned int alignment;
476 if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
477 || GET_MODE_CLASS (mode) == MODE_COMPLEX_INT)
478 alignment = GET_MODE_UNIT_SIZE (mode);
479 else
480 alignment = GET_MODE_SIZE (mode);
482 /* Extract the LSB of the size. */
483 alignment = alignment & -alignment;
484 alignment *= BITS_PER_UNIT;
486 alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
487 return alignment;
490 /* This is 1 until after the rtl generation pass. */
491 int rtx_equal_function_value_matters;
493 /* Nonzero when we are generating CONCATs. */
494 int generating_concat_p;
496 /* Return 1 if X and Y are identical-looking rtx's.
497 This is the Lisp function EQUAL for rtx arguments. */
500 rtx_equal_p (x, y)
501 rtx x, y;
503 int i;
504 int j;
505 enum rtx_code code;
506 const char *fmt;
508 if (x == y)
509 return 1;
510 if (x == 0 || y == 0)
511 return 0;
513 code = GET_CODE (x);
514 /* Rtx's of different codes cannot be equal. */
515 if (code != GET_CODE (y))
516 return 0;
518 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
519 (REG:SI x) and (REG:HI x) are NOT equivalent. */
521 if (GET_MODE (x) != GET_MODE (y))
522 return 0;
524 /* Some RTL can be compared nonrecursively. */
525 switch (code)
527 case REG:
528 /* Until rtl generation is complete, don't consider a reference
529 to the return register of the current function the same as
530 the return from a called function. This eases the job of
531 function integration. Once the distinction is no longer
532 needed, they can be considered equivalent. */
533 return (REGNO (x) == REGNO (y)
534 && (! rtx_equal_function_value_matters
535 || REG_FUNCTION_VALUE_P (x) == REG_FUNCTION_VALUE_P (y)));
537 case LABEL_REF:
538 return XEXP (x, 0) == XEXP (y, 0);
540 case SYMBOL_REF:
541 return XSTR (x, 0) == XSTR (y, 0);
543 case SCRATCH:
544 case CONST_DOUBLE:
545 case CONST_INT:
546 case CONST_VECTOR:
547 return 0;
549 default:
550 break;
553 /* Compare the elements. If any pair of corresponding elements
554 fail to match, return 0 for the whole things. */
556 fmt = GET_RTX_FORMAT (code);
557 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
559 switch (fmt[i])
561 case 'w':
562 if (XWINT (x, i) != XWINT (y, i))
563 return 0;
564 break;
566 case 'n':
567 case 'i':
568 if (XINT (x, i) != XINT (y, i))
569 return 0;
570 break;
572 case 'V':
573 case 'E':
574 /* Two vectors must have the same length. */
575 if (XVECLEN (x, i) != XVECLEN (y, i))
576 return 0;
578 /* And the corresponding elements must match. */
579 for (j = 0; j < XVECLEN (x, i); j++)
580 if (rtx_equal_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
581 return 0;
582 break;
584 case 'e':
585 if (rtx_equal_p (XEXP (x, i), XEXP (y, i)) == 0)
586 return 0;
587 break;
589 case 'S':
590 case 's':
591 if ((XSTR (x, i) || XSTR (y, i))
592 && (! XSTR (x, i) || ! XSTR (y, i)
593 || strcmp (XSTR (x, i), XSTR (y, i))))
594 return 0;
595 break;
597 case 'u':
598 /* These are just backpointers, so they don't matter. */
599 break;
601 case '0':
602 case 't':
603 break;
605 /* It is believed that rtx's at this level will never
606 contain anything but integers and other rtx's,
607 except for within LABEL_REFs and SYMBOL_REFs. */
608 default:
609 abort ();
612 return 1;
615 #if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)
616 void
617 rtl_check_failed_bounds (r, n, file, line, func)
618 rtx r;
619 int n;
620 const char *file;
621 int line;
622 const char *func;
624 internal_error
625 ("RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d",
626 n, GET_RTX_NAME (GET_CODE (r)), GET_RTX_LENGTH (GET_CODE (r)) - 1,
627 func, trim_filename (file), line);
630 void
631 rtl_check_failed_type1 (r, n, c1, file, line, func)
632 rtx r;
633 int n;
634 int c1;
635 const char *file;
636 int line;
637 const char *func;
639 internal_error
640 ("RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d",
641 n, c1, GET_RTX_FORMAT (GET_CODE (r))[n], GET_RTX_NAME (GET_CODE (r)),
642 func, trim_filename (file), line);
645 void
646 rtl_check_failed_type2 (r, n, c1, c2, file, line, func)
647 rtx r;
648 int n;
649 int c1;
650 int c2;
651 const char *file;
652 int line;
653 const char *func;
655 internal_error
656 ("RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d",
657 n, c1, c2, GET_RTX_FORMAT (GET_CODE (r))[n], GET_RTX_NAME (GET_CODE (r)),
658 func, trim_filename (file), line);
661 void
662 rtl_check_failed_code1 (r, code, file, line, func)
663 rtx r;
664 enum rtx_code code;
665 const char *file;
666 int line;
667 const char *func;
669 internal_error ("RTL check: expected code `%s', have `%s' in %s, at %s:%d",
670 GET_RTX_NAME (code), GET_RTX_NAME (GET_CODE (r)), func,
671 trim_filename (file), line);
674 void
675 rtl_check_failed_code2 (r, code1, code2, file, line, func)
676 rtx r;
677 enum rtx_code code1, code2;
678 const char *file;
679 int line;
680 const char *func;
682 internal_error
683 ("RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d",
684 GET_RTX_NAME (code1), GET_RTX_NAME (code2), GET_RTX_NAME (GET_CODE (r)),
685 func, trim_filename (file), line);
688 /* XXX Maybe print the vector? */
689 void
690 rtvec_check_failed_bounds (r, n, file, line, func)
691 rtvec r;
692 int n;
693 const char *file;
694 int line;
695 const char *func;
697 internal_error
698 ("RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d",
699 n, GET_NUM_ELEM (r) - 1, func, trim_filename (file), line);
701 #endif /* ENABLE_RTL_CHECKING */