int SuitableAlignmentVisitor::visit( const Nodecl::Symbol& n ) { if (is_suitable_expression(n)) { return 0; } else if( n.is_constant( ) ) { int value = const_value_cast_to_signed_int( n.get_constant( )) * _type_size; if(is_suitable_constant(value)) return 0; else return value; } else if( Utils::induction_variable_list_contains_variable( _induction_variables, n ) ) { Utils::InductionVariableData* iv = Utils::get_induction_variable_from_list( _induction_variables, n ); Nodecl::Utils::ReduceExpressionVisitor v; Nodecl::NodeclBase lb = iv->get_lb( ).shallow_copy( ); v.walk( lb ); if( lb.is_constant( ) ) { Nodecl::NodeclBase incr = iv->get_increment( ).shallow_copy( ); v.walk( incr ); if( incr.is_constant( ) ) { return (const_value_cast_to_signed_int( lb.get_constant( ) ) + ( const_value_cast_to_signed_int( incr.get_constant( ) ) * _unroll_factor)) * _type_size; } } } return -1; }