OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [config/] [epiphany/] [mode-switch-use.c] - Blame information for rev 750

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 709 jeremybenn
/* Insert USEs in instructions that require mode switching.
2
   This should probably be merged into mode-switching.c .
3
   Copyright (C) 2011 Free Software Foundation, Inc.
4
   Contributed by Embecosm on behalf of Adapteva, Inc.
5
 
6
This file is part of GCC.
7
 
8
GCC is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 3, or (at your option)
11
any later version.
12
 
13
GCC is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with GCC; see the file COPYING3.  If not see
20
<http://www.gnu.org/licenses/>.  */
21
 
22
#include "config.h"
23
#include "system.h"
24
#include "coretypes.h"
25
#include "tm.h"
26
#include "rtl.h"
27
#include "function.h"
28
#include "emit-rtl.h"
29
#include "tree-pass.h"
30
#include "insn-attr.h"
31
#include "insn-config.h"
32
#include "recog.h"
33
#include "tm_p.h"
34
#include "df.h"
35
 
36
#ifndef TARGET_INSERT_MODE_SWITCH_USE
37
#define TARGET_INSERT_MODE_SWITCH_USE NULL
38
#endif
39
 
40
static unsigned int
41
insert_uses (void)
42
{
43
  static const int num_modes[] = NUM_MODES_FOR_MODE_SWITCHING;
44
#define N_ENTITIES ARRAY_SIZE (num_modes)
45
  int e;
46
  void (*target_insert_mode_switch_use) (rtx insn, int, int)
47
    = TARGET_INSERT_MODE_SWITCH_USE;
48
 
49
  for (e = N_ENTITIES - 1; e >= 0; e--)
50
    {
51
      int no_mode = num_modes[e];
52
      rtx insn;
53
      int mode;
54
 
55
      if (!OPTIMIZE_MODE_SWITCHING (e))
56
        continue;
57
      for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
58
        {
59
          if (!INSN_P (insn))
60
            continue;
61
          mode = MODE_NEEDED (e, insn);
62
          if (mode == no_mode)
63
            continue;
64
          if (target_insert_mode_switch_use)
65
            {
66
              target_insert_mode_switch_use (insn, e, mode);
67
              df_insn_rescan (insn);
68
            }
69
        }
70
    }
71
  return 0;
72
}
73
 
74
struct rtl_opt_pass pass_mode_switch_use =
75
{
76
 {
77
  RTL_PASS,
78
  "mode_switch_use",                    /* name */
79
  NULL,                                 /* gate */
80
  insert_uses,                          /* execute */
81
  NULL,                                 /* sub */
82
  NULL,                                 /* next */
83
  0,                                     /* static_pass_number */
84
  TV_NONE,                              /* tv_id */
85
  0,                                     /* properties_required */
86
  0,                                     /* properties_provided */
87
  0,                                     /* properties_destroyed */
88
  0,                                     /* todo_flags_start */
89
  0,                                     /* todo_flags_finish */
90
 }
91
};

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.