Use switch to decide which ia32 transformer is selected.
authorSebastian Buchwald <Sebastian.Buchwald@kit.edu>
Mon, 18 Aug 2008 08:11:20 +0000 (08:11 +0000)
committerSebastian Buchwald <Sebastian.Buchwald@kit.edu>
Mon, 18 Aug 2008 08:11:20 +0000 (08:11 +0000)
[r21234]

ir/be/ia32/bearch_ia32.c
ir/be/ia32/bearch_ia32_t.h
ir/be/ia32/ia32_common_transform.c

index 7a50ed6..684d51a 100644 (file)
@@ -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) */
index 68243d0..54f42dd 100644 (file)
@@ -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;
 
index d596b08..8d1b9e0 100644 (file)
@@ -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;