GCC Middle and Back End API Reference
|
Go to the source code of this file.
Functions | |
rtx | addr_for_mem_ref (struct mem_address *, addr_space_t, bool) |
rtx | addr_for_mem_ref (tree exp, addr_space_t as, bool really_expand) |
void | get_address_description (tree, struct mem_address *) |
tree | tree_mem_ref_addr (tree, tree) |
tree | create_mem_ref (gimple_stmt_iterator *, tree, struct affine_tree_combination *, tree, tree, tree, bool) |
void | copy_ref_info (tree, tree) |
tree | maybe_fold_tmr (tree) |
rtx addr_for_mem_ref | ( | struct mem_address * | addr, |
addr_space_t | as, | ||
bool | really_expand | ||
) |
Header file for memory address lowering and mode selection. Copyright (C) 2013 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/.
Returns address for TARGET_MEM_REF with parameters given by ADDR in address space AS. If REALLY_EXPAND is false, just make fake registers instead of really expanding the operands, and perform the expansion in-place by using one of the "templates".
Reuse the templates for addresses, so that we do not waste memory.
Otherwise really expand the expressions.
rtx addr_for_mem_ref | ( | tree | exp, |
addr_space_t | as, | ||
bool | really_expand | ||
) |
tree create_mem_ref | ( | gimple_stmt_iterator * | gsi, |
tree | type, | ||
aff_tree * | addr, | ||
tree | alias_ptr_type, | ||
tree | iv_cand, | ||
tree | base_hint, | ||
bool | speed | ||
) |
Creates and returns a TARGET_MEM_REF for address ADDR. If necessary computations are emitted in front of GSI. TYPE is the mode of created memory reference. IV_CAND is the selected iv candidate in ADDR, and BASE_HINT is non NULL if IV_CAND comes from a base address object.
The expression is too complicated. Try making it simpler.
Move the multiplication to index.
Add the symbol to base, eventually forcing it to register.
Add index to base.
Try adding offset to base.
Verify that the address is in the simplest possible shape (only a register). If we cannot create such a memory reference, something is really wrong.
References mem_address::base, fold_build_pointer_plus, force_gimple_operand_gsi_1(), gcc_assert, GSI_SAME_STMT, mem_address::index, is_gimple_mem_ref_addr(), NULL_TREE, sizetype, TREE_TYPE, and useless_type_conversion_p().
void get_address_description | ( | tree | , |
struct mem_address * | |||
) |