comparison gcc/expr.h @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 /* Definitions for code generation pass of GNU compiler. 1 /* Definitions for code generation pass of GNU compiler.
2 Copyright (C) 1987-2017 Free Software Foundation, Inc. 2 Copyright (C) 1987-2018 Free Software Foundation, Inc.
3 3
4 This file is part of GCC. 4 This file is part of GCC.
5 5
6 GCC is free software; you can redistribute it and/or modify it under 6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free 7 the terms of the GNU General Public License as published by the Free
98 { 98 {
99 BLOCK_OP_NORMAL, 99 BLOCK_OP_NORMAL,
100 BLOCK_OP_NO_LIBCALL, 100 BLOCK_OP_NO_LIBCALL,
101 BLOCK_OP_CALL_PARM, 101 BLOCK_OP_CALL_PARM,
102 /* Like BLOCK_OP_NORMAL, but the libcall can be tail call optimized. */ 102 /* Like BLOCK_OP_NORMAL, but the libcall can be tail call optimized. */
103 BLOCK_OP_TAILCALL 103 BLOCK_OP_TAILCALL,
104 /* Like BLOCK_OP_NO_LIBCALL, but instead of emitting a libcall return
105 pc_rtx to indicate nothing has been emitted and let the caller handle
106 it. */
107 BLOCK_OP_NO_LIBCALL_RET
104 }; 108 };
105 109
106 typedef rtx (*by_pieces_constfn) (void *, HOST_WIDE_INT, scalar_int_mode); 110 typedef rtx (*by_pieces_constfn) (void *, HOST_WIDE_INT, scalar_int_mode);
107 111
108 extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods); 112 extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods);
126 /* Generate a non-consecutive group of registers represented by a PARALLEL. */ 130 /* Generate a non-consecutive group of registers represented by a PARALLEL. */
127 extern rtx gen_group_rtx (rtx); 131 extern rtx gen_group_rtx (rtx);
128 132
129 /* Load a BLKmode value into non-consecutive registers represented by a 133 /* Load a BLKmode value into non-consecutive registers represented by a
130 PARALLEL. */ 134 PARALLEL. */
131 extern void emit_group_load (rtx, rtx, tree, int); 135 extern void emit_group_load (rtx, rtx, tree, poly_int64);
132 136
133 /* Similarly, but load into new temporaries. */ 137 /* Similarly, but load into new temporaries. */
134 extern rtx emit_group_load_into_temps (rtx, rtx, tree, int); 138 extern rtx emit_group_load_into_temps (rtx, rtx, tree, poly_int64);
135 139
136 /* Move a non-consecutive group of registers represented by a PARALLEL into 140 /* Move a non-consecutive group of registers represented by a PARALLEL into
137 a non-consecutive group of registers represented by a PARALLEL. */ 141 a non-consecutive group of registers represented by a PARALLEL. */
138 extern void emit_group_move (rtx, rtx); 142 extern void emit_group_move (rtx, rtx);
139 143
140 /* Move a group of registers represented by a PARALLEL into pseudos. */ 144 /* Move a group of registers represented by a PARALLEL into pseudos. */
141 extern rtx emit_group_move_into_temps (rtx); 145 extern rtx emit_group_move_into_temps (rtx);
142 146
143 /* Store a BLKmode value from non-consecutive registers represented by a 147 /* Store a BLKmode value from non-consecutive registers represented by a
144 PARALLEL. */ 148 PARALLEL. */
145 extern void emit_group_store (rtx, rtx, tree, int); 149 extern void emit_group_store (rtx, rtx, tree, poly_int64);
146 150
147 extern rtx maybe_emit_group_store (rtx, tree); 151 extern rtx maybe_emit_group_store (rtx, tree);
148 152
149 /* Mark REG as holding a parameter for the next CALL_INSN. 153 /* Mark REG as holding a parameter for the next CALL_INSN.
150 Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode. */ 154 Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode. */
231 extern rtx read_complex_part (rtx, bool); 235 extern rtx read_complex_part (rtx, bool);
232 extern rtx emit_move_resolve_push (machine_mode, rtx); 236 extern rtx emit_move_resolve_push (machine_mode, rtx);
233 237
234 /* Push a block of length SIZE (perhaps variable) 238 /* Push a block of length SIZE (perhaps variable)
235 and return an rtx to address the beginning of the block. */ 239 and return an rtx to address the beginning of the block. */
236 extern rtx push_block (rtx, int, int); 240 extern rtx push_block (rtx, poly_int64, int);
237 241
238 /* Generate code to push something onto the stack, given its mode and type. */ 242 /* Generate code to push something onto the stack, given its mode and type. */
239 extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int, 243 extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int,
240 int, rtx, int, rtx, rtx, int, rtx, bool); 244 int, rtx, poly_int64, rtx, rtx, int, rtx, bool);
241 245
242 /* Extract the accessible bit-range from a COMPONENT_REF. */ 246 /* Extract the accessible bit-range from a COMPONENT_REF. */
243 extern void get_bit_range (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, 247 extern void get_bit_range (poly_uint64_pod *, poly_uint64_pod *, tree,
244 tree, HOST_WIDE_INT *, tree *); 248 poly_int64_pod *, tree *);
245 249
246 /* Expand an assignment that stores the value of FROM into TO. */ 250 /* Expand an assignment that stores the value of FROM into TO. */
247 extern void expand_assignment (tree, tree, bool); 251 extern void expand_assignment (tree, tree, bool);
248 252
249 /* Generate code for computing expression EXP, 253 /* Generate code for computing expression EXP,
250 and storing the value into TARGET. 254 and storing the value into TARGET.
251 If SUGGEST_REG is nonzero, copy the value through a register 255 If SUGGEST_REG is nonzero, copy the value through a register
252 and return that register, if that is possible. */ 256 and return that register, if that is possible. */
253 extern rtx store_expr_with_bounds (tree, rtx, int, bool, bool, tree);
254 extern rtx store_expr (tree, rtx, int, bool, bool); 257 extern rtx store_expr (tree, rtx, int, bool, bool);
255 258
256 /* Given an rtx that may include add and multiply operations, 259 /* Given an rtx that may include add and multiply operations,
257 generate them as insns and return a pseudo-reg containing the value. 260 generate them as insns and return a pseudo-reg containing the value.
258 Useful after calling expand_expr with 1 as sum_ok. */ 261 Useful after calling expand_expr with 1 as sum_ok. */
283 } 286 }
284 287
285 288
286 /* Return the tree node and offset if a given argument corresponds to 289 /* Return the tree node and offset if a given argument corresponds to
287 a string constant. */ 290 a string constant. */
288 extern tree string_constant (tree, tree *); 291 extern tree string_constant (tree, tree *, tree *, tree *);
292
293 extern enum tree_code maybe_optimize_mod_cmp (enum tree_code, tree *, tree *);
289 294
290 /* Two different ways of generating switch statements. */ 295 /* Two different ways of generating switch statements. */
291 extern int try_casesi (tree, tree, tree, tree, rtx, rtx, rtx, profile_probability); 296 extern int try_casesi (tree, tree, tree, tree, rtx, rtx, rtx, profile_probability);
292 extern int try_tablejump (tree, tree, tree, tree, rtx, rtx, profile_probability); 297 extern int try_tablejump (tree, tree, tree, tree, rtx, rtx, profile_probability);
293 298