Beispiel #1
0
/* Transform
   1) Memory references.
*/
static void
mf_xform_statements (void)
{
  basic_block bb, next;
  gimple_stmt_iterator i;
  int saved_last_basic_block = last_basic_block;
  enum gimple_rhs_class grhs_class;

  bb = ENTRY_BLOCK_PTR ->next_bb;
  do
    {
      next = bb->next_bb;
      for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
        {
          gimple s = gsi_stmt (i);

          /* Only a few GIMPLE statements can reference memory.  */
          switch (gimple_code (s))
            {
            case GIMPLE_ASSIGN:
	      mf_xform_derefs_1 (&i, gimple_assign_lhs_ptr (s),
		  		 gimple_location (s), integer_one_node);
	      mf_xform_derefs_1 (&i, gimple_assign_rhs1_ptr (s),
		  		 gimple_location (s), integer_zero_node);
	      grhs_class = get_gimple_rhs_class (gimple_assign_rhs_code (s));
	      if (grhs_class == GIMPLE_BINARY_RHS)
		mf_xform_derefs_1 (&i, gimple_assign_rhs2_ptr (s),
				   gimple_location (s), integer_zero_node);
              break;

            case GIMPLE_RETURN:
              if (gimple_return_retval (s) != NULL_TREE)
                {
                  mf_xform_derefs_1 (&i, gimple_return_retval_ptr (s),
				     gimple_location (s),
				     integer_zero_node);
                }
              break;

            default:
              ;
            }
        }
      bb = next;
    }
  while (bb && bb->index <= saved_last_basic_block);
}
Beispiel #2
0
static void
mf_xform_derefs (void)
{
  basic_block bb, next;
  block_stmt_iterator i;
  int saved_last_basic_block = last_basic_block;

  bb = ENTRY_BLOCK_PTR ->next_bb;
  do
    {
      next = bb->next_bb;
      for (i = bsi_start (bb); !bsi_end_p (i); bsi_next (&i))
        {
          tree s = bsi_stmt (i);

          /* Only a few GIMPLE statements can reference memory.  */
          switch (TREE_CODE (s))
            {
            case MODIFY_EXPR:
              mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 0), EXPR_LOCUS (s),
                                 integer_one_node);
              mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 1), EXPR_LOCUS (s),
                                 integer_zero_node);
              break;

            case RETURN_EXPR:
              if (TREE_OPERAND (s, 0) != NULL_TREE)
                {
                  if (TREE_CODE (TREE_OPERAND (s, 0)) == MODIFY_EXPR)
                    mf_xform_derefs_1 (&i, &TREE_OPERAND (TREE_OPERAND (s, 0), 1),
                                       EXPR_LOCUS (s), integer_zero_node);
                  else
                    mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 0), EXPR_LOCUS (s),
                                       integer_zero_node);
                }
              break;

            default:
              ;
            }
        }
      bb = next;
    }
  while (bb && bb->index <= saved_last_basic_block);
}
Beispiel #3
0
/* Transform
   1) Memory references.
   2) BUILTIN_ALLOCA calls.
*/
static void
mf_xform_statements (void)
{
	basic_block bb, next;
	gimple_stmt_iterator i;
	int saved_last_basic_block = last_basic_block;
	enum gimple_rhs_class grhs_class;
    unsigned argc, j;

	bb = ENTRY_BLOCK_PTR ->next_bb;
	do
	{
		next = bb->next_bb;
		for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
		{
			gimple s = gsi_stmt (i);

			/* Only a few GIMPLE statements can reference memory.  */
			switch (gimple_code (s))
			{
				case GIMPLE_ASSIGN:
					DEBUGLOG("\n\n******** Gimlpe Assign LHS ***********\n");
					mf_xform_derefs_1 (&i, gimple_assign_lhs_ptr (s),
							gimple_location (s), integer_one_node);
					DEBUGLOG("******** Gimlpe Assign RHS ***********\n");
					mf_xform_derefs_1 (&i, gimple_assign_rhs1_ptr (s),
							gimple_location (s), integer_zero_node);
					grhs_class = get_gimple_rhs_class (gimple_assign_rhs_code (s));
					if (grhs_class == GIMPLE_BINARY_RHS)
						mf_xform_derefs_1 (&i, gimple_assign_rhs2_ptr (s),
								gimple_location (s), integer_zero_node);
					break;

				case GIMPLE_RETURN:
					if (gimple_return_retval (s) != NULL_TREE)
					{
						mf_xform_derefs_1 (&i, gimple_return_retval_ptr (s),
								gimple_location (s),
								integer_zero_node);
					}
					break;

				case GIMPLE_CALL:
					{
						tree fndecl = gimple_call_fndecl (s);
						//if (fndecl && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA))
						//	gimple_call_set_cannot_inline (s, true);

                        argc = gimple_call_num_args(s);
                        for (j = 0; j < argc; j++){
                            mf_xform_derefs_1 (&i, gimple_call_arg_ptr (s, j),
								gimple_location (s), integer_zero_node);
                        }
					}
					break;

				default:
					;
			}
		}
		bb = next;
	}
	while (bb && bb->index <= saved_last_basic_block);
}