From 526d469f1f5deb24bba9f6af4c1804dca5ec287b Mon Sep 17 00:00:00 2001 From: Sebastian Buchwald Date: Mon, 18 Aug 2008 08:11:20 +0000 Subject: [PATCH 1/1] Use switch to decide which ia32 transformer is selected. [r21234] --- ir/be/ia32/bearch_ia32.c | 11 ++------- ir/be/ia32/bearch_ia32_t.h | 10 ++++++++ ir/be/ia32/ia32_common_transform.c | 37 +++++++++++++++++++++++------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index 7a50ed64c..684d51a1b 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -927,14 +927,7 @@ static void ia32_before_abi(void *self) { } } -typedef enum transformer_t { - TRANSFORMER_DEFAULT, -#ifdef FIRM_GRGEN_BE - TRANSFORMER_PBQP -#endif -} transformer_t; - -static transformer_t be_transformer = TRANSFORMER_DEFAULT; +transformer_t be_transformer = TRANSFORMER_DEFAULT; /** * Transforms the standard firm graph into @@ -977,7 +970,7 @@ static void ia32_prepare_graph(void *self) { break; #endif - default: panic("Invalid transformer"); + default: panic("invalid transformer"); } /* do local optimizations (mainly CSE) */ diff --git a/ir/be/ia32/bearch_ia32_t.h b/ir/be/ia32/bearch_ia32_t.h index 68243d0e5..54f42dddf 100644 --- a/ir/be/ia32/bearch_ia32_t.h +++ b/ir/be/ia32/bearch_ia32_t.h @@ -115,6 +115,16 @@ struct ia32_intrinsic_env_t { tarval *u64_bias; /**< bias value for conversion from float to unsigned 64 */ }; +typedef enum transformer_t { + TRANSFORMER_DEFAULT, +#ifdef FIRM_GRGEN_BE + TRANSFORMER_PBQP +#endif +} transformer_t; + +/** The selected transformer. */ +extern transformer_t be_transformer; + /** The mode for the floating point control word. */ extern ir_mode *mode_fpcw; diff --git a/ir/be/ia32/ia32_common_transform.c b/ir/be/ia32/ia32_common_transform.c index d596b0869..8d1b9e002 100644 --- a/ir/be/ia32/ia32_common_transform.c +++ b/ir/be/ia32/ia32_common_transform.c @@ -460,12 +460,24 @@ static void parse_asm_constraints(constraint_t *constraint, const char *c, ir_node *gen_ASM(ir_node *node) { ir_graph *irg = current_ir_graph; + + ir_node *block = NULL; + ir_node *new_block = NULL; + switch (be_transformer) { + case TRANSFORMER_DEFAULT: + block = get_nodes_block(node); + new_block = be_transform_node(block); + break; + #ifdef FIRM_GRGEN_BE - ir_node *new_block = get_nodes_block(node); -#else - ir_node *block = get_nodes_block(node); - ir_node *new_block = be_transform_node(block); + case TRANSFORMER_PBQP: + new_block = get_nodes_block(node); + break; #endif + + default: panic("invalid transformer"); + } + dbg_info *dbgi = get_irn_dbg_info(node); int i, arity; int out_idx; @@ -599,13 +611,22 @@ ir_node *gen_ASM(ir_node *node) } if (input == NULL) { + ir_node *pred = NULL; + switch (be_transformer) { + case TRANSFORMER_DEFAULT: + pred = get_irn_n(node, i); + input = be_transform_node(pred); + break; + #ifdef FIRM_GRGEN_BE - input = get_irn_n(node, i); -#else - ir_node *pred = get_irn_n(node, i); - input = be_transform_node(pred); + case TRANSFORMER_PBQP: + input = get_irn_n(node, i); + break; #endif + default: panic("invalid transformer"); + } + if (parsed_constraint.cls == NULL && parsed_constraint.same_as < 0) { is_memory_op = 1; -- 2.20.1