]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/gcn/gcn-protos.h
1 /* Copyright (C) 2016-2021 Free Software Foundation, Inc.
3 This file is free software; you can redistribute it and/or modify it under
4 the terms of the GNU General Public License as published by the Free
5 Software Foundation; either version 3 of the License, or (at your option)
8 This file is distributed in the hope that it will be useful, but WITHOUT
9 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 You should have received a copy of the GNU General Public License
14 along with GCC; see the file COPYING3. If not see
15 <http://www.gnu.org/licenses/>. */
20 extern void gcn_asm_output_symbol_ref (FILE *file
, rtx x
);
21 extern tree
gcn_builtin_decl (unsigned code
, bool initialize_p
);
22 extern bool gcn_can_split_p (machine_mode
, rtx
);
23 extern bool gcn_constant64_p (rtx
);
24 extern bool gcn_constant_p (rtx
);
25 extern rtx
gcn_convert_mask_mode (rtx reg
);
26 extern unsigned int gcn_dwarf_register_number (unsigned int regno
);
27 extern char * gcn_expand_dpp_shr_insn (machine_mode
, const char *, int, int);
28 extern void gcn_expand_epilogue ();
29 extern rtx
gcn_expand_scaled_offsets (addr_space_t as
, rtx base
, rtx offsets
,
30 rtx scale
, bool unsigned_p
, rtx exec
);
31 extern void gcn_expand_prologue ();
32 extern rtx
gcn_expand_reduc_scalar (machine_mode
, rtx
, int);
33 extern rtx
gcn_expand_scalar_to_vector_address (machine_mode
, rtx
, rtx
, rtx
);
34 extern void gcn_expand_vector_init (rtx
, rtx
);
35 extern bool gcn_flat_address_p (rtx
, machine_mode
);
36 extern bool gcn_fp_constant_p (rtx
, bool);
37 extern rtx
gcn_full_exec ();
38 extern rtx
gcn_full_exec_reg ();
39 extern rtx
gcn_gen_undef (machine_mode
);
40 extern bool gcn_global_address_p (rtx
);
41 extern tree
gcn_goacc_adjust_propagation_record (tree record_type
, bool sender
,
43 extern void gcn_goacc_adjust_gangprivate_decl (tree var
);
44 extern void gcn_goacc_reduction (gcall
*call
);
45 extern bool gcn_hard_regno_rename_ok (unsigned int from_reg
,
47 extern machine_mode
gcn_hard_regno_caller_save_mode (unsigned int regno
,
49 machine_mode regmode
);
50 extern bool gcn_hard_regno_mode_ok (int regno
, machine_mode mode
);
51 extern int gcn_hard_regno_nregs (int regno
, machine_mode mode
);
52 extern void gcn_hsa_declare_function_name (FILE *file
, const char *name
,
54 extern HOST_WIDE_INT
gcn_initial_elimination_offset (int, int);
55 extern bool gcn_inline_constant64_p (rtx
, bool);
56 extern bool gcn_inline_constant_p (rtx
);
57 extern int gcn_inline_fp_constant_p (rtx
, bool);
58 extern reg_class
gcn_mode_code_base_reg_class (machine_mode
, addr_space_t
,
60 extern rtx
gcn_oacc_dim_pos (int dim
);
61 extern rtx
gcn_oacc_dim_size (int dim
);
62 extern rtx
gcn_operand_doublepart (machine_mode
, rtx
, int);
63 extern rtx
gcn_operand_part (machine_mode
, rtx
, int);
64 extern bool gcn_regno_mode_code_ok_for_base_p (int, machine_mode
,
65 addr_space_t
, int, int);
66 extern reg_class
gcn_regno_reg_class (int regno
);
67 extern rtx
gcn_scalar_exec ();
68 extern rtx
gcn_scalar_exec_reg ();
69 extern bool gcn_scalar_flat_address_p (rtx
);
70 extern bool gcn_scalar_flat_mem_p (rtx
);
71 extern bool gcn_sgpr_move_p (rtx
, rtx
);
72 extern bool gcn_valid_move_p (machine_mode
, rtx
, rtx
);
73 extern rtx
gcn_vec_constant (machine_mode
, int);
74 extern rtx
gcn_vec_constant (machine_mode
, rtx
);
75 extern bool gcn_vgpr_move_p (rtx
, rtx
);
76 extern void print_operand_address (FILE *file
, register rtx addr
);
77 extern void print_operand (FILE *file
, rtx x
, int code
);
78 extern bool regno_ok_for_index_p (int);
90 extern bool gcn_valid_cvt_p (machine_mode from
, machine_mode to
,
94 extern void gcn_init_cumulative_args (CUMULATIVE_ARGS
*, tree
, rtx
, tree
,
96 class gimple_opt_pass
;
97 extern gimple_opt_pass
*make_pass_omp_gcn (gcc::context
*ctxt
);
100 /* Return true if MODE is valid for 1 VGPR register. */
103 vgpr_1reg_mode_p (machine_mode mode
)
105 return (mode
== SImode
|| mode
== SFmode
|| mode
== HImode
|| mode
== QImode
106 || mode
== V64QImode
|| mode
== V64HImode
|| mode
== V64SImode
107 || mode
== V64HFmode
|| mode
== V64SFmode
|| mode
== BImode
);
110 /* Return true if MODE is valid for 1 SGPR register. */
113 sgpr_1reg_mode_p (machine_mode mode
)
115 return (mode
== SImode
|| mode
== SFmode
|| mode
== HImode
116 || mode
== QImode
|| mode
== BImode
);
119 /* Return true if MODE is valid for pair of VGPR registers. */
122 vgpr_2reg_mode_p (machine_mode mode
)
124 return (mode
== DImode
|| mode
== DFmode
125 || mode
== V64DImode
|| mode
== V64DFmode
);
128 /* Return true if MODE can be handled directly by VGPR operations. */
131 vgpr_vector_mode_p (machine_mode mode
)
133 return (mode
== V64QImode
|| mode
== V64HImode
134 || mode
== V64SImode
|| mode
== V64DImode
135 || mode
== V64HFmode
|| mode
== V64SFmode
|| mode
== V64DFmode
);
139 /* Return true if MODE is valid for pair of SGPR registers. */
142 sgpr_2reg_mode_p (machine_mode mode
)
144 return mode
== DImode
|| mode
== DFmode
;