PIPS
|
transfer statement to isolate memory More...
#include <ctype.h>
#include "genC.h"
#include "linear.h"
#include "ri.h"
#include "effects.h"
#include "misc.h"
#include "properties.h"
#include "ri-util.h"
#include "workspace-util.h"
#include "effects-util.h"
#include "pipsdbm.h"
#include "preprocessor.h"
#include "conversion.h"
#include "control.h"
#include "effects-generic.h"
#include "effects-simple.h"
#include "effects-convex.h"
#include "semantics.h"
#include "callgraph.h"
#include "accel-util.h"
Go to the source code of this file.
Data Structures | |
struct | dma_pair |
isolate_statement More... | |
struct | param_t |
struct | isolate_param |
Functions | |
static size_t | get_dma_dimension (region reg_from) |
static const char * | get_dma_name (enum region_to_dma_switch m, size_t d) |
converts a region_to_dma_switch to corresponding dma name according to properties More... | |
static bool | declarations_to_dimensions (entity e, list *dimensions, list *offsets) |
void | region_to_dimensions (effect reg, transformer tr, list *dimensions, list *offsets, expression *condition) |
isolate_statement.c More... | |
static expression | region_to_address (region reg) |
static expression | get_sizeofexpression_for_region (region reg) |
generate an expression of the form sizeof(typeof(variable[indices])) More... | |
list | variable_to_dimensions (region reg_from) |
call | dimensions_to_dma (effect reg_from, entity to, list ld, list lo, enum region_to_dma_switch m) |
converts dimensions to a dma call from a memory from to another memory to More... | |
static region | extended_regions_must_convex_hull (region r0, region r1) |
perform the convex hull between r0 and r1, and merge them if they have a common prefix e.g. More... | |
static statement | effects_to_dma (statement stat, enum region_to_dma_switch s, hash_table e2e, expression *condition, bool fine_grain_analysis, const char *prefix, const char *suffix) |
Compute a call to a DMA function from the effects of a statement. More... | |
static bool | do_check_isolate_statement_preconditions_on_call (call c, param_t *p) |
static bool | do_isolate_statement_preconditions_satisified_p (statement s) |
void | do_isolate_statement (statement s, const char *prefix, const char *suffix) |
perform statement isolation on statement s that is make sure that all access to variables in s are made either on private variables or on new entities declared on a new memory space. More... | |
static void | isolate_patch_reference (reference r, isolate_param *p) |
replace reference r on entity p->old by a reference on entity p->new with offsets p->offsets More... | |
static void | isolate_patch_statement (statement s, isolate_param *p) |
run isolate_patch_entities on all declared entities from s More... | |
void | isolate_patch_entities (void *where, entity old, entity new, list offsets) |
replace all references on entity old by references on entity new and adds offset offsets to its indices More... | |
static void | bounds_of_expression (expression e, transformer tr, bool is_upper) |
replaces expression e by its upper or lower bound under preconditions tr is_upper is used to choose among lower and upperbound More... | |
static void | upperbound_of_expression (expression e, transformer tr) |
replaces expression e by its upperbound under preconditions tr More... | |
static void | lowerbound_of_expression (expression e, transformer tr) |
replaces expression e by its lowerbound under preconditions tr More... | |
bool | region_to_minimal_dimensions (region r, transformer tr, list *dims, list *offsets, bool exact, expression *condition) |
generate a list of dimensions dims and of offsets from a region r for example if r = a[phi0,phi1] 0<=phi0<=2 and 1<=phi1<=4 we get dims = ( (0,3), (0,4) ) and offsets = ( 0 , 1 ) if exact is set to false, we are allowed to give an upper bound to the dimensions More... | |
region | find_region_on_entity (entity e, list regions) |
range | dimension_to_range (dimension d) |
bool | isolate_statement (const char *module_name) |
Variables | |
static const int | dma1D = 1 |
Some constant intended to have a more readable code. More... | |
|
static |
replaces expression e
by its upper or lower bound under preconditions tr
is_upper
is used to choose among lower and upperbound
Definition at line 1160 of file isolate_statement.c.
References _intFMT, expression_normalized, expression_syntax, fprintf(), free_expression(), free_normalized(), free_syntax(), int_to_expression(), intptr_t, normalized_undefined, precondition_minmax_of_expression(), syntax_undefined, VALUE_MAX, and VALUE_MIN.
Referenced by lowerbound_of_expression(), and upperbound_of_expression().
Definition at line 175 of file isolate_statement.c.
References CONS, copy_dimension(), DIMENSION, dimension_lower, entity_array_p(), entity_type, EXPRESSION, expression_integer_value(), FOREACH, intptr_t, offset, pips_assert, pips_internal_error, type_variable, ultimate_type(), and variable_dimensions.
Referenced by region_to_dimensions().
d
Definition at line 1336 of file isolate_statement.c.
References copy_expression(), dimension_lower, dimension_upper, int_to_expression(), and make_range().
Referenced by do_group_constants_terapix().
call dimensions_to_dma | ( | effect | reg_from, |
entity | to, | ||
list | ld, | ||
list | lo, | ||
enum region_to_dma_switch | m | ||
) |
converts dimensions to a dma call from a memory from to another memory to
from | expression giving the adress of the input memory |
to | expression giving the adress of the output memory |
ld | list of dimensions to analyze |
m | kind of call to generate |
Scalar detection:
Need the address for the allocator to modify the pointer itself:
Generate a "void **" type:
dest = "(void **) &to"
Except for the deallocation or if we have a scalar and then we have already created a pointer to it, the original array is referenced through pointer dereferencing:
sizeof(element)*number elements of the array:
Generate communication functions:
Build the sizes of the array block to transfer:
f expressions
Build the sizes of the array with element to transfer:
of expressions
Build the offsets of the array block to transfer:
of expressions
Use a special transfert function for scalars instead of reusing the 1D function. It may useful for example if it is implemented as a FIFO at the hardware level:
Generate host and accel adresses:
Output parameters in an order compatible with some C99 implementation of the runtime: size and block size first, so that some arguments can be defined with them:
Insert offset:
Insert the block size to transfert:
Insert the array sizes:
Insert the element size expression:
reg_from | eg_from |
to | o |
ld | f dimensions |
lo | f offsets |
Definition at line 379 of file isolate_statement.c.
References AddEntityToModule(), AddEntityToModuleCompilationUnit(), ADDRESS_OF_OPERATOR_NAME, CONS, copy_language(), DEREFERENCING_OPERATOR_NAME, DIMENSION, dma_allocate, dma_allocate_p, dma_deallocate, dma_deallocate_p, dma_load, dma_store, entity_intrinsic(), entity_scalar_p(), entity_to_expression(), entity_undefined_p, EXPRESSION, FOREACH, fortran_module_p(), gen_append(), gen_full_free_list(), gen_nreverse(), get_current_module_entity(), get_dma_dimension(), get_dma_name(), get_sizeofexpression_for_region(), make_basic_pointer(), make_call(), make_cast(), make_empty_subroutine(), make_expression(), make_expression_list, make_syntax_cast(), make_type_variable(), make_type_void(), make_variable(), MakeBinaryCall(), MakeUnaryCall(), module_language, module_name_to_entity(), MULTIPLY_OPERATOR_NAME, NIL, normalized_undefined, pips_internal_error, pips_user_warning, reference_variable, region_any_reference, region_to_address(), SizeOfDimension(), SizeOfDimensions(), and variable_to_dimensions().
Referenced by effects_to_dma().
get parent statement
get associated regions
verify the conditions : no complex offset handling
we are left with a scalar or an unidimensional array
we can do it! leave it for later
The following test could be refined, but it is OK right now if we can override it with the following property when generating code for GPU for example.
Should not return from previous exception anyway...
Definition at line 841 of file isolate_statement.c.
References call_function, param_t::callee_module_name, CAR, CONS, constraints_for_bounds(), constraints_to_loop_bound(), contrainte_rm, CONTRAINTE_UNDEFINED_P, db_get_memory_resource(), DIVIDE_OPERATOR_NAME, effects_to_list(), ENDP, ENTITY, entity_intrinsic(), entity_local_name(), entity_local_variable_p(), entity_type, entity_user_name(), EXPRESSION, expression_to_entity(), FOREACH, formal_parameter_p(), free_expression(), gen_get_ancestor(), gen_length(), gen_recurse_stop(), get_bool_property(), get_current_module_entity(), indices, io_effect_p(), load_cumulated_rw_effects_list(), NORMALIZE_EXPRESSION, normalized_linear_p, param_t::ok, pips_assert, pips_user_error, pips_user_warning, pointer_type_p(), ref, reference_indices, reference_variable, REGION, region_any_reference, region_system, param_t::regions_to_extend, same_string_p, sc_dup(), sc_rm(), sc_transform_eg_in_ineg(), statement_domain, statement_undefined_p, std_file_effect_p(), summary_regions(), type_pointer_on_struct_variable_p(), type_variable, ultimate_type(), and variable_dimensions.
Referenced by do_isolate_statement_preconditions_satisified_p().
void do_isolate_statement | ( | statement | s, |
const char * | prefix, | ||
const char * | suffix | ||
) |
perform statement isolation on statement s
that is make sure that all access to variables in s
are made either on private variables or on new entities declared on a new memory space.
The prefix
is used as a prefix to new entities' name.
this hash table holds an entity to (entity + tag ) binding
Add the calls now if needed, in the correct order:
guard the whole block by according conditions
prends ton couteau suisse et viens jouer avec moi dans pips
prefix | refix |
suffix | uffix |
Definition at line 1018 of file isolate_statement.c.
References CAR, CDR, CONS, declaration_statement_p(), dma_allocate, dma_deallocate, dma_load, dma_store, do_isolate_statement_preconditions_satisified_p(), effects_to_dma(), ENDP, expression_undefined, expression_undefined_p, free(), HASH_DEFAULT_SIZE, HASH_MAP, hash_pointer, hash_table_free(), hash_table_make(), insert_statement(), instruction_to_statement(), make_block_statement(), make_empty_statement, make_instruction_test(), make_test(), NIL, pips_assert, pips_user_warning, POP, prefix, STATEMENT, statement_block(), statement_block_p, and statement_undefined.
Referenced by isolate_statement(), and kernel_load_store_generator().
we have to make sure every callee access no global variables and that the associated regions has no offset
add a constraint 0 <= phi1 and the upperbound constraint
duplicate the region
add it to current region
prune out read effects on pointers ... the assumption is that reading a pointer is not that important and most certainly comes from passing a pointer as parameter to a function if the pointer itself is not written, it should be ok. Well this indeed very optimistic ...
Definition at line 925 of file isolate_statement.c.
References call_domain, param_t::callee_module_name, callees_callees, CAR, compute_callees(), constraints_for_bounds(), constraints_to_loop_bound(), CONTRAINTE_UNDEFINED_P, copy_action(), copy_reference(), DIVIDE_OPERATOR_NAME, do_check_isolate_statement_preconditions_on_call(), ENDP, ENTITY, entity_intrinsic(), entity_pointer_p(), EXPRESSION, expression_integer_value(), expression_to_entity(), extended_regions_must_convex_hull(), FOREACH, free_callees(), free_expression(), gen_context_recurse, gen_copy_seq(), gen_free_list(), gen_null2(), gen_remove_once(), indices, int_to_expression(), intptr_t, load_cumulated_rw_effects_list(), make_approximation_exact(), make_approximation_may(), make_region, NIL, NORMALIZE_EXPRESSION, normalized_linear_p, param_t::ok, pips_internal_error, POP, ref, REFCAR, reference_indices, reference_variable, region, REGION, region_action, region_any_reference, region_read_p, region_system, param_t::regions_to_extend, same_entity_p(), sc_add_phi_equation(), sc_dup(), sc_new(), sc_transform_eg_in_ineg(), STRING, and update_cumulated_rw_effects_list().
Referenced by do_isolate_statement().
|
static |
Compute a call to a DMA function from the effects of a statement.
[in] | stat | is the statement we want to generate communication operations for |
[in] | prefix | is the prefix to be used for added variable. operations for |
If this cannot be done, it throws a pips_user_error
if no dma is provided, skip the computation it is used for scalope at least
work on a copy because we compute the rectangular hull in place and keep only store effects: we do not care for environment effects here (BC)
free the spine, as effects are shared with the database
ensure we only have a rectangular region as a side effect, strided accesses are handled by region_rectangular_hull
merge copy in and copy out for allocation this is entity-based, we could do a better job if we were reference-based
merge regions with same prefix but different suffixes (in presence of fields ...)
SG: to do: merge convex hulls when they refer to all fields of a region to do this, according to BC, I should iterate over all regions, detect fields and then iterate again over regions to find combinable regions that way I would not generate needless read effects when all fields are accessed using the same pattern
some more dev I am not willing to do right now :)
filter out relevant effects depending on operation mode
if we failed to provide a fine_grain_analysis, we can still rely on the definition region to over approximate the result
handle the may approximations here: if the approximation is may, we have to load the data, otherwise the store may store irrelevant data
first step is to check for may-write effects
then we will merge these effects with those that were already gathered because we are manipulating lists, it is not very efficient but there should not be that many effects anyway
no data was copy-in, add this effect
builds out transfer from gathered effects
f dimensions
f expressions
initialized with NULL value
Replace the reference to the array re to *eto:
o avoid duplicate
Definition at line 580 of file isolate_statement.c.
References action_read_p, action_tag, action_write_p, AddLocalEntityToDeclarations(), approximation_may_p, basic_pointer, basic_pointer_p, basic_undefined, concatenate(), CONS, copy_action(), copy_basic(), copy_effect(), descriptor_convex, descriptor_convex_p, dimensions_to_dma(), dma1D, dma_allocate_p, dma_deallocate_p, dma_load_p, dma_store_p, EFFECT, effect_action, effect_any_entity, effect_any_reference, effect_approximation, effect_approximation_tag, effect_descriptor, effects_store_effects(), empty_string_p(), ENDP, entity_abstract_location_p(), entity_declaration_sc(), entity_pointer_p(), entity_scalar_p(), entity_type, entity_user_name(), extended_regions_must_convex_hull(), FOREACH, free(), gen_free_list(), gen_full_copy_list(), gen_full_free_list(), gen_nreverse(), get_bool_property(), get_current_module_entity(), get_dma_name(), hash_get(), hash_put(), HASH_UNDEFINED_VALUE, init, instruction_to_statement(), int_to_expression(), io_effect_p(), is_action_read, is_approximation_may, isolate_patch_entities(), load_cumulated_rw_effects_list(), load_statement_precondition(), make_block_statement(), make_instruction_call(), make_new_array_variable(), make_temporary_pointer_to_array_entity_with_prefix(), malloc(), dma_pair::new_ent, NIL, out, pips_assert, pips_user_error, pointed_type(), POP, predicate_system, prefix, print_effect, REFCAR, reference_variable, region, region_action, region_any_reference, region_rectangular_hull(), region_to_dimensions(), region_write_p, dma_pair::s, same_entity_p(), sc_equal_p, sc_free(), sc_intersection(), sc_new(), sc_normalize2(), set_add_element(), set_belong_p(), set_free(), set_make(), set_pointer, STATEMENT, statement_undefined, std_file_effect_p(), strdup(), transformer_range(), transformer_relation, type_variable, type_variable_p, ultimate_array_type(), and variable_basic.
Referenced by do_isolate_statement().
perform the convex hull between r0 and r1, and merge them if they have a common prefix e.g.
a[phi1].re[phi2] U_ex a[phi3].im[phi4] = a[phi1] U_may a[phi3]
Definition at line 530 of file isolate_statement.c.
References CAR, CONS, ENDP, entity_field_p(), EXPRESSION, expression_reference(), expression_reference_p(), gen_free_list(), gen_nreverse(), is_approximation_may, NIL, out, POP, reference_indices, reference_variable, region, region_any_reference, region_approximation_tag, and regions_must_convex_hull().
Referenced by do_isolate_statement_preconditions_satisified_p(), and effects_to_dma().
regions
on entity e
regions | egions |
Definition at line 1325 of file isolate_statement.c.
References FOREACH, reference_variable, REGION, region_any_reference, region_undefined, and same_entity_p().
Referenced by do_solve_hardware_constraints_on_nb_proc(), and do_solve_hardware_constraints_on_volume().
It should be the number of variable phis and stop at first field
Definition at line 79 of file isolate_statement.c.
References entity_field_p(), exp, EXPRESSION, expression_reference(), expression_reference_p(), FOREACH, pips_assert, ref, reference_indices, reference_variable, region_any_reference, and variable_phi_p.
Referenced by dimensions_to_dma().
|
static |
converts a region_to_dma_switch to corresponding dma name according to properties
If the DMA is not scalar, the DMA function name is in the property of the form KERNEL_LOAD_STORE_LOAD/STORE_FUNCTION_dD:
not scalar
Definition at line 102 of file isolate_statement.c.
References asprintf, free(), get_string_property(), and int.
Referenced by dimensions_to_dma(), and effects_to_dma().
|
static |
generate an expression of the form sizeof(typeof(variable[indices]))
It also handles the fields: fields reference are converted to proper expression then an approximation is made to ensure there is no stride e.g struct { int x,y; } a [10]; a[1][x] -> sizeof(a[1]) struct { int x[10], y[10] } a; a[x][1] -> sizeof(a.x)
extract the constant indices of the region
Here we make a special case for struct because of nvcc/C++ doesn't like construct like : sizeof(struct {data_t latitude; data_t longitude; data_t stock;}) so we produce a sizeof(var); instead
Definition at line 280 of file isolate_statement.c.
References basic_of_reference(), CONS, entity_field_p(), exp, EXPRESSION, expression_reference(), expression_reference_p(), FOREACH, free_type(), gen_nreverse(), int_to_expression(), make_reference(), make_type_variable(), make_variable(), MakeSizeofExpression(), MakeSizeofType(), NIL, pips_assert, pips_internal_error, ref, reference_indices, reference_variable, region_any_reference, region_reference_to_expression(), type_struct_variable_p(), and variable_phi_p.
Referenced by dimensions_to_dma().
replace all references on entity old
by references on entity new
and adds offset offsets
to its indices
where | here |
old | ld |
new | ew |
offsets | ffsets |
Definition at line 1148 of file isolate_statement.c.
References gen_context_multi_recurse(), gen_true(), isolate_patch_reference(), isolate_patch_statement(), reference_domain, and statement_domain.
Referenced by effects_to_dma(), and isolate_patch_statement().
|
static |
replace reference r
on entity p->old
by a reference on entity p->new
with offsets p->offsets
build up the replacement
it is illegal to create a subscript without indices quoting RK, at the airport back from SC 2010
Definition at line 1084 of file isolate_statement.c.
References CAR, CONS, copy_expression(), DEREFERENCING_OPERATOR_NAME, ENDP, entity_field_p(), entity_intrinsic(), entity_to_expression(), EXPRESSION, expression_domain, expression_reference(), expression_reference_p(), expression_syntax, FOREACH, gen_get_ancestor(), indices, make_call(), make_expression_list, make_subscript(), make_syntax_call(), make_syntax_subscript(), MINUS_OPERATOR_NAME, isolate_param::new, NIL, offset, isolate_param::offsets, isolate_param::old, POP, reference_indices, reference_variable, same_entity_p(), syntax_to_expression(), syntax_undefined, and update_expression_syntax().
Referenced by isolate_patch_entities().
|
static |
run isolate_patch_entities on all declared entities from s
Definition at line 1136 of file isolate_statement.c.
References ENTITY, entity_initial, FOREACH, isolate_patch_entities(), isolate_param::new, isolate_param::offsets, isolate_param::old, statement_declarations, and value_undefined_p.
Referenced by isolate_patch_entities().
bool isolate_statement | ( | const char * | module_name | ) |
new
from old
, knowing the dimension of the isolated entity dimensions
and its offsets offsets
and the direction of the transfer t
init stuff
get user input
and proceed
validate
module_name | odule_name |
Definition at line 1349 of file isolate_statement.c.
References compute_callees(), db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, do_isolate_statement(), empty_string_p(), find_statement_from_label_name(), free_value_mappings(), get_current_module_entity(), get_current_module_name(), get_current_module_statement(), get_string_property(), module_name(), module_name_to_entity(), module_reorder(), module_to_value_mappings(), pips_debug, pips_user_error, prefix, reset_cumulated_rw_effects(), reset_current_module_entity(), reset_current_module_statement(), reset_precondition_map(), reset_proper_rw_effects(), set_cumulated_rw_effects(), set_current_module_entity(), set_current_module_statement(), set_precondition_map(), set_proper_rw_effects(), and statement_undefined_p.
|
static |
replaces expression e
by its lowerbound under preconditions tr
Definition at line 1188 of file isolate_statement.c.
References bounds_of_expression().
Referenced by region_to_minimal_dimensions().
|
static |
Definition at line 225 of file isolate_statement.c.
References ADDRESS_OF_OPERATOR_NAME, C_LOC_FUNCTION_NAME, copy_expression(), entity_intrinsic(), entity_to_expression(), exp, EXPRESSION, expression_reference(), expression_reference_p(), FIELD_OPERATOR_NAME, FOREACH, fortran_module_p(), gen_nconc(), get_current_module_entity(), int_to_expression(), make_expression(), make_expression_list, make_subscript(), make_syntax_subscript(), MakeBinaryCall(), MakeUnaryCall(), normalized_undefined, pips_assert, reference_indices, reference_variable, region_any_reference, and variable_phi_p.
Referenced by dimensions_to_dma().
void region_to_dimensions | ( | effect | reg, |
transformer | tr, | ||
list * | dimensions, | ||
list * | offsets, | ||
expression * | condition | ||
) |
reg | eg |
tr | r |
dimensions | imensions |
offsets | ffsets |
condition | ondition |
Definition at line 204 of file isolate_statement.c.
References declarations_to_dimensions(), effect_region_p, pips_assert, pips_internal_error, pips_user_warning, reference_variable, region_any_reference, and region_to_minimal_dimensions().
Referenced by effects_to_dma().
bool region_to_minimal_dimensions | ( | region | r, |
transformer | tr, | ||
list * | dims, | ||
list * | offsets, | ||
bool | exact, | ||
expression * | condition | ||
) |
generate a list of dimensions dims
and of offsets from
a region r
for example if r = a[phi0,phi1] 0<=phi0<=2 and 1<=phi1<=4 we get dims = ( (0,3), (0,4) ) and offsets = ( 0 , 1 ) if exact
is set to false, we are allowed to give an upper bound to the dimensions
if at least one of the resulting dimension can be 0 (according to preconditions) dimension_may_be_null
is set to true
this is a constant : the dimension is 1 and the offset is the bound
this is a range : the dimension is eupper-elower +1 and the offset is elower
sg : check if lower bound can be 0, in that case issue a ward
reset state
index is a field ...
and the last field, store it as an extra dimension
Definition at line 1207 of file isolate_statement.c.
References add_integer_to_expression(), AND_OPERATOR_NAME, bounds_equal_p(), CAR, CONS, constraints_for_bounds(), constraints_to_loop_bound(), CONTRAINTE_UNDEFINED_P, copy_expression(), DIMENSION, DIVIDE_OPERATOR_NAME, ENDP, entity_intrinsic(), EXPRESSION, expression_integer_value(), expression_minmax_p(), expression_to_entity(), expression_undefined_p, fortran_module_p(), gen_full_free_list(), gen_nreverse(), get_current_module_entity(), GREATER_THAN_OPERATOR_NAME, int_to_expression(), intptr_t, lowerbound_of_expression(), make_dimension(), make_op_exp(), MakeBinaryCall(), MINUS_OPERATOR_NAME, NIL, offset, pips_assert, pips_user_warning, POP, ref, reference_indices, region_any_reference, region_system, sc_dup(), sc_free(), sc_transform_eg_in_ineg(), simplify_minmax_expression(), upperbound_of_expression(), and variable_phi_p.
Referenced by region_to_dimensions().
|
static |
replaces expression e
by its upperbound under preconditions tr
Definition at line 1182 of file isolate_statement.c.
References bounds_of_expression().
Referenced by region_to_minimal_dimensions().
We may skip the size of the first dimension since it is not used in address calculation. But since it depends of Fortran or C in the runtime, postpone this micro-optimization...
we are in trouble, as we don't know anything about the size of the underlying array. It is the fist dimension, so not very important anyway ... except for FORTRAN :-( But there are no pointer in FORTRAN :p
Definition at line 319 of file isolate_statement.c.
References basic_pointer, basic_pointer_p, c_module_p(), CAR, CONS, constraints_for_bounds(), constraints_to_loop_bound(), CONTRAINTE_UNDEFINED_P, copy_dimension(), DIMENSION, DIVIDE_OPERATOR_NAME, ENDP, entity_field_p(), entity_intrinsic(), entity_type, exp, EXPRESSION, expression_reference(), expression_reference_p(), expression_undefined, FOREACH, gen_nreverse(), get_current_module_entity(), int_to_expression(), make_dimension(), NIL, out, pips_assert, pips_internal_error, POP, reference_indices, reference_variable, region_any_reference, region_system, sc_dup(), sc_transform_eg_in_ineg(), type_variable, ultimate_type(), variable_basic, variable_dimensions, and variable_phi_p.
Referenced by dimensions_to_dma().
|
static |
Some constant intended to have a more readable code.
Definition at line 77 of file isolate_statement.c.
Referenced by effects_to_dma().