remove old+unused structure analysis
[libfirm] / ir / ir / irmode_t.h
index 7cde724..38634ee 100644 (file)
 /*
 /*
- * Project:     libFIRM
- * File name:   ir/ir/irmode_t.h
- * Purpose:     Data modes of operations -- private header.
- * Author:      Martin Trapp, Christian Schaefer
- * Modified by: Goetz Lindenmaier, Mathias Heil
- * Created:
- * CVS-ID:      $Id$
- * Copyright:   (c) 1998-2003 Universität Karlsruhe
- * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
  */
 
  */
 
-
 /**
 /**
- * @file irmode_t.h
+ * @file
+ * @brief   Data modes of operations -- private header.
+ * @author  Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Mathias Heil,
+ *          Michael Beck
+ * @version $Id$
  */
  */
+#ifndef FIRM_IR_IRMODE_T_H
+#define FIRM_IR_IRMODE_T_H
 
 
-# ifndef _IRMODE_T_H_
-# define _IRMODE_T_H_
-
-# include "irmode.h"
-# include "tv.h"
-
-/** This struct is supposed to completely define a mode. **/
-struct ir_mode {
-  firm_kind         kind;       /**< distinguishes this node from others */
-  modecode          code;       /**< unambiguous identifier of a mode */
-  ident             *name;      /**< Name ident of this mode */
-
-  /* ----------------------------------------------------------------------- */
-  /* On changing this struct you have to evaluate the mode_are_equal function!*/
-  mode_sort         sort;          /**< coarse classification of this mode:
-                                     int, float, reference ...
-                                     (see irmode.h) */
-  mode_arithmetic   arithmetic;    /**< different arithmetic operations possible with a mode */
-  int               size;          /**< size of the mode in Bits. */
-  unsigned          sign:1;        /**< signedness of this mode */
-  unsigned int      modulo_shift;  /**< number of bits a values of this mode will be shifted */
-  unsigned          vector_elem;   /**< if this is not equal 1, this is a vector mode with
-                                       vector_elem number of elements, size contains the size
-                                       of all bits and must be dividable by vector_elem */
-
-  /* ----------------------------------------------------------------------- */
-  tarval            *min;       /**< the minimum value that can be expressed */
-  tarval            *max;       /**< the maximum value that can be expressed */
-  tarval            *null;      /**< the value 0 */
-  tarval            *one;       /**< the value 1 */
-  tarval            *minus_one; /**< the value -1 */
-  void              *link;      /**< To store some intermediate information */
-  const void        *tv_priv;   /**< tarval module will save private data here */
-};
-
+#include <assert.h>
+#include "irtypes.h"
+#include "irmode.h"
 
 /* ------------------------------- *
  * inline functions                *
  * ------------------------------- */
 
 /* ------------------------------- *
  * inline functions                *
  * ------------------------------- */
-extern ir_mode *mode_P_code, *mode_P_data;
-
-static INLINE ir_mode *
-_get_modeP_code(void) { return mode_P_code; }
+static inline ir_mode *_get_modeP_code(void) { return mode_P_code; }
 
 
-static INLINE ir_mode *
-_get_modeP_data(void) { return mode_P_data; }
+static inline ir_mode *_get_modeP_data(void) { return mode_P_data; }
 
 
-static INLINE modecode
-_get_mode_modecode(const ir_mode *mode) { return mode->code; }
+static inline ident *_get_mode_ident(const ir_mode *mode) { return mode->name; }
 
 
-static INLINE ident *
-_get_mode_ident(const ir_mode *mode) { return mode->name; }
+static inline ir_mode_sort _get_mode_sort(const ir_mode *mode) { return mode->sort; }
 
 
-static INLINE mode_sort
-_get_mode_sort(const ir_mode* mode) { return mode->sort; }
+static inline unsigned _get_mode_size_bits(const ir_mode *mode) { return mode->size; }
 
 
-static INLINE int
-_get_mode_size_bits(const ir_mode *mode) { return mode->size; }
-
-static INLINE int
-_get_mode_size_bytes(const ir_mode *mode) {
-  int size = _get_mode_size_bits(mode);
-  if ((size & 7) != 0) return -1;
-  return size >> 3;
+static inline unsigned _get_mode_size_bytes(const ir_mode *mode)
+{
+       unsigned size = _get_mode_size_bits(mode);
+       if ((size & 7) != 0) return (unsigned) -1;
+       return size >> 3;
 }
 
 }
 
