annotate gcc/config/gcn/gcn-protos.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* Copyright (C) 2016-2020 Free Software Foundation, Inc.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 This file is free software; you can redistribute it and/or modify it under
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 the terms of the GNU General Public License as published by the Free
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 Software Foundation; either version 3 of the License, or (at your option)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 any later version.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 This file is distributed in the hope that it will be useful, but WITHOUT
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 for more details.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 You should have received a copy of the GNU General Public License
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 along with GCC; see the file COPYING3. If not see
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 <http://www.gnu.org/licenses/>. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 #ifndef _GCN_PROTOS_
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 #define _GCN_PROTOS_
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 extern void gcn_asm_output_symbol_ref (FILE *file, rtx x);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 extern tree gcn_builtin_decl (unsigned code, bool initialize_p);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 extern bool gcn_can_split_p (machine_mode, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 extern bool gcn_constant64_p (rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 extern bool gcn_constant_p (rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 extern rtx gcn_convert_mask_mode (rtx reg);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 extern char * gcn_expand_dpp_shr_insn (machine_mode, const char *, int, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 extern void gcn_expand_epilogue ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 extern rtx gcn_expand_scaled_offsets (addr_space_t as, rtx base, rtx offsets,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 rtx scale, bool unsigned_p, rtx exec);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 extern void gcn_expand_prologue ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 extern rtx gcn_expand_reduc_scalar (machine_mode, rtx, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 extern rtx gcn_expand_scalar_to_vector_address (machine_mode, rtx, rtx, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 extern void gcn_expand_vector_init (rtx, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 extern bool gcn_flat_address_p (rtx, machine_mode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 extern bool gcn_fp_constant_p (rtx, bool);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 extern rtx gcn_full_exec ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 extern rtx gcn_full_exec_reg ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 extern rtx gcn_gen_undef (machine_mode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 extern bool gcn_global_address_p (rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 extern tree gcn_goacc_adjust_propagation_record (tree record_type, bool sender,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 const char *name);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 extern void gcn_goacc_adjust_gangprivate_decl (tree var);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 extern void gcn_goacc_reduction (gcall *call);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 extern bool gcn_hard_regno_rename_ok (unsigned int from_reg,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 unsigned int to_reg);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 extern machine_mode gcn_hard_regno_caller_save_mode (unsigned int regno,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 unsigned int nregs,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 machine_mode regmode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 extern bool gcn_hard_regno_mode_ok (int regno, machine_mode mode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 extern int gcn_hard_regno_nregs (int regno, machine_mode mode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 extern void gcn_hsa_declare_function_name (FILE *file, const char *name,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 tree decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 extern HOST_WIDE_INT gcn_initial_elimination_offset (int, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 extern bool gcn_inline_constant64_p (rtx, bool);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 extern bool gcn_inline_constant_p (rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 extern int gcn_inline_fp_constant_p (rtx, bool);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 extern reg_class gcn_mode_code_base_reg_class (machine_mode, addr_space_t,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 int, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 extern rtx gcn_oacc_dim_pos (int dim);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 extern rtx gcn_oacc_dim_size (int dim);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 extern rtx gcn_operand_doublepart (machine_mode, rtx, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 extern rtx gcn_operand_part (machine_mode, rtx, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 extern bool gcn_regno_mode_code_ok_for_base_p (int, machine_mode,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 addr_space_t, int, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 extern reg_class gcn_regno_reg_class (int regno);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 extern rtx gcn_scalar_exec ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 extern rtx gcn_scalar_exec_reg ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 extern bool gcn_scalar_flat_address_p (rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 extern bool gcn_scalar_flat_mem_p (rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 extern bool gcn_sgpr_move_p (rtx, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 extern bool gcn_valid_move_p (machine_mode, rtx, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 extern rtx gcn_vec_constant (machine_mode, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 extern rtx gcn_vec_constant (machine_mode, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 extern bool gcn_vgpr_move_p (rtx, rtx);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 extern void print_operand_address (FILE *file, register rtx addr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 extern void print_operand (FILE *file, rtx x, int code);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 extern bool regno_ok_for_index_p (int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 enum gcn_cvt_t
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 fix_trunc_cvt,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 fixuns_trunc_cvt,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 float_cvt,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 floatuns_cvt,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 extend_cvt,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 trunc_cvt
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 extern bool gcn_valid_cvt_p (machine_mode from, machine_mode to,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 enum gcn_cvt_t op);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 #ifdef TREE_CODE
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 extern void gcn_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 class gimple_opt_pass;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 extern gimple_opt_pass *make_pass_omp_gcn (gcc::context *ctxt);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 /* Return true if MODE is valid for 1 VGPR register. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 inline bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 vgpr_1reg_mode_p (machine_mode mode)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 return (mode == SImode || mode == SFmode || mode == HImode || mode == QImode
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 || mode == V64QImode || mode == V64HImode || mode == V64SImode
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 || mode == V64HFmode || mode == V64SFmode || mode == BImode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 /* Return true if MODE is valid for 1 SGPR register. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 inline bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 sgpr_1reg_mode_p (machine_mode mode)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 return (mode == SImode || mode == SFmode || mode == HImode
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 || mode == QImode || mode == BImode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 /* Return true if MODE is valid for pair of VGPR registers. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 inline bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 vgpr_2reg_mode_p (machine_mode mode)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 return (mode == DImode || mode == DFmode
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 || mode == V64DImode || mode == V64DFmode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 /* Return true if MODE can be handled directly by VGPR operations. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 inline bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 vgpr_vector_mode_p (machine_mode mode)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 return (mode == V64QImode || mode == V64HImode
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 || mode == V64SImode || mode == V64DImode
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 || mode == V64HFmode || mode == V64SFmode || mode == V64DFmode);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 /* Return true if MODE is valid for pair of SGPR registers. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 inline bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 sgpr_2reg_mode_p (machine_mode mode)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 return mode == DImode || mode == DFmode;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 #endif