; Options for the GCN port of the compiler.

; Copyright (C) 2016-2021 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

HeaderInclude
config/gcn/gcn-opts.h

Enum
Name(gpu_type) Type(enum processor_type)
GCN GPU type to use:

EnumValue
Enum(gpu_type) String(fiji) Value(PROCESSOR_FIJI)

EnumValue
Enum(gpu_type) String(gfx900) Value(PROCESSOR_VEGA10)

EnumValue
Enum(gpu_type) String(gfx906) Value(PROCESSOR_VEGA20)

EnumValue
Enum(gpu_type) String(gfx908) Value(PROCESSOR_GFX908)

march=
Target RejectNegative Joined ToLower Enum(gpu_type) Var(gcn_arch) Init(PROCESSOR_FIJI)
Specify the name of the target GPU.

mtune=
Target RejectNegative Joined ToLower Enum(gpu_type) Var(gcn_tune) Init(PROCESSOR_FIJI)
Specify the name of the target GPU.

m32
Target RejectNegative InverseMask(ABI64)
Generate code for a 32-bit ABI.

m64
Target RejectNegative Mask(ABI64)
Generate code for a 64-bit ABI.

mgomp
Target RejectNegative
Enable OpenMP GPU offloading.

bool flag_bypass_init_error = false

mbypass-init-error
Target RejectNegative Var(flag_bypass_init_error)

int stack_size_opt = -1

mstack-size=
Target RejectNegative Joined UInteger Var(stack_size_opt) Init(-1)
-mstack-size=<number>	Set the private segment size per wave-front, in bytes.

int gang_private_size_opt = -1

mgang-private-size=
Target RejectNegative Joined UInteger Var(gang_private_size_opt) Init(-1)
Amount of local data-share (LDS) memory to reserve for gang-private variables.

Wopenacc-dims
Target Var(warn_openacc_dims) Warning
Warn about invalid OpenACC dimensions.

mxnack
Target Var(flag_xnack) Init(0)
Compile for devices requiring XNACK enabled. Default off.

Enum
Name(sram_ecc_type) Type(enum sram_ecc_type)
SRAM-ECC modes:

EnumValue
Enum(sram_ecc_type) String(off) Value(SRAM_ECC_OFF)

EnumValue
Enum(sram_ecc_type) String(on) Value(SRAM_ECC_ON)

EnumValue
Enum(sram_ecc_type) String(any) Value(SRAM_ECC_ANY)

msram-ecc=
Target RejectNegative Joined ToLower Enum(sram_ecc_type) Var(flag_sram_ecc) Init(SRAM_ECC_ANY)
Compile for devices with the SRAM ECC feature enabled, or not. Default \"any\".
