rtl.texi (117395) | rtl.texi (119256) |
---|---|
1@c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003 2@c Free Software Foundation, Inc. 3@c This is part of the GCC manual. 4@c For copying conditions, see the file gcc.texi. 5 6@node RTL 7@chapter RTL Representation 8@cindex RTL representation --- 594 unchanged lines hidden (view full) --- 603Stored in the @code{integrated} field and printed as @samp{/i}. 604 605@findex RTX_UNCHANGING_P 606@cindex @code{reg} and @samp{/u} 607@cindex @code{mem} and @samp{/u} 608@cindex @code{concat} and @samp{/u} 609@cindex @code{unchanging}, in @code{reg} and @code{mem} 610@item RTX_UNCHANGING_P (@var{x}) | 1@c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003 2@c Free Software Foundation, Inc. 3@c This is part of the GCC manual. 4@c For copying conditions, see the file gcc.texi. 5 6@node RTL 7@chapter RTL Representation 8@cindex RTL representation --- 594 unchanged lines hidden (view full) --- 603Stored in the @code{integrated} field and printed as @samp{/i}. 604 605@findex RTX_UNCHANGING_P 606@cindex @code{reg} and @samp{/u} 607@cindex @code{mem} and @samp{/u} 608@cindex @code{concat} and @samp{/u} 609@cindex @code{unchanging}, in @code{reg} and @code{mem} 610@item RTX_UNCHANGING_P (@var{x}) |
611Nonzero in a @code{reg}, @code{mem}, or @code{concat} if the memory 612is set at most once, 613anywhere. This does not mean that it is function invariant. | 611Nonzero in a @code{reg}, @code{mem}, or @code{concat} if the register or 612memory is set at most once, anywhere. This does not mean that it is 613function invariant. 614 615GCC uses this flag to determine whether two references conflict. As 616implemented by @code{true_dependence} in @file{alias.c} for memory 617references, unchanging memory can't conflict with non-unchanging memory; 618a non-unchanging read can conflict with a non-unchanging write; an 619unchanging read can conflict with an unchanging write (since there may 620be a single store to this address to initialize it); and an unchanging 621store can conflict with a non-unchanging read. This means we must make 622conservative assumptions when choosing the value of this flag for a 623memory reference to an object containing both unchanging and 624non-unchanging fields: we must set the flag when writing to the object 625and clear it when reading from the object. 626 |
614Stored in the @code{unchanging} field and printed as @samp{/u}. 615 616@findex SCHED_GROUP_P 617@cindex @code{insn} and @samp{/s} 618@cindex @code{call_insn} and @samp{/s} 619@cindex @code{jump_insn} and @samp{/s} 620@cindex @code{in_struct}, in @code{insn}, @code{jump_insn} and @code{call_insn} 621@item SCHED_GROUP_P (@var{x}) --- 60 unchanged lines hidden (view full) --- 682was promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine 683description macro (@pxref{Storage Layout}). In this case, the mode of 684the @code{subreg} is the declared mode of the object and the mode of 685@code{SUBREG_REG} is the mode of the register that holds the object. 686Promoted variables are always either sign- or zero-extended to the wider 687mode on every assignment. Stored in the @code{in_struct} field and 688printed as @samp{/s}. 689 | 627Stored in the @code{unchanging} field and printed as @samp{/u}. 628 629@findex SCHED_GROUP_P 630@cindex @code{insn} and @samp{/s} 631@cindex @code{call_insn} and @samp{/s} 632@cindex @code{jump_insn} and @samp{/s} 633@cindex @code{in_struct}, in @code{insn}, @code{jump_insn} and @code{call_insn} 634@item SCHED_GROUP_P (@var{x}) --- 60 unchanged lines hidden (view full) --- 695was promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine 696description macro (@pxref{Storage Layout}). In this case, the mode of 697the @code{subreg} is the declared mode of the object and the mode of 698@code{SUBREG_REG} is the mode of the register that holds the object. 699Promoted variables are always either sign- or zero-extended to the wider 700mode on every assignment. Stored in the @code{in_struct} field and 701printed as @samp{/s}. 702 |
690@findex SYMBOL_REF_FLAG 691@cindex @code{symbol_ref} and @samp{/v} 692@cindex @code{volatil}, in @code{symbol_ref} 693@item SYMBOL_REF_FLAG (@var{x}) 694In a @code{symbol_ref}, this is used as a flag for machine-specific purposes. 695Stored in the @code{volatil} field and printed as @samp{/v}. 696 | |
697@findex SYMBOL_REF_USED 698@cindex @code{used}, in @code{symbol_ref} 699@item SYMBOL_REF_USED (@var{x}) 700In a @code{symbol_ref}, indicates that @var{x} has been used. This is 701normally only used to ensure that @var{x} is only declared external 702once. Stored in the @code{used} field. 703 704@findex SYMBOL_REF_WEAK 705@cindex @code{symbol_ref} and @samp{/i} 706@cindex @code{integrated}, in @code{symbol_ref} 707@item SYMBOL_REF_WEAK (@var{x}) 708In a @code{symbol_ref}, indicates that @var{x} has been declared weak. 709Stored in the @code{integrated} field and printed as @samp{/i}. | 703@findex SYMBOL_REF_USED 704@cindex @code{used}, in @code{symbol_ref} 705@item SYMBOL_REF_USED (@var{x}) 706In a @code{symbol_ref}, indicates that @var{x} has been used. This is 707normally only used to ensure that @var{x} is only declared external 708once. Stored in the @code{used} field. 709 710@findex SYMBOL_REF_WEAK 711@cindex @code{symbol_ref} and @samp{/i} 712@cindex @code{integrated}, in @code{symbol_ref} 713@item SYMBOL_REF_WEAK (@var{x}) 714In a @code{symbol_ref}, indicates that @var{x} has been declared weak. 715Stored in the @code{integrated} field and printed as @samp{/i}. |
716 717@findex SYMBOL_REF_FLAG 718@cindex @code{symbol_ref} and @samp{/v} 719@cindex @code{volatil}, in @code{symbol_ref} 720@item SYMBOL_REF_FLAG (@var{x}) 721In a @code{symbol_ref}, this is used as a flag for machine-specific purposes. 722Stored in the @code{volatil} field and printed as @samp{/v}. 723 724Most uses of @code{SYMBOL_REF_FLAG} are historic and may be subsumed 725by @code{SYMBOL_REF_FLAGS}. Certainly use of @code{SYMBOL_REF_FLAGS} 726is mandatory if the target requires more than one bit of storage. |
|
710@end table 711 712These are the fields to which the above macros refer: 713 714@table @code 715@findex call 716@cindex @samp{/c} in RTL dump 717@item call --- 1472 unchanged lines hidden (view full) --- 2190the codes described above, which represent values, appear only as 2191the operands of these. 2192 2193@table @code 2194@findex set 2195@item (set @var{lval} @var{x}) 2196Represents the action of storing the value of @var{x} into the place 2197represented by @var{lval}. @var{lval} must be an expression | 727@end table 728 729These are the fields to which the above macros refer: 730 731@table @code 732@findex call 733@cindex @samp{/c} in RTL dump 734@item call --- 1472 unchanged lines hidden (view full) --- 2207the codes described above, which represent values, appear only as 2208the operands of these. 2209 2210@table @code 2211@findex set 2212@item (set @var{lval} @var{x}) 2213Represents the action of storing the value of @var{x} into the place 2214represented by @var{lval}. @var{lval} must be an expression |
2198representing a place that can be stored in: @code{reg} (or @code{subreg} 2199or @code{strict_low_part}), @code{mem}, @code{pc}, @code{parallel}, or 2200@code{cc0}. | 2215representing a place that can be stored in: @code{reg} (or @code{subreg}, 2216@code{strict_low_part} or @code{zero_extract}), @code{mem}, @code{pc}, 2217@code{parallel}, or @code{cc0}. |
2201 2202If @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a 2203machine mode; then @var{x} must be valid for that mode. 2204 2205If @var{lval} is a @code{reg} whose machine mode is less than the full 2206width of the register, then it means that the part of the register 2207specified by the machine mode is given the specified value and the 2208rest of the register receives an undefined value. Likewise, if 2209@var{lval} is a @code{subreg} whose machine mode is narrower than 2210the mode of the register, the rest of the register can be changed in 2211an undefined way. 2212 | 2218 2219If @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a 2220machine mode; then @var{x} must be valid for that mode. 2221 2222If @var{lval} is a @code{reg} whose machine mode is less than the full 2223width of the register, then it means that the part of the register 2224specified by the machine mode is given the specified value and the 2225rest of the register receives an undefined value. Likewise, if 2226@var{lval} is a @code{subreg} whose machine mode is narrower than 2227the mode of the register, the rest of the register can be changed in 2228an undefined way. 2229 |
2213If @var{lval} is a @code{strict_low_part} of a @code{subreg}, then the 2214part of the register specified by the machine mode of the 2215@code{subreg} is given the value @var{x} and the rest of the register 2216is not changed. | 2230If @var{lval} is a @code{strict_low_part} or @code{zero_extract} 2231of a @code{subreg}, then the part of the register specified by the 2232machine mode of the @code{subreg} is given the value @var{x} and 2233the rest of the register is not changed. |
2217 2218If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may 2219be either a @code{compare} expression or a value that may have any mode. 2220The latter case represents a ``test'' instruction. The expression 2221@code{(set (cc0) (reg:@var{m} @var{n}))} is equivalent to 2222@code{(set (cc0) (compare (reg:@var{m} @var{n}) (const_int 0)))}. 2223Use the former expression to save space during the compilation. 2224 --- 1249 unchanged lines hidden --- | 2234 2235If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may 2236be either a @code{compare} expression or a value that may have any mode. 2237The latter case represents a ``test'' instruction. The expression 2238@code{(set (cc0) (reg:@var{m} @var{n}))} is equivalent to 2239@code{(set (cc0) (compare (reg:@var{m} @var{n}) (const_int 0)))}. 2240Use the former expression to save space during the compilation. 2241 --- 1249 unchanged lines hidden --- |