Clan
0.8.0
|
00001 00002 /*+------- <| --------------------------------------------------------** 00003 ** A Clan ** 00004 **--- /.\ -----------------------------------------------------** 00005 ** <| [""M# vector.c ** 00006 **- A | # -----------------------------------------------------** 00007 ** /.\ [""M# First version: 01/05/2008 ** 00008 **- [""M# | # U"U#U -----------------------------------------------** 00009 | # | # \ .:/ 00010 | # | #___| # 00011 ****** | "--' .-" ****************************************************** 00012 * |"-"-"-"-"-#-#-## Clan : the Chunky Loop Analyzer (experimental) * 00013 **** | # ## ###### ***************************************************** 00014 * \ .::::'/ * 00015 * \ ::::'/ Copyright (C) 2008 University Paris-Sud 11 * 00016 * :8a| # # ## * 00017 * ::88a ### This is free software; you can redistribute it * 00018 * ::::888a 8a ##::. and/or modify it under the terms of the GNU Lesser * 00019 * ::::::::888a88a[]::: General Public License as published by the Free * 00020 *::8:::::::::SUNDOGa8a::. Software Foundation, either version 2.1 of the * 00021 *::::::::8::::888:Y8888:: License, or (at your option) any later version. * 00022 *::::':::88::::888::Y88a::::::::::::... * 00023 *::'::.. . ..... .. ... . * 00024 * This software is distributed in the hope that it will be useful, but * 00025 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * 00026 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * 00027 * for more details. * 00028 * * 00029 * You should have received a copy of the GNU Lesser General Public License * 00030 * along with software; if not, write to the Free Software Foundation, Inc., * 00031 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * 00032 * * 00033 * Clan, the Chunky Loop Analyzer * 00034 * Written by Cedric Bastoul, Cedric.Bastoul@u-psud.fr * 00035 * * 00036 ******************************************************************************/ 00037 00038 00039 #include <stdlib.h> 00040 #include <stdio.h> 00041 #include <ctype.h> 00042 00043 #include <osl/int.h> 00044 #include <osl/vector.h> 00045 #include <clan/macros.h> 00046 #include <clan/symbol.h> 00047 #include <clan/vector.h> 00048 00049 00050 /*+**************************************************************************** 00051 * Processing functions * 00052 ******************************************************************************/ 00053 00054 00067 osl_vector_p clan_vector_term(clan_symbol_p symbol, int coefficient, 00068 char* identifier, int precision) { 00069 int rank, size; 00070 osl_vector_p vector; 00071 00072 size = CLAN_MAX_DEPTH + CLAN_MAX_LOCAL_DIMS + CLAN_MAX_PARAMETERS + 2 ; 00073 vector = osl_vector_pmalloc(precision, size); 00074 00075 if (identifier == NULL) { 00076 // The term is a constant. 00077 osl_int_set_si(precision, &vector->v[size - 1], coefficient); 00078 } else { 00079 // The term is an iterator or a parameter coefficient 00080 rank = clan_symbol_get_rank(symbol, identifier); 00081 00082 if (clan_symbol_get_type(symbol, identifier) == CLAN_TYPE_ITERATOR) 00083 osl_int_set_si(precision, &vector->v[rank], coefficient); 00084 else 00085 osl_int_set_si(precision, 00086 &vector->v[CLAN_MAX_DEPTH + CLAN_MAX_LOCAL_DIMS + rank], 00087 coefficient); 00088 } 00089 return vector; 00090 }