-static INLINE int
-_get_mode_sign(const ir_mode *mode) { return mode->sign; }
+static inline int _get_mode_sign(const ir_mode *mode) { return mode->sign; }
 
 
-static INLINE int
-_get_mode_arithmetic(const ir_mode *mode) { return mode->arithmetic; }
+static inline ir_mode_arithmetic _get_mode_arithmetic(const ir_mode *mode) { return mode->arithmetic; }
 
 
-static INLINE unsigned int
-_get_mode_modulo_shift(const ir_mode *mode) { return mode->modulo_shift; }
+static inline unsigned int _get_mode_modulo_shift(const ir_mode *mode) { return mode->modulo_shift; }
 
 
-static INLINE unsigned int
-_get_mode_vector_elems(const ir_mode *mode) { return mode->vector_elem; }
+static inline unsigned int _get_mode_vector_elems(const ir_mode *mode) { return mode->vector_elem; }
 
 
-static INLINE void *
-_get_mode_link(const ir_mode *mode) { return mode->link; }
+static inline void * _get_mode_link(const ir_mode *mode) { return mode->link; }
 
 
-static INLINE void
-_set_mode_link(ir_mode *mode, void *l) { mode->link = l; }
+static inline void _set_mode_link(ir_mode *mode, void *l) { mode->link = l; }
 
 
-/* Functions to check, whether a modecode is signed, float, int, num, data,
+/* Functions to check, whether a mode is signed, float, int, num, data,
    datab or dataM. For more exact definitions read the corresponding pages
    in the firm documentation or the following enumeration
 
    datab or dataM. For more exact definitions read the corresponding pages
    in the firm documentation or the following enumeration
 
@@ -136,76 +100,59 @@ _set_mode_link(ir_mode *mode, void *l) { mode->link = l; }
             = {data || irm_M}
 */
 
             = {data || irm_M}
 */
 
-static INLINE int
-_mode_is_signed(const ir_mode *mode) {
-  assert(mode);
-  return mode->sign;
-}
-
-static INLINE int
-_mode_is_float(const ir_mode *mode) {
-  assert(mode);
-  return (_get_mode_sort(mode) == irms_float_number);
+static inline int _mode_is_signed(const ir_mode *mode)
+{
+       return mode->sign;
 }
 
 }
 
-static INLINE int
-_mode_is_int(const ir_mode *mode) {
-  assert(mode);
-  return (_get_mode_sort(mode) == irms_int_number);
+static inline int _mode_is_float(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) == irms_float_number);
 }
 
 }
 
-static INLINE int
-_mode_is_character(const ir_mode *mode) {
-  assert(mode);
-  return (_get_mode_sort(mode) == irms_character);
+static inline int _mode_is_int(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) == irms_int_number);
 }
 
 }
 
-static INLINE int
-_mode_is_reference(const ir_mode *mode) {
-  assert(mode);
-  return (_get_mode_sort(mode) == irms_reference);
+static inline int _mode_is_reference(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) == irms_reference);
 }
 
 }
 
-static INLINE int
-_mode_is_num(const ir_mode *mode) {
-  assert(mode);
-  return (_mode_is_int(mode) || _mode_is_float(mode));
+static inline int _mode_is_num(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) & irmsh_is_num);
 }
 
 }
 
-static INLINE int
-_mode_is_numP(const ir_mode *mode) {
-  assert(mode);
-  return (_mode_is_int(mode) || _mode_is_float(mode) || _mode_is_reference(mode));
+static inline int _mode_is_data(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) & irmsh_is_data);
 }
 
 }
 
-static INLINE int
-_mode_is_data(const ir_mode *mode) {
-  assert(mode);
-  return (_mode_is_num(mode) || _get_mode_sort(mode) == irms_character || _get_mode_sort(mode) == irms_reference);
+static inline int _mode_is_datab(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) & irmsh_is_datab);
 }
 
 }
 
