libFirm
lowering.h
1 /*
2  * This file is part of libFirm.
3  * Copyright (C) 2012 University of Karlsruhe.
4  */
5 
11 #ifndef FIRM_LOWERING_H
12 #define FIRM_LOWERING_H
13 
14 #include <stddef.h>
15 #include "firm_types.h"
16 
17 #include "begin.h"
18 
77 FIRM_API void lower_CopyB(ir_graph *irg, unsigned max_small_size,
78  unsigned min_large_size, int allow_misalignments);
79 
90 FIRM_API void lower_switch(ir_graph *irg, unsigned small_switch,
91  unsigned spare_size, ir_mode *selector_mode);
92 
99 FIRM_API void lower_highlevel_graph(ir_graph *irg);
100 
104 FIRM_API void lower_highlevel(void);
105 
112 FIRM_API void lower_const_code(void);
113 
122 typedef int lower_mux_callback(ir_node* mux);
123 
132 FIRM_API void lower_mux(ir_graph *irg, lower_mux_callback *cb_func);
133 
140 typedef int (i_mapper_func)(ir_node *node);
141 
144 enum ikind {
147 };
148 
152 typedef struct i_call_record {
153  enum ikind kind;
156 } i_call_record;
157 
161 typedef struct i_instr_record {
162  enum ikind kind;
166 
170 typedef union i_record {
171  enum ikind kind;
174 } i_record;
175 
177 
187  size_t length,
188  int part_block_used);
189 
194 FIRM_API void ir_free_intrinsics_map(ir_intrinsics_map *map);
195 
202 FIRM_API void ir_lower_intrinsics(ir_graph *irg, ir_intrinsics_map *map);
203 
210 FIRM_API int i_mapper_abs(ir_node *call);
211 
217 FIRM_API int i_mapper_sqrt(ir_node *call);
218 
224 FIRM_API int i_mapper_cbrt(ir_node *call);
225 
231 FIRM_API int i_mapper_pow(ir_node *call);
232 
238 FIRM_API int i_mapper_exp(ir_node *call);
239 
245 FIRM_API int i_mapper_exp2(ir_node *call);
246 
252 FIRM_API int i_mapper_exp10(ir_node *call);
253 
259 FIRM_API int i_mapper_log(ir_node *call);
260 
266 FIRM_API int i_mapper_log2(ir_node *call);
267 
273 FIRM_API int i_mapper_log10(ir_node *call);
274 
280 FIRM_API int i_mapper_sin(ir_node *call);
281 
287 FIRM_API int i_mapper_cos(ir_node *call);
288 
294 FIRM_API int i_mapper_tan(ir_node *call);
295 
301 FIRM_API int i_mapper_asin(ir_node *call);
302 
308 FIRM_API int i_mapper_acos(ir_node *call);
309 
315 FIRM_API int i_mapper_atan(ir_node *call);
316 
322 FIRM_API int i_mapper_sinh(ir_node *call);
323 
329 FIRM_API int i_mapper_cosh(ir_node *call);
330 
336 FIRM_API int i_mapper_tanh(ir_node *call);
337 
343 FIRM_API int i_mapper_strcmp(ir_node *call);
344 
350 FIRM_API int i_mapper_strncmp(ir_node *call);
351 
357 FIRM_API int i_mapper_strcpy(ir_node *call);
358 
364 FIRM_API int i_mapper_strlen(ir_node *call);
365 
371 FIRM_API int i_mapper_memcpy(ir_node *call);
372 
378 FIRM_API int i_mapper_memmove(ir_node *call);
379 
385 FIRM_API int i_mapper_memset(ir_node *call);
386 
392 FIRM_API int i_mapper_memcmp(ir_node *call);
393 
396 #include "end.h"
397 
398 #endif
ikind
kind of an instruction record
Definition: lowering.h:144
int i_mapper_exp2(ir_node *call)
A mapper for the floating point exp2(a): floattype exp2(floattype a);.
int i_mapper_strlen(ir_node *call)
A mapper for the strlen-Function: inttype strlen(char pointer a);.
int i_mapper_sqrt(ir_node *call)
A mapper for the floating point sqrt(v): floattype sqrt(floattype v);.
int i_mapper_cbrt(ir_node *call)
A mapper for the floating point cbrt(v): floattype sqrt(floattype v);.
void lower_highlevel_graph(ir_graph *irg)
Replaces Offsets and TypeConsts by a real constant if possible.
int i_mapper_abs(ir_node *call)
A mapper for the integer/float absolute value: type abs(type v).
int i_mapper_log(ir_node *call)
A mapper for the floating point log(a): floattype log(floattype a);.
void lower_mux(ir_graph *irg, lower_mux_callback *cb_func)
Lowers all mux nodes in the given graph.
int i_mapper_exp(ir_node *call)
A mapper for the floating point exp(a): floattype exp(floattype a);.
int i_mapper_asin(ir_node *call)
A mapper for the floating point asin(a): floattype asin(floattype a);.
int i_mapper_cosh(ir_node *call)
A mapper for the floating point cosh(a): floattype cosh(floattype a);.
void lower_CopyB(ir_graph *irg, unsigned max_small_size, unsigned min_large_size, int allow_misalignments)
Lower small CopyB nodes to Load/Store nodes, preserve medium-sized CopyB nodes and replace large Copy...
int i_mapper_log10(ir_node *call)
A mapper for the floating point log(a): floattype log(floattype a);.
enum ikind kind
must be INTRINSIC_CALL
Definition: lowering.h:153
int i_mapper_acos(ir_node *call)
A mapper for the floating point acos(a): floattype acos(floattype a);.
int i_mapper_tan(ir_node *call)
A mapper for the floating point tan(a): floattype tan(floattype a);.
void lower_highlevel(void)
Performs lowering on all graphs.
int lower_mux_callback(ir_node *mux)
Used as callback, whenever a lowerable mux is found.
Definition: lowering.h:122
int() i_mapper_func(ir_node *node)
An intrinsic mapper function.
Definition: lowering.h:140
int i_mapper_strncmp(ir_node *call)
A mapper for the strncmp-Function: inttype strncmp(char pointer a, char pointer b, inttype len);.
i_call_record i_call
used for call records
Definition: lowering.h:172
int i_mapper_tanh(ir_node *call)
A mapper for the floating point tanh(a): floattype tanh(floattype a);.
i_mapper_func * i_mapper
the mapper function to call
Definition: lowering.h:164
struct ir_node ir_node
Procedure Graph Node.
Definition: firm_types.h:53
ir_intrinsics_map * ir_create_intrinsics_map(i_record *list, size_t length, int part_block_used)
Create a new intrinsic lowering map which can be used by ir_lower_intrinsics.
int i_mapper_memset(ir_node *call)
A mapper for the memset-Function: void pointer memset(void pointer d, inttype C, inttype len);...
int i_mapper_memcmp(ir_node *call)
A mapper for the strncmp-Function: inttype memcmp(void pointer a, void pointer b, inttype len);...
int i_mapper_log2(ir_node *call)
A mapper for the floating point log(a): floattype log(floattype a);.
struct ir_intrinsics_map ir_intrinsics_map
Definition: lowering.h:176
void lower_const_code(void)
Performs lowering on all nodes of the const code irg.
the record represents an intrinsic instruction
Definition: lowering.h:146
int i_mapper_atan(ir_node *call)
A mapper for the floating point atan(a): floattype atan(floattype a);.
ir_op * op
the opcode that must be mapped.
Definition: lowering.h:163
int i_mapper_strcpy(ir_node *call)
A mapper for the strcpy-Function: char pointer strcpy(char pointer a, char pointer b);...
void ir_lower_intrinsics(ir_graph *irg, ir_intrinsics_map *map)
Go through all graphs and map calls to intrinsic functions and instructions.
int i_mapper_memcpy(ir_node *call)
A mapper for the memcpy-Function: void pointer memcpy(void pointer d, void pointer s...
int i_mapper_sin(ir_node *call)
A mapper for the floating point sin(a): floattype sin(floattype a);.
struct ir_entity ir_entity
Entity.
Definition: firm_types.h:83
int i_mapper_exp10(ir_node *call)
A mapper for the floating point exp10(a): floattype exp10(floattype a);.
struct ir_op ir_op
Node Opcode.
Definition: firm_types.h:56
An intrinsic record.
Definition: lowering.h:170
An intrinsic call record.
Definition: lowering.h:152
An intrinsic instruction record.
Definition: lowering.h:161
ir_entity * i_ent
the entity representing an intrinsic call
Definition: lowering.h:154
the record represents an intrinsic call
Definition: lowering.h:145
i_mapper_func * i_mapper
the mapper function to call
Definition: lowering.h:155
int i_mapper_pow(ir_node *call)
A mapper for the floating point pow(a, b): floattype pow(floattype a, floattype b);.
int i_mapper_strcmp(ir_node *call)
A mapper for the strcmp-Function: inttype strcmp(char pointer a, char pointer b);.
struct ir_mode ir_mode
SSA Value mode.
Definition: firm_types.h:59
int i_mapper_sinh(ir_node *call)
A mapper for the floating point sinh(a): floattype sinh(floattype a);.
struct ir_graph ir_graph
Procedure Graph.
Definition: firm_types.h:74
i_instr_record i_instr
used for isnstruction records
Definition: lowering.h:173
void ir_free_intrinsics_map(ir_intrinsics_map *map)
Frees resources occupied by an intrisics_map created by ir_create_intrinsics_map().
int i_mapper_memmove(ir_node *call)
A mapper for the memmove-Function: void pointer memmove(void pointer d, void pointer s...
int i_mapper_cos(ir_node *call)
A mapper for the floating point sin(a): floattype cos(floattype a);.
void lower_switch(ir_graph *irg, unsigned small_switch, unsigned spare_size, ir_mode *selector_mode)
Lowers all Switches (Cond nodes with non-boolean mode) depending on spare_size.