beloopana: Remove duplicate comments.
[libfirm] / ir / lower / lower_calls.h
index 5da697a..24192eb 100644 (file)
@@ -1,70 +1,28 @@
 /*
- * Project:     libFIRM
- * File name:   ir/lower/lower_calls.h
- * Purpose:     lowering of Calls with compound parameters
- * Author:      Michael Beck
- * Created:
- * CVS-ID:      $Id$
- * Copyright:   (c) 1998-2005 Universität Karlsruhe
- * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ * This file is part of libFirm.
+ * Copyright (C) 2012 University of Karlsruhe.
  */
 
 /**
- * @file lower_calls.h
- *
- * Lowering of Calls with compound return types.
- *
- * @author Michael Beck
+ * @file
+ * @brief   Lowering of calls with compound arguments
+ * @author  Michael Beck
  */
-#ifndef _LOWER_CALLS_H_
-#define _LOWER_CALLS_H_
+#ifndef FIRM_LOWER_CALLS_H
+#define FIRM_LOWER_CALLS_H
 
-/**
- * A type telling where to add hidden parameters.
- */
-typedef enum add_hidden_params {
-  ADD_HIDDEN_ALWAYS_IN_FRONT = 0,   /**< always add hidden parameters in front (default). */
-  ADD_HIDDEN_ALWAYS_LAST     = 1,   /**< always add hidden parameters last, did not work for variadic functions. */
-  ADD_HIDDEN_SMART           = 2    /**< add hidden parameters last for non-variadic and first for variadic functions. */
-} add_hidden;
+#include "firm_types.h"
 
 /**
  * Additional flags for the lowering.
  */
-enum lowering_flags {
-  LF_NONE              = 0, /**< no additional flags */
-  LF_COMPOUND_PARAM    = 1, /**< lower calls with compound parameters */
-  LF_COMPOUND_RETURN   = 2, /**< lower calls with compound returns */
-  LF_RETURN_HIDDEN     = 4, /**< return the hidden address instead of void */
-  LF_SMALL_CMP_IN_REGS = 8  /**< return small compound values in registers */
-};
-
-/** Maximum number of registers that can be used to return compound values. */
-#define MAX_REGISTER_RET_VAL 2
-
-/**
- * A struct containing all control parameters for
- * lower_compound_ret_calls().
- */
-typedef struct {
-  int        def_ptr_alignment;   /**< Default alignment for data pointer. */
-  unsigned   flags;               /**< A bitmask of enum lowering_flags. */
-  add_hidden hidden_params;       /**< Where to add hidden parameters. */
-
-  /**
-   * A function returning a pointer type for a given type.
-   * If this pointer is NULL, a new pointer type is always created.
-   */
-  ir_type *(*find_pointer_type)(ir_type *e_type, ir_mode *mode, int alignment);
-
-  /**
-   * If the LF_SMALL_CMP_IN_REGS flag is set, this function will be called
-   * to decide, whether a compound value should be returned in registers.
-   * This function must return the number of used registers and fill in the modes
-   * of the registers to use. Up to MAX_REGISTER_RET_VAL registers can be used.
-   */
-  int (*ret_compound_in_regs)(ir_type *compound_tp, ir_mode **modes);
-} lower_params_t;
+typedef enum compound_call_lowering_flags {
+       LF_NONE                 = 0,      /**< no additional flags */
+       LF_RETURN_HIDDEN        = 1 << 0, /**< return the hidden address instead of void */
+       LF_DONT_LOWER_ARGUMENTS = 1 << 1, /**< don't lower compound call arguments
+                                              (some backends can handle them themselves) */
+} compound_call_lowering_flags;
+ENUM_BITSET(compound_call_lowering_flags)
 
 /**
  * Lower calls with compound parameter and return types.
@@ -124,16 +82,7 @@ typedef struct {
      ret->a = a;
    }
    @endcode
- *
- * @param params  A structure containing the control parameter for this
- *                transformation.
- *
- * During the transformation, pointer types must be created or reused.
- * The caller can provide params->find_pointer_type for this task to
- * reduce the number of created pointer types.
- * If params->find_pointer_type is NULL, new pointer types
- * are always created automatically.
  */
-void lower_calls_with_compounds(const lower_params_t *params);
+void lower_calls_with_compounds(compound_call_lowering_flags flags);
 
-#endif /* _LOWER_CALLS_H_ */
+#endif