|
|
1.1 root 1:
2:
3: File: internals, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL
4:
5: Side Effect Expressions
6: =======================
7:
8: The expression codes described so far represent values, not actions. But
9: machine instructions never produce values; they are meaningful only for
10: their side effects on the state of the machine. Special expression codes
11: are used to represent side effects.
12:
13: The body of an instruction is always one of these side effect codes; the
14: codes described above, which represent values, appear only as the operands
15: of these.
16:
17: `(set LVAL X)'
18: Represents the action of storing the value of X into the place
19: represented by LVAL. LVAL must be an expression representing a place
20: that can be stored in: `reg' (or `subreg' or `strict_low_part'),
21: `mem', `pc' or `cc0'.
22:
23: If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then X
24: must be valid for that mode.
25:
26: If LVAL is a `reg' whose machine mode is less than the full width of
27: the register, then it means that the part of the register specified by
28: the machine mode is given the specified value and the rest of the
29: register receives an undefined value. Likewise, if LVAL is a `subreg'
30: whose machine mode is narrower than `SImode', the rest of the register
31: can be changed in an undefined way.
32:
33: If LVAL is a `strict_low_part' of a `subreg', then the part of the
34: register specified by the machine mode of the `subreg' is given the
35: value X and the rest of the register is not changed.
36:
37: If LVAL is `(cc0)', it has no machine mode, and X may have any mode.
38: This represents a ``test'' or ``compare'' instruction.
39:
40: If LVAL is `(pc)', we have a jump instruction, and the possibilities
41: for X are very limited. It may be a `label_ref' expression
42: (unconditional jump). It may be an `if_then_else' (conditional jump),
43: in which case either the second or the third operand must be `(pc)'
44: (for the case which does not jump) and the other of the two must be a
45: `label_ref' (for the case which does jump). X may also be a `mem' or
46: `(plus:SI (pc) Y)', where Y may be a `reg' or a `mem'; these unusual
47: patterns are used to represent jumps through branch tables.
48:
49: `(return)'
50: Represents a return from the current function, on machines where this
51: can be done with one instruction, such as Vaxes. On machines where a
52: multi-instruction ``epilogue'' must be executed in order to return
53: from the function, returning is done by jumping to a label which
54: precedes the epilogue, and the `return' expression code is never used.
55:
56: `(call FUNCTION NARGS)'
57: Represents a function call. FUNCTION is a `mem' expression whose
58: address is the address of the function to be called. NARGS is an
59: expression representing the number of words of argument.
60:
61: Each machine has a standard machine mode which FUNCTION must have.
62: The machine description defines macro `FUNCTION_MODE' to expand into
63: the requisite mode name. The purpose of this mode is to specify what
64: kind of addressing is allowed, on machines where the allowed kinds of
65: addressing depend on the machine mode being addressed.
66:
67: `(clobber X)'
68: Represents the storing or possible storing of an unpredictable,
69: undescribed value into X, which must be a `reg' or `mem' expression.
70:
71: One place this is used is in string instructions that store standard
72: values into particular hard registers. It may not be worth the
73: trouble to describe the values that are stored, but it is essential to
74: inform the compiler that the registers will be altered, lest it
75: attempt to keep data in them across the string instruction.
76:
77: X may also be null---a null C pointer, no expression at all. Such a
78: `(clobber (null))' expression means that all memory locations must be
79: presumed clobbered.
80:
81: Note that the machine description classifies certain hard registers as
82: ``call-clobbered''. All function call instructions are assumed by
83: default to clobber these registers, so there is no need to use
84: `clobber' expressions to indicate this fact. Also, each function call
85: is assumed to have the potential to alter any memory location.
86:
87: `(use X)'
88: Represents the use of the value of X. It indicates that the value in
89: X at this point in the program is needed, even though it may not be
90: apparent why this is so. Therefore, the compiler will not attempt to
91: delete instructions whose only effect is to store a value in X. X
92: must be a `reg' expression.
93:
94: `(parallel [X0 X1 ...])'
95: Represents several side effects performed in parallel. The square
96: brackets stand for a vector; the operand of `parallel' is a vector of
97: expressions. X0, X1 and so on are individual side
98: effects---expressions of code `set', `call', `return', `clobber' or
99: `use'.
100:
101: ``In parallel'' means that first all the values used in the individual
102: side-effects are computed, and second all the actual side-effects are
103: performed. For example,
104:
105: (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
106: (set (mem:SI (reg:SI 1)) (reg:SI 1))])
107:
108: says unambiguously that the values of hard register 1 and the memory
109: location addressed by it are interchanged. In both places where
110: `(reg:SI 1)' appears as a memory address it refers to the value in
111: register 1 *before* the execution of the instruction.
112:
113: `(sequence [INSNS ...])'
114: Represents a sequence of insns. Each of the INSNS that appears in the
115: vector is suitable for appearing in the chain of insns, so it must be
116: an `insn', `jump_insn', `call_insn', `code_label', `barrier' or `note'.
117:
118: A `sequence' RTX never appears in an actual insn. It represents the
119: sequence of insns that result from a `define_expand' *before* those
120: insns are passed to `emit_insn' to insert them in the chain of insns.
121: When actually inserted, the individual sub-insns are separated out and
122: the `sequence' is forgotten.
123:
124: Three expression codes appear in place of a side effect, as the body of an
125: insn, though strictly speaking they do not describe side effects as such:
126:
127: `(asm_input S)'
128: Represents literal assembler code as described by the string S.
129:
130: `(addr_vec:M [LR0 LR1 ...])'
131: Represents a table of jump addresses. The vector elements LR0, etc.,
132: are `label_ref' expressions. The mode M specifies how much space is
133: given to each address; normally M would be `Pmode'.
134:
135: `(addr_diff_vec:M BASE [LR0 LR1 ...])'
136: Represents a table of jump addresses expressed as offsets from BASE.
137: The vector elements LR0, etc., are `label_ref' expressions and so is
138: BASE. The mode M specifies how much space is given to each
139: address-difference.
140:
141:
142: File: internals, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL
143:
144: Embedded Side-Effects on Addresses
145: ==================================
146:
147: Four special side-effect expression codes appear as memory addresses.
148:
149: `(pre_dec:M X)'
150: Represents the side effect of decrementing X by a standard amount and
151: represents also the value that X has after being decremented. X must
152: be a `reg' or `mem', but most machines allow only a `reg'. M must be
153: the machine mode for pointers on the machine in use. The amount X is
154: decremented by is the length in bytes of the machine mode of the
155: containing memory reference of which this expression serves as the
156: address. Here is an example of its use:
157:
158: (mem:DF (pre_dec:SI (reg:SI 39)))
159:
160: This says to decrement pseudo register 39 by the length of a `DFmode'
161: value and use the result to address a `DFmode' value.
162:
163: `(pre_inc:M X)'
164: Similar, but specifies incrementing X instead of decrementing it.
165:
166: `(post_dec:M X)'
167: Represents the same side effect as `pre_decrement' but a different
168: value. The value represented here is the value X has before being
169: decremented.
170:
171: `(post_inc:M X)'
172: Similar, but specifies incrementing X instead of decrementing it.
173:
174: These embedded side effect expressions must be used with care. Instruction
175: patterns may not use them. Until the `flow' pass of the compiler, they may
176: occur only to represent pushes onto the stack. The `flow' pass finds cases
177: where registers are incremented or decremented in one instruction and used
178: as an address shortly before or after; these cases are then transformed to
179: use pre- or post-increment or -decrement.
180:
181: Explicit popping of the stack could be represented with these embedded side
182: effect operators, but that would not be safe; the instruction combination
183: pass could move the popping past pushes, thus changing the meaning of the
184: code.
185:
186: An instruction that can be represented with an embedded side effect could
187: also be represented using `parallel' containing an additional `set' to
188: describe how the address register is altered. This is not done because
189: machines that allow these operations at all typically allow them wherever a
190: memory address is called for. Describing them as additional parallel
191: stores would require doubling the number of entries in the machine
192: description.
193:
194:
195: File: internals, Node: Assembler, Next: Insns, Prev: IncDec, Up: RTL
196:
197: Assembler Instructions as Expressions
198: =====================================
199:
200: The RTX code `asm_operands' represents a value produced by a user-specified
201: assembler instruction. It is used to represent an `asm' statement with
202: arguments. An `asm' statement with a single output operand, like this:
203:
204: asm ("foo %1,%2,%0" : "a" (outputvar) : "g" (x + y), "di" (*z));
205:
206: is represented using a single `asm_operands' RTX which represents the value
207: that is stored in `outputvar':
208:
209: (set RTX-FOR-OUTPUTVAR
210: (asm_operands "foo %1,%2,%0" "a" 0
211: [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
212: [(asm_input:M1 "g")
213: (asm_input:M2 "di")]))
214:
215: Here the operands of the `asm_operands' RTX are the assembler template
216: string, the output-operand's constraint, the index-number of the output
217: operand among the output operands specified, a vector of input operand
218: RTX's, and a vector of input-operand modes and constraints. The mode M1 is
219: the mode of the sum `x+y'; M2 is that of `*z'.
220:
221: When an `asm' statement has multiple output values, its insn has several
222: such `set' RTX's inside of a `parallel'. Each `set' contains a
223: `asm_operands'; all of these share the same assembler template and vectors,
224: but each contains the constraint for the respective output operand. They
225: are also distinguished by the output-operand index number, which is 0, 1,
226: ... for successive output operands.
227:
228:
229: File: internals, Node: Insns, Next: Calls, Prev: Assembler, Up: RTL
230:
231: Insns
232: =====
233:
234: The RTL representation of the code for a function is a doubly-linked chain
235: of objects called "insns". Insns are expressions with special codes that
236: are used for no other purpose. Some insns are actual instructions; others
237: represent dispatch tables for `switch' statements; others represent labels
238: to jump to or various sorts of declarative information.
239:
240: In addition to its own specific data, each insn must have a unique
241: id-number that distinguishes it from all other insns in the current
242: function, and chain pointers to the preceding and following insns. These
243: three fields occupy the same position in every insn, independent of the
244: expression code of the insn. They could be accessed with `XEXP' and
245: `XINT', but instead three special macros are always used:
246:
247: `INSN_UID (I)'
248: Accesses the unique id of insn I.
249:
250: `PREV_INSN (I)'
251: Accesses the chain pointer to the insn preceding I. If I is the first
252: insn, this is a null pointer.
253:
254: `NEXT_INSN (I)'
255: Accesses the chain pointer to the insn following I. If I is the last
256: insn, this is a null pointer.
257:
258: The `NEXT_INSN' and `PREV_INSN' pointers must always correspond: if I is
259: not the first insn,
260:
261: NEXT_INSN (PREV_INSN (INSN)) == INSN
262:
263: is always true.
264:
265: Every insn has one of the following six expression codes:
266:
267: `insn'
268: The expression code `insn' is used for instructions that do not jump
269: and do not do function calls. Insns with code `insn' have four
270: additional fields beyond the three mandatory ones listed above. These
271: four are described in a table below.
272:
273: `jump_insn'
274: The expression code `jump_insn' is used for instructions that may jump
275: (or, more generally, may contain `label_ref' expressions).
276: `jump_insn' insns have the same extra fields as `insn' insns, accessed
277: in the same way.
278:
279: `call_insn'
280: The expression code `call_insn' is used for instructions that may do
281: function calls. It is important to distinguish these instructions
282: because they imply that certain registers and memory locations may be
283: altered unpredictably.
284:
285: `call_insn' insns have the same extra fields as `insn' insns, accessed
286: in the same way.
287:
288: `code_label'
289: A `code_label' insn represents a label that a jump insn can jump to.
290: It contains one special field of data in addition to the three
291: standard ones. It is used to hold the "label number", a number that
292: identifies this label uniquely among all the labels in the compilation
293: (not just in the current function). Ultimately, the label is
294: represented in the assembler output as an assembler label `LN' where N
295: is the label number.
296:
297: `barrier'
298: Barriers are placed in the instruction stream after unconditional jump
299: instructions to indicate that the jumps are unconditional. They
300: contain no information beyond the three standard fields.
301:
302: `note'
303: `note' insns are used to represent additional debugging and
304: declarative information. They contain two nonstandard fields, an
305: integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
306: string accessed with `NOTE_SOURCE_FILE'.
307:
308: If `NOTE_LINE_NUMBER' is positive, the note represents the position of
309: a source line and `NOTE_SOURCE_FILE' is the source file name that the
310: line came from. These notes control generation of line number data in
311: the assembler output.
312:
313: Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a code
314: with one of the following values (and `NOTE_SOURCE_FILE' must contain
315: a null pointer):
316:
317: `NOTE_INSN_DELETED'
318: Such a note is completely ignorable. Some passes of the compiler
319: delete insns by altering them into notes of this kind.
320:
321: `NOTE_INSN_BLOCK_BEG'
322: `NOTE_INSN_BLOCK_END'
323: These types of notes indicate the position of the beginning and
324: end of a level of scoping of variable names. They control the
325: output of debugging information.
326:
327: `NOTE_INSN_LOOP_BEG'
328: `NOTE_INSN_LOOP_END'
329: These types of notes indicate the position of the beginning and
330: end of a `while' or `for' loop. They enable the loop optimizer
331: to find loops quickly.
332:
333: Here is a table of the extra fields of `insn', `jump_insn' and `call_insn'
334: insns:
335:
336: `PATTERN (I)'
337: An expression for the side effect performed by this insn.
338:
339: `REG_NOTES (I)'
340: A list (chain of `expr_list' expressions) giving information about the
341: usage of registers in this insn. This list is set up by the flow
342: analysis pass; it is a null pointer until then.
343:
344: `LOG_LINKS (I)'
345: A list (chain of `insn_list' expressions) of previous ``related''
346: insns: insns which store into registers values that are used for the
347: first time in this insn. (An additional constraint is that neither a
348: jump nor a label may come between the related insns). This list is
349: set up by the flow analysis pass; it is a null pointer until then.
350:
351: `INSN_CODE (I)'
352: An integer that says which pattern in the machine description matches
353: this insn, or -1 if the matching has not yet been attempted.
354:
355: Such matching is never attempted and this field is not used on an insn
356: whose pattern consists of a single `use', `clobber', `asm', `addr_vec'
357: or `addr_diff_vec' expression.
358:
359: The `LOG_LINKS' field of an insn is a chain of `insn_list' expressions.
360: Each of these has two operands: the first is an insn, and the second is
361: another `insn_list' expression (the next one in the chain). The last
362: `insn_list' in the chain has a null pointer as second operand. The
363: significant thing about the chain is which insns appear in it (as first
364: operands of `insn_list' expressions). Their order is not significant.
365:
366: The `REG_NOTES' field of an insn is a similar chain but of `expr_list'
367: expressions instead of `insn_list'. There are four kinds of register
368: notes, which are distinguished by the machine mode of the `expr_list',
369: which a register note is really understood as being an `enum reg_note'.
370: The first operand OP of the `expr_list' is data whose meaning depends on
371: the kind of note. Here are the four kinds:
372:
373: `REG_DEAD'
374: The register OP dies in this insn; that is to say, altering the value
375: immediately after this insn would not affect the future behavior of
376: the program.
377:
378: `REG_INC'
379: The register OP is incremented (or decremented; at this level there is
380: no distinction) by an embedded side effect inside this insn. This
381: means it appears in a `POST_INC', `PRE_INC', `POST_DEC' or `PRE_DEC'
382: RTX.
383:
384: `REG_EQUIV'
385: The register that is set by this insn will be equal to OP at run time,
386: and could validly be replaced in all its occurrences by OP.
387: (``Validly'' here refers to the data flow of the program; simple
388: replacement may make some insns invalid.)
389:
390: The value which the insn explicitly copies into the register may look
391: different from OP, but they will be equal at run time.
392:
393: For example, when a constant is loaded into a register that is never
394: assigned any other value, this kind of note is used.
395:
396: When a parameter is copied into a pseudo-register at entry to a
397: function, a note of this kind records that the register is equivalent
398: to the stack slot where the parameter was passed. Although in this
399: case the register may be set by other insns, it is still valid to
400: replace the register by the stack slot throughout the function.
401:
402: `REG_EQUAL'
403: The register that is set by this insn will be equal to OP at run time
404: at the end of this insn (but not necessarily elsewhere in the function).
405:
406: The RTX OP is typically an arithmetic expression. For example, when a
407: sequence of insns such as a library call is used to perform an
408: arithmetic operation, this kind of note is attached to the insn that
409: produces or copies the final value. It tells the CSE pass how to
410: think of that value.
411:
412: `REG_RETVAL'
413: This insn copies the value of a library call, and OP is the first insn
414: that was generated to set up the arguments for the library call.
415:
416: Flow analysis uses this note to delete all of a library call whose
417: result is dead.
418:
419: `REG_WAS_0'
420: The register OP contained zero before this insn. You can rely on this
421: note if it is present; its absence implies nothing.
422:
423: (The only difference between the expression codes `insn_list' and
424: `expr_list' is that the first operand of an `insn_list' is assumed to be an
425: insn and is printed in debugging dumps as the insn's unique id; the first
426: operand of an `expr_list' is printed in the ordinary way as an expression.)
427:
428:
429: File: internals, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL
430:
431: RTL Representation of Function-Call Insns
432: =========================================
433:
434: Insns that call subroutines have the RTL expression code `call_insn'.
435: These insns must satisfy special rules, and their bodies must use a special
436: RTL expression code, `call'.
437:
438: A `call' expression has two operands, as follows:
439:
440: (call NBYTES (mem:FM ADDR))
441:
442: Here NBYTES is an operand that represents the number of bytes of argument
443: data being passed to the subroutine, FM is a machine mode (which must equal
444: as the definition of the `FUNCTION_MODE' macro in the machine description)
445: and ADDR represents the address of the subroutine.
446:
447: For a subroutine that returns no value, the `call' RTX as shown above is
448: the entire body of the insn.
449:
450: For a subroutine that returns a value whose mode is not `BLKmode', the
451: value is returned in a hard register. If this register's number is R, then
452: the body of the call insn looks like this:
453:
454: (set (reg:M R)
455: (call NBYTES (mem:FM ADDR)))
456:
457: This RTL expression makes it clear (to the optimizer passes) that the
458: appropriate register receives a useful value in this insn.
459:
460: Immediately after RTL generation, if the value of the subroutine is
461: actually used, this call insn is always followed closely by an insn which
462: refers to the register R. This remains true through all the optimizer
463: passes until cross jumping occurs.
464:
465: The following insn has one of two forms. Either it copies the value into a
466: pseudo-register, like this:
467:
468: (set (reg:M P) (reg:M R))
469:
470: or (in the case where the calling function will simply return whatever
471: value the call produced, and no operation is needed to do this):
472:
473: (use (reg:M R))
474:
475: Between the call insn and this following insn there may intervene only a
476: stack-adjustment insn (and perhaps some `note' insns).
477:
478: When a subroutine returns a `BLKmode' value, it is handled by passing to
479: the subroutine the address of a place to store the value. So the call insn
480: itself does not ``return'' any value, and it has the same RTL form as a
481: call that returns nothing.
482:
483:
484: File: internals, Node: Sharing, Prev: Calls, Up: RTL
485:
486: Structure Sharing Assumptions
487: =============================
488:
489: The compiler assumes that certain kinds of RTL expressions are unique;
490: there do not exist two distinct objects representing the same value. In
491: other cases, it makes an opposite assumption: that no RTL expression object
492: of a certain kind appears in more than one place in the containing structure.
493:
494: These assumptions refer to a single function; except for the RTL objects
495: that describe global variables and external functions, no RTL objects are
496: common to two functions.
497:
498: * Each pseudo-register has only a single `reg' object to represent it,
499: and therefore only a single machine mode.
500:
501: * For any symbolic label, there is only one `symbol_ref' object
502: referring to it.
503:
504: * There is only one `const_int' expression with value zero, and only one
505: with value one.
506:
507: * There is only one `pc' expression.
508:
509: * There is only one `cc0' expression.
510:
511: * There is only one `const_double' expression with mode `SFmode' and
512: value zero, and only one with mode `DFmode' and value zero.
513:
514: * No `label_ref' appears in more than one place in the RTL structure; in
515: other words, it is safe to do a tree-walk of all the insns in the
516: function and assume that each time a `label_ref' is seen it is
517: distinct from all others that are seen.
518:
519: * Only one `mem' object is normally created for each static variable or
520: stack slot, so these objects are frequently shared in all the places
521: they appear. However, separate but equal objects for these variables
522: are occasionally made.
523:
524: * No RTL object appears in more than one place in the RTL structure
525: except as described above. Many passes of the compiler rely on this
526: by assuming that they can modify RTL objects in place without unwanted
527: side-effects on other insns.
528:
529: * During initial RTL generation, shared structure is freely introduced.
530: After all the RTL for a function has been generated, all shared
531: structure is copied by `unshare_all_rtl' in `emit-rtl.c', after which
532: the above rules are guaranteed to be followed.
533:
534: * During the combiner pass, shared structure with an insn can exist
535: temporarily. However, the shared structure is copied before the
536: combiner is finished with the insn. This is done by
537: `copy_substitutions' in `combine.c'.
538:
539:
540: File: internals, Node: Machine Desc, Next: Machine Macros, Prev: RTL, Up: Top
541:
542: Machine Descriptions
543: ********************
544:
545: A machine description has two parts: a file of instruction patterns (`.md'
546: file) and a C header file of macro definitions.
547:
548: The `.md' file for a target machine contains a pattern for each instruction
549: that the target machine supports (or at least each instruction that is
550: worth telling the compiler about). It may also contain comments. A
551: semicolon causes the rest of the line to be a comment, unless the semicolon
552: is inside a quoted string.
553:
554: See the next chapter for information on the C header file.
555:
556: * Menu:
557:
558: * Patterns:: How to write instruction patterns.
559: * Example:: An explained example of a `define_insn' pattern.
560: * RTL Template:: The RTL template defines what insns match a pattern.
561: * Output Template:: The output template says how to make assembler code
562: from such an insn.
563: * Output Statement:: For more generality, write C code to output
564: the assembler code.
565: * Constraints:: When not all operands are general operands.
566: * Standard Names:: Names mark patterns to use for code generation.
567: * Pattern Ordering:: When the order of patterns makes a difference.
568: * Dependent Patterns:: Having one pattern may make you need another.
569: * Jump Patterns:: Special considerations for patterns for jump insns.
570: * Peephole Definitions::Defining machine-specific peephole optimizations.
571: * Expander Definitions::Generating a sequence of several RTL insns
572: for a standard operation.
573:
574:
575:
576: File: internals, Node: Patterns, Next: Example, Prev: Machine Desc, Up: Machine Desc
577:
578: Everything about Instruction Patterns
579: =====================================
580:
581: Each instruction pattern contains an incomplete RTL expression, with pieces
582: to be filled in later, operand constraints that restrict how the pieces can
583: be filled in, and an output pattern or C code to generate the assembler
584: output, all wrapped up in a `define_insn' expression.
585:
586: A `define_insn' is an RTL expression containing four operands:
587:
588: 1. An optional name. The presence of a name indicate that this instruction
589: pattern can perform a certain standard job for the RTL-generation pass
590: of the compiler. This pass knows certain names and will use the
591: instruction patterns with those names, if the names are defined in the
592: machine description.
593:
594: The absence of a name is indicated by writing an empty string where
595: the name should go. Nameless instruction patterns are never used for
596: generating RTL code, but they may permit several simpler insns to be
597: combined later on.
598:
599: Names that are not thus known and used in RTL-generation have no
600: effect; they are equivalent to no name at all.
601:
602: 2. The "RTL template" (*Note RTL Template::.) is a vector of incomplete RTL
603: expressions which show what the instruction should look like. It is
604: incomplete because it may contain `match_operand' and `match_dup'
605: expressions that stand for operands of the instruction.
606:
607: If the vector has only one element, that element is what the
608: instruction should look like. If the vector has multiple elements,
609: then the instruction looks like a `parallel' expression containing
610: that many elements as described.
611:
612: 3. A condition. This is a string which contains a C expression that is the
613: final test to decide whether an insn body matches this pattern.
614:
615: For a named pattern, the condition (if present) may not depend on the
616: data in the insn being matched, but only the target-machine-type
617: flags. The compiler needs to test these conditions during
618: initialization in order to learn exactly which named instructions are
619: available in a particular run.
620:
621: For nameless patterns, the condition is applied only when matching an
622: individual insn, and only after the insn has matched the pattern's
623: recognition template. The insn's operands may be found in the vector
624: `operands'.
625:
626: 4. The "output template": a string that says how to output matching insns
627: as assembler code. `%' in this string specifies where to substitute
628: the value of an operand. *note Output Template::.
629:
630: When simple substitution isn't general enough, you can specify a piece
631: of C code to compute the output. *note Output Statement::.
632:
633:
634: File: internals, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc
635:
636: Example of `define_insn'
637: ========================
638:
639: Here is an actual example of an instruction pattern, for the 68000/68020.
640:
641: (define_insn "tstsi"
642: [(set (cc0)
643: (match_operand:SI 0 "general_operand" "rm"))]
644: ""
645: "*
646: { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
647: return \"tstl %0\";
648: return \"cmpl #0,%0\"; }")
649:
650: This is an instruction that sets the condition codes based on the value of
651: a general operand. It has no condition, so any insn whose RTL description
652: has the form shown may be handled according to this pattern. The name
653: `tstsi' means ``test a `SImode' value'' and tells the RTL generation pass
654: that, when it is necessary to test such a value, an insn to do so can be
655: constructed using this pattern.
656:
657: The output control string is a piece of C code which chooses which output
658: template to return based on the kind of operand and the specific type of
659: CPU for which code is being generated.
660:
661: `"rm"' is an operand constraint. Its meaning is explained below.
662:
663:
664: File: internals, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc
665:
666: RTL Template for Generating and Recognizing Insns
667: =================================================
668:
669: The RTL template is used to define which insns match the particular pattern
670: and how to find their operands. For named patterns, the RTL template also
671: says how to construct an insn from specified operands.
672:
673: Construction involves substituting specified operands into a copy of the
674: template. Matching involves determining the values that serve as the
675: operands in the insn being matched. Both of these activities are
676: controlled by special expression types that direct matching and
677: substitution of the operands.
678:
679: `(match_operand:M N TESTFN CONSTRAINT)'
680: This expression is a placeholder for operand number N of the insn.
681: When constructing an insn, operand number N will be substituted at
682: this point. When matching an insn, whatever appears at this position
683: in the insn will be taken as operand number N; but it must satisfy
684: TESTFN or this instruction pattern will not match at all.
685:
686: Operand numbers must be chosen consecutively counting from zero in
687: each instruction pattern. There may be only one `match_operand'
688: expression in the pattern for each expression number, and they must
689: appear in order of increasing expression number.
690:
691: TESTFN is a string that is the name of a C function that accepts two
692: arguments, a machine mode and an expression. During matching, the
693: function will be called with M as the mode argument and the putative
694: operand as the other argument. If it returns zero, this instruction
695: pattern fails to match. TESTFN may be an empty string; then it means
696: no test is to be done on the operand.
697:
698: Most often, TESTFN is `"general_operand"'. It checks that the
699: putative operand is either a constant, a register or a memory
700: reference, and that it is valid for mode M.
701:
702: For an operand that must be a register, TESTFN should be
703: `"register_operand"'. This prevents GNU CC from creating insns that
704: have memory references in these operands, insns which would only have
705: to be taken apart in the reload pass.
706:
707: For an operand that must be a constant, either TESTFN should be
708: `"immediate_operand"', or the instruction pattern's extra condition
709: should check for constants, or both.
710:
711: CONSTRAINT is explained later (*Note Constraints::.).
712:
713: `(match_dup N)'
714: This expression is also a placeholder for operand number N. It is
715: used when the operand needs to appear more than once in the insn.
716:
717: In construction, `match_dup' behaves exactly like `match_operand': the
718: operand is substituted into the insn being constructed. But in
719: matching, `match_dup' behaves differently. It assumes that operand
720: number N has already been determined by a `match_operand' appearing
721: earlier in the recognition template, and it matches only an
722: identical-looking expression.
723:
724: `(address (match_operand:M N "address_operand" ""))'
725: This complex of expressions is a placeholder for an operand number N
726: in a ``load address'' instruction: an operand which specifies a memory
727: location in the usual way, but for which the actual operand value used
728: is the address of the location, not the contents of the location.
729:
730: `address' expressions never appear in RTL code, only in machine
731: descriptions. And they are used only in machine descriptions that do
732: not use the operand constraint feature. When operand constraints are
733: in use, the letter `p' in the constraint serves this purpose.
734:
735: M is the machine mode of the *memory location being addressed*, not
736: the machine mode of the address itself. That mode is always the same
737: on a given target machine (it is `Pmode', which normally is `SImode'),
738: so there is no point in mentioning it; thus, no machine mode is
739: written in the `address' expression. If some day support is added for
740: machines in which addresses of different kinds of objects appear
741: differently or are used differently (such as the PDP-10), different
742: formats would perhaps need different machine modes and these modes
743: might be written in the `address' expression.
744:
745:
746: File: internals, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc
747:
748: Output Templates and Operand Substitution
749: =========================================
750:
751: The "output template" is a string which specifies how to output the
752: assembler code for an instruction pattern. Most of the template is a fixed
753: string which is output literally. The character `%' is used to specify
754: where to substitute an operand; it can also be used to identify places
755: different variants of the assembler require different syntax.
756:
757: In the simplest case, a `%' followed by a digit N says to output operand N
758: at that point in the string.
759:
760: `%' followed by a letter and a digit says to output an operand in an
761: alternate fashion. Four letters have standard, built-in meanings described
762: below. The machine description macro `PRINT_OPERAND' can define additional
763: letters with nonstandard meanings.
764:
765: `%cDIGIT' can be used to substitute an operand that is a constant value
766: without the syntax that normally indicates an immediate operand.
767:
768: `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
769: negated before printing.
770:
771: `%aDIGIT' can be used to substitute an operand as if it were a memory
772: reference, with the actual operand treated as the address. This may be
773: useful when outputting a ``load address'' instruction, because often the
774: assembler syntax for such an instruction requires you to write the operand
775: as if it were a memory reference.
776:
777: `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
778:
779: `%' followed by a punctuation character specifies a substitution that does
780: not use an operand. Only one case is standard: `%%' outputs a `%' into the
781: assembler code. Other nonstandard cases can be defined in the
782: `PRINT_OPERAND' macro.
783:
784: The template may generate multiple assembler instructions. Write the text
785: for the instructions, with `\;' between them.
786:
787: When the RTL contains two operand which are required by constraint to match
788: each other, the output template must refer only to the lower-numbered
789: operand. Matching operands are not always identical, and the rest of the
790: compiler arranges to put the proper RTL expression for printing into the
791: lower-numbered operand.
792:
793: One use of nonstandard letters or punctuation following `%' is to
794: distinguish between different assembler languages for the same machine; for
795: example, Motorola syntax versus MIT syntax for the 68000. Motorola syntax
796: requires periods in most opcode names, while MIT syntax does not. For
797: example, the opcode `movel' in MIT syntax is `move.l' in Motorola syntax.
798: The same file of patterns is used for both kinds of output syntax, but the
799: character sequence `%.' is used in each place where Motorola syntax wants a
800: period. The `PRINT_OPERAND' macro for Motorola syntax defines the sequence
801: to output a period; the macro for MIT syntax defines it to do nothing.
802:
803:
804: File: internals, Node: Output Statement, Next: Constraints, Prev: Output Template, Up: Machine Desc
805:
806: C Statements for Generating Assembler Output
807: ============================================
808:
809: Often a single fixed template string cannot produce correct and efficient
810: assembler code for all the cases that are recognized by a single
811: instruction pattern. For example, the opcodes may depend on the kinds of
812: operands; or some unfortunate combinations of operands may require extra
813: machine instructions.
814:
815: If the output control string starts with a `*', then it is not an output
816: template but rather a piece of C program that should compute a template.
817: It should execute a `return' statement to return the template-string you
818: want. Most such templates use C string literals, which require doublequote
819: characters to delimit them. To include these doublequote characters in the
820: string, prefix each one with `\'.
821:
822: The operands may be found in the array `operands', whose C data type is
823: `rtx []'.
824:
825: It is possible to output an assembler instruction and then go on to output
826: or compute more of them, using the subroutine `output_asm_insn'. This
827: receives two arguments: a template-string and a vector of operands. The
828: vector may be `operands', or it may be another array of `rtx' that you
829: declare locally and initialize yourself.
830:
831: When an insn pattern has multiple alternatives in its constraints, often
832: the appearance of the assembler code determined mostly by which alternative
833: was matched. When this is so, the C code can test the variable
834: `which_alternative', which is the ordinal number of the alternative that
835: was actually satisfied (0 for the first, 1 for the second alternative, etc.).
836:
837: For example, suppose there are two opcodes for storing zero, `clrreg' for
838: registers and `clrmem' for memory locations. Here is how a pattern could
839: use `which_alternative' to choose between them:
840:
841: (define_insn ""
842: [(set (match_operand:SI 0 "general_operand" "r,m")
843: (const_int 0))]
844: ""
845: "*
846: return (which_alternative == 0
847: ? \"clrreg %0\" : \"clrmem %0\");
848: ")
849:
850:
851: File: internals, Node: Constraints, Next: Standard Names, Prev: Output Statement, Up: Machine Desc
852:
853: Operand Constraints
854: ===================
855:
856: Each `match_operand' in an instruction pattern can specify a constraint for
857: the type of operands allowed. Constraints can say whether an operand may
858: be in a register, and which kinds of register; whether the operand can be a
859: memory reference, and which kinds of address; whether the operand may be an
860: immediate constant, and which possible values it may have. Constraints can
861: also require two operands to match.
862:
863: * Menu:
864:
865: * Simple Constraints:: Basic use of constraints.
866: * Multi-Alternative:: When an insn has two alternative constraint-patterns.
867: * Class Preferences:: Constraints guide which hard register to put things in.
868: * Modifiers:: More precise control over effects of constraints.
869: * No Constraints:: Describing a clean machine without constraints.
870:
871:
872:
873: File: internals, Node: Simple Constraints, Next: Multi-Alternative, Prev: Constraints, Up: Constraints
874:
875: Simple Constraints
876: ------------------
877:
878: The simplest kind of constraint is a string full of letters, each of which
879: describes one kind of operand that is permitted. Here are the letters that
880: are allowed:
881:
882: `m'
883: A memory operand is allowed, with any kind of address that the machine
884: supports in general.
885:
886: `o'
887: A memory operand is allowed, but only if the address is "offsetable".
888: This means that adding a small integer (actually, the width in bytes
889: of the operand, as determined by its machine mode) may be added to the
890: address and the result is also a valid memory address.
891:
892: For example, an address which is constant is offsetable; so is an
893: address that is the sum of a register and a constant (as long as a
894: slightly larger constant is also within the range of address-offsets
895: supported by the machine); but an autoincrement or autodecrement
896: address is not offsetable. More complicated indirect/indexed
897: addresses may or may not be offsetable depending on the other
898: addressing modes that the machine supports.
899:
900: Note that in an output operand which can be matched by another
901: operand, the constraint letter `o' is valid only when accompanied by
902: both `<' (if the target machine has predecrement addressing) and `>'
903: (if the target machine has preincrement addressing).
904:
905: `<'
906: A memory operand with autodecrement addressing (either predecrement or
907: postdecrement) is allowed.
908:
909: `>'
910: A memory operand with autoincrement addressing (either preincrement or
911: postincrement) is allowed.
912:
913: `r'
914: A register operand is allowed provided that it is in a general register.
915:
916: `d', `a', `f', ...
917: Other letters can be defined in machine-dependent fashion to stand for
918: particular classes of registers. `d', `a' and `f' are defined on the
919: 68000/68020 to stand for data, address and floating point registers.
920:
921: `i'
922: An immediate integer operand (one with constant value) is allowed.
923: This includes symbolic constants whose values will be known only at
924: assembly time.
925:
926: `n'
927: An immediate integer operand with a known numeric value is allowed.
928: Many systems cannot support assembly-time constants for operands less
929: than a word wide. Constraints for these operands should use `n'
930: rather than `i'.
931:
932: `I', `J', `K', ...
933: Other letters in the range `I' through `M' may be defined in a
934: machine-dependent fashion to permit immediate integer operands with
935: explicit integer values in specified ranges. For example, on the
936: 68000, `I' is defined to stand for the range of values 1 to 8. This
937: is the range permitted as a shift count in the shift instructions.
938:
939: `F'
940: An immediate floating operand (expression code `const_double') is
941: allowed.
942:
943: `G', `H'
944: `G' and `H' may be defined in a machine-dependent fashion to permit
945: immediate floating operands in particular ranges of values.
946:
947: `s'
948: An immediate integer operand whose value is not an explicit integer is
949: allowed.
950:
951: This might appear strange; if an insn allows a constant operand with a
952: value not known at compile time, it certainly must allow any known
953: value. So why use `s' instead of `i'? Sometimes it allows better
954: code to be generated.
955:
956: For example, on the 68000 in a fullword instruction it is possible to
957: use an immediate operand; but if the immediate value is between -32
958: and 31, better code results from loading the value into a register and
959: using the register. This is because the load into the register can be
960: done with a `moveq' instruction. We arrange for this to happen by
961: defining the letter `K' to mean ``any integer outside the range -32 to
962: 31'', and then specifying `Ks' in the operand constraints.
963:
964: `g'
965: Any register, memory or immediate integer operand is allowed, except
966: for registers that are not general registers.
967:
968: `N' (a digit)
969: An operand that matches operand number N is allowed. If a digit is
970: used together with letters, the digit should come last.
971:
972: This is called a "matching constraint" and what it really means is
973: that the assembler has only a single operand that fills two roles
974: considered separate in the RTL insn. For example, an add insn has two
975: input operands and one output operand in the RTL, but on most machines
976: an add instruction really has only two operands, one of them an
977: input-output operand.
978:
979: Matching constraints work only in circumstances like that add insn.
980: More precisely, the matching constraint must appear in an input-only
981: operand and the operand that it matches must be an output-only operand
982: with a lower number.
983:
984: For operands to match in a particular case usually means that they are
985: identical-looking RTL expressions. But in a few special cases
986: specific kinds of dissimilarity are allowed. For example, `*x' as an
987: input operand will match `*x++' as an output operand. For proper
988: results in such cases, the output template should always use the
989: output-operand's number when printing the operand.
990:
991: `p'
992: An operand that is a valid memory address is allowed. This is for
993: ``load address'' and ``push address'' instructions.
994:
995: If `p' is used in the constraint, the test-function in the
996: `match_operand' must be `address_operand'.
997:
998: In order to have valid assembler code, each operand must satisfy its
999: constraint. But a failure to do so does not prevent the pattern from
1000: applying to an insn. Instead, it directs the compiler to modify the code
1001: so that the constraint will be satisfied. Usually this is done by copying
1002: an operand into a register.
1003:
1004: Contrast, therefore, the two instruction patterns that follow:
1005:
1006: (define_insn ""
1007: [(set (match_operand:SI 0 "general_operand" "r")
1008: (plus:SI (match_dup 0)
1009: (match_operand:SI 1 "general_operand" "r")))]
1010: ""
1011: "...")
1012:
1013: which has two operands, one of which must appear in two places, and
1014:
1015: (define_insn ""
1016: [(set (match_operand:SI 0 "general_operand" "r")
1017: (plus:SI (match_operand:SI 1 "general_operand" "0")
1018: (match_operand:SI 2 "general_operand" "r")))]
1019: ""
1020: "...")
1021:
1022: which has three operands, two of which are required by a constraint to be
1023: identical. If we are considering an insn of the form
1024:
1025: (insn N PREV NEXT
1026: (set (reg:SI 3)
1027: (plus:SI (reg:SI 6) (reg:SI 109)))
1028: ...)
1029:
1030: the first pattern would not apply at all, because this insn does not
1031: contain two identical subexpressions in the right place. The pattern would
1032: say, ``That does not look like an add instruction; try other patterns.''
1033: The second pattern would say, ``Yes, that's an add instruction, but there
1034: is something wrong with it.'' It would direct the reload pass of the
1035: compiler to generate additional insns to make the constraint true. The
1036: results might look like this:
1037:
1038: (insn N2 PREV N
1039: (set (reg:SI 3) (reg:SI 6))
1040: ...)
1041:
1042: (insn N N2 NEXT
1043: (set (reg:SI 3)
1044: (plus:SI (reg:SI 3) (reg:SI 109)))
1045: ...)
1046:
1047: Because insns that don't fit the constraints are fixed up by loading
1048: operands into registers, every instruction pattern's constraints must
1049: permit the case where all the operands are in registers. It need not
1050: permit all classes of registers; the compiler knows how to copy registers
1051: into other registers of the proper class in order to make an instruction
1052: valid. But if no registers are permitted, the compiler will be stymied: it
1053: does not know how to save a register in memory in order to make an
1054: instruction valid. Instruction patterns that reject registers can be made
1055: valid by attaching a condition-expression that refuses to match an insn at
1056: all if the crucial operand is a register.
1057:
1058:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.