add missing dbg hooks for boolean simplifications
[libfirm] / include / libfirm / irmode.h
index 769fd0f..f24ac64 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -59,12 +59,10 @@ typedef enum { /* irm is short for `ir mode' */
        irm_Lu,                       /**< unsigned long(64) */
        irm_LLs,                      /**< signed long long(128) */
        irm_LLu,                      /**< unsigned long long(128) */
-       irm_C,                        /**< character */
        irm_P,                        /**< pointer */
        irm_b,                        /**< internal boolean */
        irm_M,                        /**< memory */
        irm_T,                        /**< tuple */
-       irm_U,                        /**< unicode character */
        irm_ANY,                      /**< undefined mode */
        irm_BAD,                      /**< bad mode */
        irm_max                       /**< maximum value for modecode */
@@ -86,8 +84,6 @@ typedef enum {
                                     Floating point computations can be performed. */
        irms_reference,         /**< A mode to represent entities.
                                     Restricted int computations can be performed */
-       irms_character          /**< A mode to represent characters/symbols
-                                    ?? Are computations allowed? as int?? */
 } mode_sort;
 
 /** These values represent the different arithmetic operations possible with a mode.
@@ -187,11 +183,11 @@ const char *get_mode_name(const ir_mode *mode);
 mode_sort   get_mode_sort(const ir_mode *mode);
 
 /** Returns the size of values of the mode in bits. */
-int get_mode_size_bits(const ir_mode *mode);
+unsigned get_mode_size_bits(const ir_mode *mode);
 
 /** Returns the size of values of the mode in bytes.
  *  If the size is not dividable by 8 returns -1. */
-int get_mode_size_bytes(const ir_mode *mode);
+unsigned get_mode_size_bytes(const ir_mode *mode);
 
 /** Returns the signess of a mode.
  *
@@ -199,7 +195,7 @@ int get_mode_size_bytes(const ir_mode *mode);
 int get_mode_sign(const ir_mode *mode);
 
 /** Returns the arithmetic of a mode */
-int get_mode_arithmetic(const ir_mode *mode);
+mode_arithmetic get_mode_arithmetic(const ir_mode *mode);
 
 /** Get the modulo shift attribute.
  *
@@ -266,6 +262,13 @@ tarval *get_mode_one(ir_mode *mode);
  */
 tarval *get_mode_minus_one(ir_mode *mode);
 
+/**
+ * Returns the value where all bits are One, represented in this mode.
+ *
+ * All One is defined only for modes integer, reference and boolean modes
+ */
+tarval *get_mode_all_one(ir_mode *mode);
+
 /**
  * Returns the positive infinite value of a mode.
  *
@@ -299,9 +302,6 @@ extern ir_mode *mode_Lu;  /**< unsigned long integer */
 extern ir_mode *mode_LLs; /**< signed long long integer */
 extern ir_mode *mode_LLu; /**< unsigned long long integer */
 
-extern ir_mode *mode_C;   /**< 8 bit char */
-extern ir_mode *mode_U;   /**< 16 bit unicode char */
-
 extern ir_mode *mode_P;   /**< pointer */
 extern ir_mode *mode_P_code; /**< A pointer mode that is set by the client of libfirm.  This mode
                                   represents the pointer size of the target machine code addresses. Is initialized
@@ -335,8 +335,6 @@ ir_mode *get_modeLs(void);
 ir_mode *get_modeLu(void);
 ir_mode *get_modeLLs(void);
 ir_mode *get_modeLLu(void);
-ir_mode *get_modeC(void);
-ir_mode *get_modeU(void);
 ir_mode *get_modeP(void);
 ir_mode *get_modeb(void);
 ir_mode *get_modeX(void);
@@ -366,7 +364,7 @@ void set_modeP_data(ir_mode *p);
 
 /**
    Functions to check, whether a modecode is signed, float, int, character,
-   reference, num, numP, data, datab or dataM.
+   reference, num, data, datab or dataM.
 
    For more exact definitions read the corresponding pages
    in the firm documentation or the following enumeration
@@ -377,20 +375,14 @@ void set_modeP_data(ir_mode *p);
    The set of "int" is defined as:
    int   = {irm_Bs, irm_Bu, irm_Hs, irm_Hu, irm_Is, irm_Iu, irm_Ls, irm_Lu}
 
-   The set of "character" is defined as:
-   character  = {irm_C, irm_U}
-
    The set of "reference" is defined as:
    reference  = {irm_P}
 
    The set of "num" is defined as:
    num   = {float || int}
 
-   The set of "numP" is defined as:
-   numP  =  {float || int || reference}
-
    The set of "data" is defined as:
-   data  =  {num || character || reference}
+   data  =  {num || reference}
 
    The set of "datab" is defined as:
    datab =  {data || irm_b }
@@ -405,10 +397,8 @@ void set_modeP_data(ir_mode *p);
 int mode_is_signed (const ir_mode *mode);
 int mode_is_float (const ir_mode *mode);
 int mode_is_int (const ir_mode *mode);
-int mode_is_character (const ir_mode *mode);
 int mode_is_reference (const ir_mode *mode);
 int mode_is_num (const ir_mode *mode);
-int mode_is_numP (const ir_mode *mode);
 int mode_is_data (const ir_mode *mode);
 int mode_is_datab (const ir_mode *mode);
 int mode_is_dataM (const ir_mode *mode);
@@ -416,7 +406,7 @@ int mode_is_float_vector (const ir_mode *mode);
 int mode_is_int_vector (const ir_mode *mode);
 
 /** Returns true if sm can be converted to lm without loss
-   according to firm definiton */
+   according to firm definition */
 int smaller_mode(const ir_mode *sm, const ir_mode *lm);
 
 /**