-static INLINE int
-_mode_is_datab(const ir_mode *mode) {
-  assert(mode);
-  return (_mode_is_data(mode) || _get_mode_sort(mode) == irms_internal_boolean);
+static inline int _mode_is_dataM(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) & irmsh_is_dataM);
 }
 
 }
 
-static INLINE int
-_mode_is_dataM(const ir_mode *mode) {
-  assert(mode);
-  return (_mode_is_data(mode) || _get_mode_modecode(mode) == irm_M);
+static inline int _mode_is_float_vector(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) == irms_float_number) && (_get_mode_vector_elems(mode) > 1);
 }
 
 }
 
-static INLINE int
-_mode_is_float_vector(const ir_mode *mode) {
-  assert(mode);
-  return (_get_mode_sort(mode) == irms_float_number) && (_get_mode_vector_elems(mode) > 1);
+static inline int _mode_is_int_vector(const ir_mode *mode)
+{
+       return (_get_mode_sort(mode) == irms_int_number) && (_get_mode_vector_elems(mode) > 1);
 }
 
 }
 
-static INLINE int
-_mode_is_int_vector(const ir_mode *mode) {
-  assert(mode);
-  return (_get_mode_sort(mode) == irms_int_number) && (_get_mode_vector_elems(mode) > 1);
+static inline ir_type *get_type_for_mode_(const ir_mode *mode)
+{
+       return mode->type;
 }
 
 /** mode module initialization, call once before use of any other function **/
 }
 
 /** mode module initialization, call once before use of any other function **/
@@ -216,7 +163,6 @@ void finish_mode(void);
 
 #define get_modeP_code()               _get_modeP_code()
 #define get_modeP_data()               _get_modeP_data()
 
 #define get_modeP_code()               _get_modeP_code()
 #define get_modeP_data()               _get_modeP_data()
-#define get_mode_modecode(mode)        _get_mode_modecode(mode)
 #define get_mode_ident(mode)           _get_mode_ident(mode)
 #define get_mode_sort(mode)            _get_mode_sort(mode)
 #define get_mode_size_bits(mode)       _get_mode_size_bits(mode)
 #define get_mode_ident(mode)           _get_mode_ident(mode)
 #define get_mode_sort(mode)            _get_mode_sort(mode)
 #define get_mode_size_bits(mode)       _get_mode_size_bits(mode)
@@ -230,14 +176,13 @@ void finish_mode(void);
 #define mode_is_signed(mode)           _mode_is_signed(mode)
 #define mode_is_float(mode)            _mode_is_float(mode)
 #define mode_is_int(mode)              _mode_is_int(mode)
 #define mode_is_signed(mode)           _mode_is_signed(mode)
 #define mode_is_float(mode)            _mode_is_float(mode)
 #define mode_is_int(mode)              _mode_is_int(mode)
-#define mode_is_character(mode)        _mode_is_character(mode)
 #define mode_is_reference(mode)        _mode_is_reference(mode)
 #define mode_is_num(mode)              _mode_is_num(mode)
 #define mode_is_reference(mode)        _mode_is_reference(mode)
 #define mode_is_num(mode)              _mode_is_num(mode)
-#define mode_is_numP(mode)             _mode_is_numP(mode)
 #define mode_is_data(mode)             _mode_is_data(mode)
 #define mode_is_datab(mode)            _mode_is_datab(mode)
 #define mode_is_dataM(mode)            _mode_is_dataM(mode)
 #define mode_is_float_vector(mode)     _mode_is_float_vector(mode)
 #define mode_is_int_vector(mode)       _mode_is_int_vector(mode)
 #define mode_is_data(mode)             _mode_is_data(mode)
 #define mode_is_datab(mode)            _mode_is_datab(mode)
 #define mode_is_dataM(mode)            _mode_is_dataM(mode)
 #define mode_is_float_vector(mode)     _mode_is_float_vector(mode)
 #define mode_is_int_vector(mode)       _mode_is_int_vector(mode)
+#define get_type_for_mode(mode)        get_type_for_mode_(mode)
 
 
-#endif /* _IRMODE_T_H_ */
+#endif